我正在开发一个需要双向TLS认证的微服务,服务端用Golang的crypto/tls包配置了CA证书、服务端证书和私钥,客户端也提供了对应的证书。但客户端连接时总是报错:remote error: tls: bad certificate。
已确认证书未过期,且客户端证书由服务端信任的CA签发。以下是关键代码片段和服务端配置:
服务端配置:
cert, _ := tls.LoadX509KeyPair("server.crt", "server.key")
caCert, _ := ioutil.ReadFile("ca.crt")
caPool := x509.NewCertPool()
caPool.AppendCertsFromPEM(caCert)
config := &tls.Config{
Certificates: []tls.Certificate{cert},
ClientCAs: caPool,
ClientAuth: tls.RequireAndVerifyClientCert,
}
客户端连接时同样加载了证书和私钥。尝试过用OpenSSL验证证书链(openssl verify -CAfile ca.crt client.crt)是正常的。可能是什么原因导致服务端拒绝客户端证书?是否需要检查证书的扩展用途(Extended Key Usage)或主题备用名称(SAN)?有没有系统性的调试步骤?
邀请回答
换一换
暂无数据