CA不匹配时TLS连接仍成功的问题排查求助
问题根源与修复方案
核心错误点
1. wolfSSL代码关闭了证书验证
你的服务端和客户端代码都设置了WOLFSSL_VERIFY_NONE,这个参数会完全跳过对端证书的合法性验证:
- 服务端不会检查客户端证书是否由信任CA签发
- 客户端也不会验证服务端证书的有效性
所以无论CA是否匹配,TLS握手都会直接通过。
2. OpenSSL测试环境未开启客户端证书验证
你使用openssl s_server时,默认不会要求客户端提供证书,自然也不会验证客户端证书的合法性。哪怕客户端用错误CA签发的证书,服务端也会直接建立连接。
修复步骤
针对wolfSSL代码的修改
服务端代码
将验证模式改为强制要求客户端提供证书并验证其合法性:
// 替换原WOLFSSL_VERIFY_NONE的设置 wolfSSL_CTX_set_verify(pTmpWolfsslCtx, WOLFSSL_VERIFY_PEER | WOLFSSL_VERIFY_FAIL_IF_NO_PEER_CERT, NULL);
WOLFSSL_VERIFY_PEER:验证客户端证书WOLFSSL_VERIFY_FAIL_IF_NO_PEER_CERT:强制要求客户端必须提供证书,否则握手失败
客户端代码
如果需要验证服务端证书,同样修改验证模式:
// 替换原WOLFSSL_VERIFY_NONE的设置 wolfSSL_CTX_set_verify(pTmpWolfsslCtx, WOLFSSL_VERIFY_PEER, NULL);
针对OpenSSL测试环境的修改
修改服务端启动命令,添加-Verify 1参数强制验证客户端证书:
openssl s_server -cert serverCert.pem -key serverKey.pem -CAfile rootCA.pem -accept 4433 -Verify 1
此时再用错误CA签发的客户端证书连接,握手会直接失败。
额外排查方向
- 检查
rootCA.pem是否误包含了新CA的证书,导致服务端信任了错误CA - 用
openssl x509 -in WrongClientCert.pem -text -noout查看错误客户端证书的签发者,确认确实由新CA签发 - 核对
openssl.cnf中的CA配置,确保新旧CA之间没有交叉信任关系
内容的提问来源于stack exchange,提问作者theAvidPhoenix
相关产品推荐
相关产品推荐

