返回顶部
首页 > 资讯 > 后端开发 > GO >如何从 golang tcp 握手中获取 clientCert.Subject.CommonName?
  • 909
分享到

如何从 golang tcp 握手中获取 clientCert.Subject.CommonName?

2024-02-06 09:02:03 909人浏览 薄情痞子
摘要

问题内容 我有很多客户端使用不同的证书连接到我的 TLS tcp 端点。我正在尝试使用 RequireAndVerifyClientCert: certPool := x509.New

问题内容

我有很多客户端使用不同的证书连接到我的 TLS tcp 端点。我正在尝试使用 RequireAndVerifyClientCert:

certPool := x509.NewCertPool()
    clientCACert, err := ioutil.ReadFile("client-ca.crt")
    if err != nil {
        log.Fatal(err)
    }
    certPool.AppendCertsFromPEM(clientCACert)

    // Create a base TLS config
    baseTLSConfig := &tls.Config{
        ClientCAs:    certPool,
        ClientAuth:   tls.RequireAndVerifyClientCert,
    }

因此,在我告诉它要使用哪个服务器证书和密钥之前,我可以访问 ConnectionState().PeerCertificates[0] 并首先读取 clientCert.Subject.CommonName 。即每个 CommonName 证书需要不同的服务器端证书和密钥。它不仅仅是用于所有连接的一个服务器证书和密钥。

listener, err := tls.Listen("tcp", ":8080", baseTLSConfig)

    for {
        conn, _ := listener.Accept()
        clientCert := conn.(*tls.Conn).ConnectionState().PeerCertificates[0]
        switch clientCert.Subject.CommonName {

但是这个转换失败: (*tls.Conn) 并且我无法调用 ConnectionState 或者我进行另一个 tcp.Server 调用,但 len(PeerCertificates) 为零。我尝试过:

GetConfigForClient: func(hello *tls.ClientHelloInfo) (*tls.Config, 错误) {

将其传递给 tls.RequireAndVerifyClientCert 或除此之外,但 *tls.ClientHelloInfo 没有我需要的信息。


正确答案


无法根据客户端证书来决定使用哪个服务器证书。

在 TLS 握手中,服务器首先发送其服务器证书,然后请求客户端证书,只有在此之后客户端才会将其客户端证书发送到服务器。

以上就是如何从 golang tcp 握手中获取 clientCert.Subject.CommonName?的详细内容,更多请关注编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: 如何从 golang tcp 握手中获取 clientCert.Subject.CommonName?

本文链接: https://lsjlt.com/news/561359.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何从 golang tcp 握手中获取 clientCert.Subject.CommonName?
    问题内容 我有很多客户端使用不同的证书连接到我的 TLS tcp 端点。我正在尝试使用 RequireAndVerifyClientCert: certPool := x509.New...
    99+
    2024-02-06
  • 如何解析TCP的三次握手与四次挥手
    这篇文章将为大家详细讲解有关如何解析TCP的三次握手与四次挥手,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。TCP的传输如图:TCP三次握手的过程如下:建立TCP连接,就是指建立一个TCP连...
    99+
    2023-06-28
  • php中如何从URL中获取参数
    从 php 中的 url 中获取参数可使用 $_get 超全局变量:确定请求方法为 get。使用 $_get 数组访问参数:键为参数名,值是参数值。 如何从 PHP 中的 URL 中获...
    99+
    2024-04-29
  • 如何从Error Code获取Message
    如何从Error Code获取Message1. Windows下根据错误代码号打印错误消息命令Net helpmsg“displays information about Windows network ...
    99+
    2024-04-02
  • python如何从字典中获取元素
    这篇文章主要介绍python如何从字典中获取元素,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!从字典中获取元素不要用下列的方式data = {'user': 1,&nbs...
    99+
    2023-06-17
  • SpringBoot 如何从容器中获取对象
    目录如何从容器中获取对象SpringBoot中的容器容器功能1、组件添加2、原生配置文件引入(xml文件引入)3、配置绑定如何从容器中获取对象 有时候在项目中,我们会自己创建一些类,...
    99+
    2024-04-02
  • 如何从 go 中的 os.exec 获取输出
    在使用Go语言中的os.exec包时,获取命令执行的输出是一个常见的需求。但是,由于os.exec包的设计特点,直接获取输出并不是一件简单的事情。那么,如何从Go语言中的os.exec...
    99+
    2024-02-08
    go语言
  • 如何在golang中间件中获取Response statusCode?
    今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《如何在golang中间件中获取Response statusCode?》,主要内容是讲解等等,感兴趣的朋友可以收藏...
    99+
    2024-04-05
  • Django 如何从request中获取前端数据
    Django ###request 如果说 urls.py 是 Django 中前端页面和后台程序桥梁,那么 request 就是桥上负责运输的小汽车 可以说后端接收到的来至前端的信...
    99+
    2024-04-02
  • js如何从数组中获取随机值
    小编给大家分享一下js如何从数组中获取随机值,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!从数组中获取随机值有时我们需要从数组中随机选择一个值。一种方便的方法是可...
    99+
    2023-06-27
  • JavaScript如何从字符串中获取字符
    这篇文章主要为大家展示了“JavaScript如何从字符串中获取字符”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript如何从字符串中获取字符”这篇文章吧。 从字符串中获...
    99+
    2023-06-27
  • 如何从gin中的前端获取数据?
    小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《如何从gin中的前端获取数据?》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!问题内容...
    99+
    2024-04-05
  • PHP如何从Redis缓存中获取数据
    要从Redis缓存中获取数据,可以使用PHP的Redis扩展提供的方法。下面是一个简单的示例代码: <php // 连接到Re...
    99+
    2024-05-06
    PHP Redis
  • 如何在 Golang 中获取函数的类型?
    在 golang 中,我们可以使用 reflect.typeof() 函数获取函数类型:获取函数类型:fntype := reflect.typeof(add)打印函数类型:fmt.pr...
    99+
    2024-04-20
    golang 函数类型
  • golang如何获取注释内容
    这篇文章主要介绍“golang如何获取注释内容”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“golang如何获取注释内容”文章能帮助大家解决问题。在golang中,可以使用godoc工具来提取注释内...
    99+
    2023-07-05
  • golang如何获取进程端口
    在 Golang 中获取进程端口,可以通过使用 net 包来实现。可以使用 net.Listen() 函数监听指定的端口,然后通过获...
    99+
    2023-08-23
    golang
  • @RequestMapping 如何使用@PathVariable 从URI中获取参数
    目录@RequestMapping 使用@PathVariable 从URI中获取参数URI中的请求参数定义URL变量规则获取URI变量定义多个URL变量匹配正则表达式SpringM...
    99+
    2024-04-02
  • js如何从数组中获取惟一的值
    这篇文章主要为大家展示了“js如何从数组中获取惟一的值”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“js如何从数组中获取惟一的值”这篇文章吧。从数组中获取惟一的值要从数组中获得唯一的值,需要使用...
    99+
    2023-06-27
  • 如何从js获取zk元素id
    您可以使用JavaScript的`getElementById()`方法来获取ZK元素的id。此方法接受一个id参数,并返回具有该i...
    99+
    2023-09-27
    js
  • golang函数如何获取返回值?
    go 语言函数通过返回值传递数据。要返回单个值,只需在函数签名中指定返回值类型,并在调用函数时使用变量接收返回值。要返回多个值,则需要在函数签名中使用元组类型,并在调用函数时使用多个变量...
    99+
    2024-04-22
    返回值 golang
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作