【问题标题】:"ssl3_get_client_hello:no shared cipher" in server depending on server certificate and key服务器中的“ssl3_get_client_hello:no shared cipher”取决于服务器证书和密钥
【发布时间】:2016-10-27 19:40:07
【问题描述】:

我正在使用 openssl 对客户端和服务器进行测试。在我的测试中,服务器使用一对(证书、密钥)或其他基于参数mode

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”。

  1. 服务器中选择的密码是否依赖于证书和密钥?
  2. 此错误可能是由于与密钥无关的原因造成的吗?
  3. 如何检查特定密钥可以支持的密码?

提前感谢您的任何回复。

【问题讨论】:

    标签: ssl openssl ssl-certificate


    【解决方案1】:

    密码的选择部分取决于证书,即具有 RSA 身份验证的密码需要 RSA 证书,具有 ECDSA 身份验证的密码需要 ECDSA 证书等。

    但另一种可能是您加载的密钥和证书不匹配。在这种情况下,不能使用证书,它只能使用具有匿名身份验证的密码。当您的代码加载证书时,它不会检查密钥是否适合证书:为此请使用 SSL_CTX_check_private_key

    【讨论】:

    • 谢谢!你帮我发现了 SSL_CTX_check_private_key 的问题
    猜你喜欢
    • 2019-02-09
    • 1970-01-01
    • 2019-06-15
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多