TLS相互身份验证:证书链为空(C客户端-> Java服务器),除非cafile指向与证书相同的文件

时间:2019-03-14 04:47:54

标签: ssl openssl mutual-authentication

如果我仅使用证书(带有链)​​和私钥发出openssl调用,服务器就会拒绝握手中的客户端证书。

如果我还设置cafile参数并将其指向与证书相同的文件,则此问题将消失。

即使信息已经在cert输入中,如果没有cafile输入,openssl似乎也无法构建链。我想知道你们是否有经验。我觉得有点奇怪。

总而言之,这可行:

sudo openssl s_client -connect <ip>:<port> -cert cert_with_chain.pem -key privkey.pem -CAfile cert_with_chain.pem

这不起作用(服务器拒绝了“空证书链”):

sudo openssl s_client -connect <ip>:<port> -cert cert_with_chain.pem -key privkey.pem

打开SSL版本:

OpenSSL 1.0.2k-fips  26 Jan 2017

1 个答案:

答案 0 :(得分:2)

问题不是“ openssl 不能在没有cafile的情况下构建链” ,但这并不是一开始的初衷。预期的行为在man s_client中有详细记录:

  

-cert证书名
(如果服务器请求使用)证书

     

-CAfile文件
包含受信任证书的文件,该证书将在服务器身份验证期间使用,并在尝试构建客户端时使用   证书链