为了账号安全,请及时绑定邮箱和手机立即绑定

进行 TLS 连接

进行 TLS 连接

Go
慕哥9229398 2021-12-07 15:59:31
我通过 openssl 连接到某个服务器:openssl s_client -crlf -connect somehost.com:700 -cert key.pem它有效。连接成功。但是当我尝试从 Go 代码(文档中的示例)中做同样的事情时,它对我不起作用:import (    "crypto/tls"    "crypto/x509")func main() {    // Connecting with a custom root-certificate set.    const rootPEM = `-----BEGIN CERTIFICATE-----my key text-----END CERTIFICATE-----`// First, create the set of root certificates. For this example we only// have one. It's also possible to omit this in order to use the// default root set of the current operating system.roots := x509.NewCertPool()ok := roots.AppendCertsFromPEM([]byte(rootPEM))if !ok {    panic("failed to parse root certificate")}conn, err := tls.Dial("tcp", "somehost.com:700", &tls.Config{    RootCAs: roots,})if err != nil {    panic("failed to connect: " + err.Error())}conn.Close()}我的文字错误是:panic: failed to connect: x509: certificate is valid for otherhost.com, not somehost.com [recovered]问题:我做错了什么?也许我没有添加一些 tls.Config 参数?
查看完整描述

2 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

openssl s_client只是一个连接的测试工具,但它并不关心证书是否对连接有效。Go 反而关心证书是否可以被验证,因此您会得到证书无效的信息,因为名称不匹配。

我做错了什么?

根据错误消息,您确实通过错误的主机名访问了主机。或者您的服务器配置不当,以至于它发送了错误的证书。


查看完整回答
反对 回复 2021-12-07
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

我不需要检查服务器的 ssl 证书。它是某个域注册表的演示服务器。所以我需要服务器来检查我的证书。


  const certPEM = `-----BEGIN CERTIFICATE-----

  -----END CERTIFICATE-----

  `

  const certKey = `-----BEGIN RSA PRIVATE KEY-----

  -----END RSA PRIVATE KEY-----`


  cert, err := tls.X509KeyPair([]byte(certPEM), []byte(certKey))

  if err != nil {

      t.Error("server: loadkeys: %s", err)

  }


  cfg := tls.Config{

      InsecureSkipVerify: true,

      ServerName:         "somehost.com",

      Certificates:       []tls.Certificate{cert},

  }


  conn, err := tls.Dial("tcp", "somehost.com:700", &cfg)

  if err != nil {

      t.Error("failed to connect: " + err.Error())

  }


  defer conn.Close()

  所以这段代码适用于我的情况。


查看完整回答
反对 回复 2021-12-07
  • 2 回答
  • 0 关注
  • 148 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信