如何使用不完整的 TLS 证书执行 https 请求?

Pau*_*xon 6 ssl go x509

我正在尝试针对具有不完整 TLS 证书链的 URL 发出 https 请求。以下是Qualys 测试工具的相关部分,显示证书链缺失“Symantec Class 3 Secure Server CA - G4”

SSL 报告截图

大多数浏览器都可以解决这个问题,大概是因为它们预装了赛门铁克证书?但是,一个简单的 golang 示例将失败并显示错误x509: certificate signed by unknown authority

package main

import (
"log"
"net/http"
)

func main() {

    _, err := http.Get("https://www.example.com/")
    if err != nil {
        log.Fatal(err)
    } else {
        log.Println("Success!") 
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经通知了有问题的站点,但是有没有办法可以将丢失的证书插入到 go 正在使用的证书存储中

Pau*_*xon 3

为了解决此问题,我刚刚更新了客户端上的系统证书存储以包含缺少的中间证书。

客户端在基于 Ubuntu 的服务器上运行,因此解决了问题:

#download certificate
cd /usr/local/share/ca-certificates
curl -O https://symantec.tbs-certificats.com/SymantecSSG4.crt

#dump the fingerprint
openssl x509 -noout -fingerprint -sha256 -inform pem -in SymantecSSG4.crt 
Run Code Online (Sandbox Code Playgroud)

我检查了输出与测试工具报告我丢失的指纹是否匹配:

SHA256 Fingerprint=EA:E7:2E:B4:54:BF:6C:39:77:EB:D2:89:E9:70:B2:F5:28:29:49:19:00:93:D0:D2:6F:98:D0:F0:D6:A9:CF:17
Run Code Online (Sandbox Code Playgroud)

然后我用以下内容更新了证书存储:

update-ca-certificates
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这会增加风险。中间体的要点是,如果它们受到损害,CA 可以撤销它们,但该主机将继续信任它(考虑到我们在这里讨论的是赛门铁克,这甚至不太可能)。您应该修复服务器,或者如果您自己无法修复,请让管理员知道链条已损坏。 (2认同)