openssl s_client连接自签名证书服务验证中间返回1最终为0问题
verify return:1的含义说明
你观测到的两次verify return:1属于证书验证过程中的正常成功提示,不是错误,和你客户端应用无法连接的问题无关,具体逻辑如下:
- OpenSSL执行证书链验证时,会从信任锚层级(深度值更大的层级,你输出中
depth=1对应的是自签名根CA证书,depth=0对应的是服务端下发的叶子证书)逐层向下校验 - 单层级证书的签名、有效期、用途等校验项全部通过时,OpenSSL会输出
verify return:1标识当前层级验证成功 - 最终输出的
Verify return code: 0 (ok)是整个证书链验证完成后的全局结果,证明你通过openssl命令执行的TLS握手完全正常,证书信任链不存在问题
客户端应用无法连接的排查建议
既然命令行工具可以正常完成握手,问题大概率出在客户端应用的配置逻辑上,可优先排查以下项:
- 客户端应用是否正确配置了根CA证书
ca.crt的路径,是否有该文件的读取权限 - 客户端应用是否正确加载了客户端证书
client.crt和对应私钥client.key,如果私钥设置了加密口令,确认应用是否配置了对应的口令参数 - 检查客户端应用是否开启了服务端证书域名校验:你当前服务端证书的CN为
Stack Service,如果客户端访问地址为127.0.0.1,会因为域名不匹配触发校验失败,需要给服务端证书补充IP类型的SAN(使用者备用名称)字段,值设置为127.0.0.1 - 确认客户端应用是否支持TLSv1.3版本,你当前服务端使用TLSv1.3协议建立连接,部分旧版本客户端默认未开启TLSv1.3支持
内容的提问来源于stack exchange,提问作者Gaurav Garg
相关产品推荐
相关产品推荐

