使用自簽名憑證排除 TLS 連線問題
問題: 使用自簽章伺服器建立 TLS連線憑證失敗並顯示錯誤,指示未知憑證
相關程式碼:
客戶端:
CA_Pool := x509.NewCertPool() severCert, err := ioutil.ReadFile("./cert.pem") CA_Pool.AppendCertsFromPEM(severCert) config := tls.Config{RootCAs: CA_Pool}
伺服器:
cert, err := tls.LoadX509KeyPair("./cert.pem", "./key.pem") config := tls.Config{Certificates: []tls.Certificate{cert}}
錯誤訊息:
client: dial: x509: certificate signed by unknown authority (possibly because of "x509: invalid signature: parent certificate cannot sign this kind of certificate" while trying to verify candidate authority certificate "serial:0")
根本原因:產生的自簽名憑證沒有設定IsCA 標誌,表示它不是中間憑證或根證書。因此,用戶端的 CA 池無法將自簽章憑證驗證為有效的核發機關。
解決方案:要修正此問題,請確保 IsCA 標誌為使用 x509.CreateCertificate 產生自簽章憑證時設定。正確的憑證產生程式碼如下:
certTemplate := &x509.Certificate{ IsCA: true, KeyUsage: x509.KeyUsageCertSign, // ... other certificate parameters }
以上是為什麼我的自簽名憑證 TLS 連線失敗以及如何修復?的詳細內容。更多資訊請關注PHP中文網其他相關文章!