gpt4 book ai didi

c - SSL_get_peer_certificate(ssl) 返回 NULL?

转载 作者:太空宇宙 更新时间:2023-11-04 03:26:07 25 4
gpt4 key购买 nike

我是初学者。我在使用 SSL 时遇到问题。我在互联网上找到一个代码 c。在服务器代码中,具有以下功能:

void ShowCerts(SSL* ssl)
{ X509 *cert;
char *line;

cert = SSL_get_peer_certificate(ssl); /* Get certificates (if available) */
if ( cert != NULL )
{
printf("Server certificates:\n");
line = X509_NAME_oneline(X509_get_subject_name(cert), 0, 0);
printf("Subject: %s\n", line);
free(line);
line = X509_NAME_oneline(X509_get_issuer_name(cert), 0, 0);
printf("Issuer: %s\n", line);
free(line);
X509_free(cert);
}
else
printf("No certificates.\n");
}

当我使用命令时:openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mycert.pem -out mycert.pem 并运行 ./sslserver.o 443 然后我运行 ./client localhost 443。服务器错误:“没有证书。”。我认为 SSL_get_peer_certificate(ssl) 返回 null 的原因,但我不知道如何修复它。你能帮我吗?完整代码:http://simplestcodings.blogspot.com/2010/08/secure-server-client-using-openssl-in-c.html

最佳答案

SSL_get_peer_certificates 仅在客户端已发送证书时在服务器端返回证书。但是您引用的代码不请求客户端证书,这意味着客户端不会发送一个。要请求客户端证书,服务器需要使用 SSL_CTX_set_verify并将模式设置为至少 SSL_VERIFY_PEER,即您至少需要执行以下操作:

SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, NULL);

但这只会请求一个可选的客户端证书。它不会导致对其进行验证。请注意,您使用的代码示例在这方面无论如何都被破坏了,因为它不进行任何类型的证书验证。这意味着它对中间人攻击是开放的,即不提供您在使用 SSL 时期望的安全性。因此,我建议不要将此代码用作有关如何编写安全 SSL 客户端和服务器的示例。

关于c - SSL_get_peer_certificate(ssl) 返回 NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41040900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com