本地主机TLS服务器连接失败原因排查求助
问题描述
背景信息
我持有一个本地生成的X.509 CA证书及对应私钥,该CA证书有两个用途:一是签署客户端证书,二是作为本地运行的HTTP+TLS Web服务器的服务器证书。
客户端使用该CA签署的证书发起连接,Go客户端配置了仅包含此CA证书的根信任池;服务器同样在Go代码中将该CA证书设置为客户端信任根。
CA证书内容
-----BEGIN CERTIFICATE----- MIICEDCCAbegAwIBAgIUT2sxtpA9k1VVdb/DSVIE3oYANf8wCgYIKoZIzj0EAwIw XjEtMCsGA1UEAwwkNmI5MGNhYmMtZTZhYS01NjBhLWI1YzMtODFmZWViMTRkZTUw MS0wKwYDVQQKDCQ5MWJjMGFlOC0xMzA3LTRmMTMtODBlNC1jZWY0NjgxNjAxNDIw HhcNMjMwOTI4MDYyNjI4WhcNMzMwOTI1MDYyNjI4WjBeMS0wKwYDVQQDDCQ2Yjkw Y2FiYy1lNmFhLTU2MGEtYjVjMy04MWZlZWIxNGRlNTAxLTArBgNVBAoMJDkxYmMw YWU4LTEzMDctNGYxMy04MGU0LWNlZjQ2ODE2MDE0MjBZMBMGByqGSM49AgEGCCqG SM49AwEHA0IABBN2QUl7jzfxkhX/hOZ+uFbb+TcfqdTzgIQRZrFjaySQvQ2je8Mb MOEB1xjISXd7m4O+fOjHvdKgP+XQjOwctbejUzBRMB0GA1UdDgQWBBTKL5QNQ/tt AGYJUEyMH6O8we+Y9DAfBgNVHSMEGDAWgBTKL5QNQ/ttAGYJUEyMH6O8we+Y9DAP BgNVHRMBAf8EBTADAQH/MAoGCCqGSM49BAMCA0cAMEQCIHAT9FTUGnOeYUv8kbRO OyMIiaWoIMR7G94YLVhGvyIyAiAe2q/SvkNhA6PaUGFQXL4CDFCDW4OXCPbtJ1AU RPTZ1Q== -----END CERTIFICATE-----
服务器TLS配置
服务器基于Go 1.21编写,配置要求并验证客户端证书:
// cert 是包含CA证书的tls.Certificate // clientCertPool 是同样包含该CA证书的证书池 server := http.Server{ Handler: hdlr, Addr: addr, TLSConfig: &tls.Config{ Certificates: []tls.Certificate{cert}, ClientAuth: tls.RequireAndVerifyClientCert, ClientCAs: clientCertPool, KeyLogWriter: ssllog, }, }
客户端TLS配置
Go客户端的HTTP客户端配置如下:
func HTTPClient(clientCert tls.Certificate, roots *x509.CertPool, ssllog io.Writer) *http.Client { tlsConfig := &tls.Config{ Certificates: []tls.Certificate{clientCert}, RootCAs: roots, KeyLogWriter: ssllog, } tlsTransport := http.DefaultTransport.(*http.Transport).Clone() tlsTransport.TLSClientConfig = tlsConfig return &http.Client{ Transport: tlsTransport, } }
错误现象
Go客户端连接时
- 客户端错误:
Get "https://localhost:8443/v1/description": remote error: tls: internal error - 服务器错误:
http: TLS handshake error from 127.0.0.1:55740: invalid argument
curl连接时
- curl错误:
curl: (35) LibreSSL/3.3.6: error:1404B438:SSL routines:ST_CONNECT:tlsv1 alert internal error - 服务器错误:
http: TLS handshake error from 127.0.0.1:55792: invalid argument
两次连接的服务器错误一致。令人困惑的是,该配置一个月前可正常工作,仅CA证书可能有细微变动,其余配置均未修改。如需更多代码或Wireshark抓包数据可提供,CA服务器和TLS Web服务器的开源代码已公开。
内容的提问来源于stack exchange,提问作者Ananth
相关产品推荐
相关产品推荐

