我正在使用openssl运行客户端和服务器测试。在我的测试中,服务器使用一对(证书,密钥)或其他基于模式的参数。
void configure_context(SSL_CTX *ctx, int mode)
{
if (mode == 0) {
/* Set the key and cert */
if (SSL_CTX_use_certificate_file(ctx, "./test/certs/testcert2.pem", SSL_FILETYPE_PEM) < 0) {
ERR_print_errors_fp(stderr);
exit(EXIT_FAILURE);
}
if (SSL_CTX_use_PrivateKey_file(ctx, "test2.key", SSL_FILETYPE_PEM) < 0 ) {
ERR_print_errors_fp(stderr);
exit(EXIT_FAILURE);
}
} else {
if (SSL_CTX_use_certificate_file(ctx, "cert.pem", SSL_FILETYPE_PEM) < 0) {
ERR_print_errors_fp(stderr);
exit(EXIT_FAILURE);
}
if (SSL_CTX_use_PrivateKey_file(ctx, "key.pem", SSL_FILETYPE_PEM) < 0 ) {
ERR_print_errors_fp(stderr);
exit(EXIT_FAILURE);
}
}
}
cert.pem是一个自签名证书,而testcert2是用CA(我的)密钥签名的。
当我使用cert.pem时,一切正常,服务器选择密码 TLS_RSA_WITH_AES_128_GCM_SHA256
当我使用testcert2时,我在服务器中收到错误“ssl3_get_client_hello:no shared cipher”。
提前感谢您的回复。
答案 0 :(得分:2)
密码的选择部分取决于证书,即具有RSA认证的密码需要RSA证书,具有ECDSA认证的密码需要ECDSA证书等。
但另一种可能性是您加载的密钥和证书彼此不匹配。在这种情况下,不能使用证书,它只能使用具有匿名身份验证的密码。当您的代码加载证书时,它不会检查密钥是否符合证书:请使用SSL_CTX_check_private_key。