Golang Go语言中关于 ssl 校验的疑难杂症
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
建议在 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校验的疑难杂症,以下是一些可能的解决方案和注意事项:
-
TLS握手超时:
- 可能是证书链丢失或无效。
- 解决方法:增加超时时间,并检查服务器证书是否完整有效。
-
证书验证失败:
- 若使用的是自签名证书或测试证书,可能会导致验证失败。
- 解决方法:在生产环境中,应使用由可信CA签发的证书。在测试环境中,可以通过设置
InsecureSkipVerify: true
来跳过证书验证(但需注意安全风险)。
-
编程实现:
- 在HTTP客户端配置中,可以通过设置
http.Transport
的TLSClientConfig
来指定SSL验证的相关参数。 - 示例代码:
tr := &http.Transport{ TLSClientConfig: &tls.Config{ InsecureSkipVerify: true, // 注意:生产环境中不应设置为true }, } client := &http.Client{Transport: tr}
- 在HTTP客户端配置中,可以通过设置
-
调试与定位:
- 使用工具如Burp Suite进行SSL/TLS流量分析时,可能需要将工具证书导入到Golang的证书存储中(尽管Golang不依赖系统证书存储)。
- 检查是否有防火墙或代理服务器干扰SSL握手过程。
-
注意事项:
- 禁用SSL验证(
InsecureSkipVerify: true
)会降低安全性,应仅在测试环境中使用。 - 在生产环境中,应确保所有证书均有效且由可信CA签发。
- 禁用SSL验证(
希望以上信息能帮助您解决Golang中SSL校验的相关问题。