我是安全新手,因此可能会错误地使用某些术语:
SSL_connect
创建套接字连接时,服务器应该发送回整个证书链,以便验证服务器的真实性。我想查看服务器返回的证书,以验证我是否收回了整个证书链。这是我尝试过的:
SSLv3_method
。SSL_CTX_set_verify
使用SSL_VERIFY_NONE
设置。SSL_connect
之后我使用SSL_get_peer_cert_chain
来访问证书链。 考虑:
STACK_OF(X509)* certificateChain = SSL_get_peer_cert_chain(ssl);
while (char* stackCertificate = sk_pop(certificateChain))
{
X509* certificate = (X509*)stackCertificate;
}
这是获取证书链的正确方法吗?我对情况的理解是否正确?有没有更好的方法来做到这一点?
感谢您的时间和贡献。
答案 0 :(得分:2)
以下代码段基于s_client
中的代码:
SSL* ssl = ...;
STACK_OF(X509)* certCollection = SSL_get_peer_cert_chain(ssl);
for (size_t i = 0; i < sk_X509_num(certCollection); i++)
{
X509* cert = sk_X509_value(certCollection, i);
...
}
据我所知,必须创建SSL会话,否则SSL_get_peer_cert_chain
将返回null。此外,我还没有发现任何证据与我在问题中提到的列表相矛盾。
也许更简单的替代方法是使用命令行工具(从here下载):
openssl s_client -connect {server}:{port} -ssl3