使用自签名证书排除 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 }
通过设置IsCA:true,自签名证书可以正常充当证书颁发机构,使客户端能够验证其真实性。
以上是为什么我的自签名证书 TLS 连接失败以及如何修复?的详细内容。更多信息请关注PHP中文网其他相关文章!