Go 如何修复x509:无法验证<;的证书;知识产权>;因为它没有';不包含任何IP SAN
我正在使用go http客户端连接到具有自签名证书的iot设备。我已经有了Go 如何修复x509:无法验证<;的证书;知识产权>;因为它没有';不包含任何IP SAN,go,tls1.2,x509,Go,Tls1.2,X509,我正在使用go http客户端连接到具有自签名证书的iot设备。我已经有了 TLSClientConfig: &tls.Config{ RootCAs: certPool, Certificates: []tls.Certificate{tlsClientCert}, InsecureSkipVerify: true, }, 尽管如此,尽管go仍然尝试验证证书: x509: cannot
TLSClientConfig: &tls.Config{
RootCAs: certPool,
Certificates: []tls.Certificate{tlsClientCert},
InsecureSkipVerify: true,
},
尽管如此,尽管go仍然尝试验证证书:
x509: cannot validate certificate for <ip> because it doesn't contain any IP SANs
这是openssl在运行openssl s_client-connect
时所说的:
更新我正在运行最新的go 1.15.2这可能有用
在证书中有一个名为“SANs”的字段,我们需要在这个SAN列表中添加“hostname”
添加后,应使用“ServerName”字段在TLS配置中添加相同的名称。完成此配置后,将解决此问题。在SANS属性中,我添加了“test.com”,因此我按如下方式配置了TLS
ServerName: "test.com",
RootCAs: pool,
Certificates: []tls.Certificate{clientCert},
MinVersion: tls.VersionTLS12,
自证书颁发之日起;重复使用可能不包含任何SAN,发生此错误。我还在探索中,如果你们对此有任何评论,请留下回复。这可能有用
在证书中有一个名为“SANs”的字段,我们需要在这个SAN列表中添加“hostname”
添加后,应使用“ServerName”字段在TLS配置中添加相同的名称。完成此配置后,将解决此问题。在SANS属性中,我添加了“test.com”,因此我按如下方式配置了TLS
ServerName: "test.com",
RootCAs: pool,
Certificates: []tls.Certificate{clientCert},
MinVersion: tls.VersionTLS12,
自证书颁发之日起;重复使用可能不包含任何SAN,发生此错误。我仍在探索中,如果你们对此有任何意见,请留下答复。您可以在您的请求中指定一个
主机,该主机位于证书的SAN中。我所拥有的只是来自DNS-SD的设备名称。作为应用程序的一部分,我甚至没有读到它的cert/SAN,所以我不知道该怎么做。另外:错误消息包含远程IP,因此它是本地go客户端发出的。它甚至不应该在这里验证证书?@andig:Settingunsecureskipverify
应该足够了,我怀疑问题出在其他地方。您能否发布一个演示问题的最小但完整的工作程序,以及完整的错误消息?我已经更新了示例和openssl诊断。@andig:谢谢您提供。您使用的是哪个版本的围棋?尝试的一些建议:(1)输出unsecure
的值,以确保它确实被设置为true
——发生了奇怪的事情;(2) 通常,您应该设置ServerName
或unsecureskipverify
,但不能同时设置这两者,因此,如果unsecures
为true
,请尝试不要设置ServerName
;(3) 你不应该在tls.Config
传递给tls
包函数后修改它,所以每次尝试在你的内部循环中移动它的定义来创建一个新的配置。你可以在你的请求中指定一个主机,该主机位于证书的SAN中。我所拥有的只是来自DNS-SD的设备名称。作为应用程序的一部分,我甚至没有读到它的cert/SAN,所以我不知道该怎么做。另外:错误消息包含远程IP,因此它是本地go客户端发出的。它甚至不应该在这里验证证书?@andig:Settingunsecureskipverify
应该足够了,我怀疑问题出在其他地方。您能否发布一个演示问题的最小但完整的工作程序,以及完整的错误消息?我已经更新了示例和openssl诊断。@andig:谢谢您提供。您使用的是哪个版本的围棋?尝试的一些建议:(1)输出unsecure
的值,以确保它确实被设置为true
——发生了奇怪的事情;(2) 通常,您应该设置ServerName
或unsecureskipverify
,但不能同时设置这两者,因此,如果unsecures
为true
,请尝试不要设置ServerName
;(3) 您不应该在tls.Config
传递给tls
包函数后修改它,所以每次尝试在内部循环中移动它的定义以创建新的配置。
ServerName: "test.com",
RootCAs: pool,
Certificates: []tls.Certificate{clientCert},
MinVersion: tls.VersionTLS12,