我是初学者。我在使用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
发布于 2016-12-08 14:42:41
只有当客户端发送证书时,SSL_get_peer_certificates才返回服务器端的证书。但是,您所引用的代码并不请求客户端证书,这意味着客户端不会发送证书。要请求客户端证书,服务器将需要使用验证并将模式设置为至少SSL_VERIFY_PEER,即至少需要这样做:
SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, NULL);但这将只请求一个可选的客户端证书。它不会导致对它的验证。请注意,您使用的代码示例在这方面仍然失败,因为它不执行任何类型的证书验证。这意味着它对中间攻击中的琐碎人员是开放的,也就是说,在使用SSL时不提供您期望的安全性。因此,我建议不要将此代码用作如何编写安全SSL客户端和服务器的示例。
https://stackoverflow.com/questions/41040900
复制相似问题