我试图连接到我用 CPP 编写的自定义编写的 ssl 服务器。它具有客户端身份验证功能。通过 Wireshark 观看时会抛出错误 Bad certificate。在服务器端返回的错误是
14560:error:140890B2:SSL routines:SSL3_GET_CLIENT_CERTIFICATE:no certificate returned:s3_srvr.c:2619:
我使用以下代码强制请求客户端证书
SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, NULL);
SSL_CTX_set_verify_depth(ctx, 1);
我可以在 Wireshark 中看到客户端返回证书。
应该使用哪个函数来设置用于在服务器端验证客户端证书的公钥?
最佳答案
从错误消息来看,您的客户端似乎没有向服务器出示证书,而您明确要求客户端需要出示证书(在服务器代码中):
SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, NULL);
您可能需要的是告诉您的客户端代码使用证书(连同私钥):
SSL_CTX_use_certificate_chain_file(ctx, pcszCertPath);
SSL_CTX_use_PrivateKey_file(ctx, pcszPrivKeyPath,SSL_FILETYPE_PEM);
希望对您有所帮助。 还要确保您的服务器使用相同的证书链(它信任相同的 CA)。如果这是一个问题,请告诉我,我会帮助您解决问题。
关于SSL 客户端身份验证返回 Bad Certificate 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12650970/