Golang HTTP x509:有关证书颁发机构未知的错误
最近,个人在尝试访问后端系统时遇到了挑战在 Windows XP 上使用 Golang 1.9.2。尽管在 Windows 和 Linux 等更现代的操作系统上运行完美,但在 Windows XP 上运行代码的用户遇到了以下错误:“x509:由未知颁发机构签名的证书。”
使用 Firefox ESR 和基于浏览器的测试Chromium 浏览器显示,从同一 Windows XP 环境访问同一 URL 时,这些浏览器不会引发任何与证书相关的问题。值得注意的是,受影响的 SSL 证书仍然有效,并且由受信任的证书颁发机构签名。
有些人尝试通过使用 InsecureSkipVerify 参数覆盖 TLS 验证来解决此问题:
import ("net/http"; "crypto/tls") tr := &http.Transport{ TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, } client := &http.Client{Transport: tr} resp, err := client.Get("https://someurl:443/")
但是,这种方法已被证明是无效的。需要注意的是,应谨慎对待覆盖 TLS 验证,因为它会使应用程序面临中间人攻击等潜在威胁。
如果您遇到同样的问题,请确保您已正确设置 InsecureSkipVerify 参数。您可能无意中将其设置为“InsecureSkyVerify”。以下是正确的代码片段:
// NewAPIClient - creates a new API client func NewAPIClient() Client { c := &APIClient{} tr := &http.Transport{ TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, } c.client = &http.Client{Transport: tr} return c }
请记住,重写 TLS 验证只能出于测试目的或与严格的自定义验证措施结合使用。
以上是为什么 Windows XP 上的 Golang 1.9.2 会报告“x509:由未知颁发机构签名的证书”,而浏览器却不会?的详细内容。更多信息请关注PHP中文网其他相关文章!