TLS 相互验证:空证书链(C 客户端 -> Java 服务器)除非 cafile 指向与证书相同的文件
TLS Mutual Auth: null cert chain (C client -> Java server) unless cafile points to same file as cert
如果我仅使用证书(带链)和私钥发出 openssl 调用,我会遇到服务器拒绝握手中的客户端证书的问题。
如果我还设置了 cafile 参数并将其指向与证书相同的文件,这个问题就会消失。
即使信息已经在证书输入中,openssl 似乎也无法在没有 cafile 输入的情况下构建链。我想知道你们是否有这方面的经验。我只是觉得有点奇怪。
总而言之,这有效:
sudo openssl s_client -connect <ip>:<port> -cert cert_with_chain.pem -key privkey.pem -CAfile cert_with_chain.pem
这不起作用(服务器拒绝 "null cert chain"):
sudo openssl s_client -connect <ip>:<port> -cert cert_with_chain.pem -key privkey.pem
打开 SSL 版本:
OpenSSL 1.0.2k-fips 26 Jan 2017
问题不在于 "openssl cannot construct the chain without the cafile",而是一开始就没有这样做的意图。 man s_client:
中详细记录了预期的行为
-cert certname
The certificate to use, if one is requested by the server.
-CAfile file
A file containing trusted certificates to use during server authentication and to use when attempting to build the client
certificate chain.
如果我仅使用证书(带链)和私钥发出 openssl 调用,我会遇到服务器拒绝握手中的客户端证书的问题。
如果我还设置了 cafile 参数并将其指向与证书相同的文件,这个问题就会消失。
即使信息已经在证书输入中,openssl 似乎也无法在没有 cafile 输入的情况下构建链。我想知道你们是否有这方面的经验。我只是觉得有点奇怪。
总而言之,这有效:
sudo openssl s_client -connect <ip>:<port> -cert cert_with_chain.pem -key privkey.pem -CAfile cert_with_chain.pem
这不起作用(服务器拒绝 "null cert chain"):
sudo openssl s_client -connect <ip>:<port> -cert cert_with_chain.pem -key privkey.pem
打开 SSL 版本:
OpenSSL 1.0.2k-fips 26 Jan 2017
问题不在于 "openssl cannot construct the chain without the cafile",而是一开始就没有这样做的意图。 man s_client:
中详细记录了预期的行为-cert certname
The certificate to use, if one is requested by the server.-CAfile file
A file containing trusted certificates to use during server authentication and to use when attempting to build the client certificate chain.