Golang Go语言中关于 ssl 校验的疑难杂症

发布于 1周前 作者 phonegap100 来自 Go语言

Golang Go语言中关于 ssl 校验的疑难杂症

问题一: 一个 url,在谷歌浏览器里显示 ssl 证书是没问题的。

在 goland 里通过 client.Do(request),访问没问题。

但是在 linux 里运行提示自签名证书(x509: certificate signed by unknown authority)

为啥会这样呢? chrome 和 windows 的 goland 里都没提示证书有问题。为什么到 Linux 就提示自签名证书了呢

问题二: 于是我在代码里加了 ssl 不需要校验(TLSClientConfig: &tls.Config{InsecureSkipVerify: true}),另外一个没问题的 Url,原来是正常的,现在变得超级慢,我 print 一下,发现慢的地方就是卡在了 client := &http.Client{Transport: tr},这部分 为什么会这样呢?


更多关于Golang Go语言中关于 ssl 校验的疑难杂症的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

4 回复

建议在 linux 用 curl 看看会不会有证书问题, 如果有的话,多半是因为 web 服务器的证书没配置证书链

更多关于Golang Go语言中关于 ssl 校验的疑难杂症的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


没装 ca-certificates 吧

自签名提示都是 self signed。是能找到 CA 证书的(就是自己)。
你这个是 unknown authority,未知的 CA。如 #2 所述,你没有正确安装 ca-certificates。

关于Golang中SSL校验的疑难杂症,以下是一些可能的解决方案和注意事项:

  1. TLS握手超时

    • 可能是证书链丢失或无效。
    • 解决方法:增加超时时间,并检查服务器证书是否完整有效。
  2. 证书验证失败

    • 若使用的是自签名证书或测试证书,可能会导致验证失败。
    • 解决方法:在生产环境中,应使用由可信CA签发的证书。在测试环境中,可以通过设置InsecureSkipVerify: true来跳过证书验证(但需注意安全风险)。
  3. 编程实现

    • 在HTTP客户端配置中,可以通过设置http.TransportTLSClientConfig来指定SSL验证的相关参数。
    • 示例代码:
      tr := &http.Transport{
          TLSClientConfig: &tls.Config{
              InsecureSkipVerify: true, // 注意:生产环境中不应设置为true
          },
      }
      client := &http.Client{Transport: tr}
      
  4. 调试与定位

    • 使用工具如Burp Suite进行SSL/TLS流量分析时,可能需要将工具证书导入到Golang的证书存储中(尽管Golang不依赖系统证书存储)。
    • 检查是否有防火墙或代理服务器干扰SSL握手过程。
  5. 注意事项

    • 禁用SSL验证(InsecureSkipVerify: true)会降低安全性,应仅在测试环境中使用。
    • 在生产环境中,应确保所有证书均有效且由可信CA签发。

希望以上信息能帮助您解决Golang中SSL校验的相关问题。

回到顶部