2016-10-27 10 views
1

私はクライアントとサーバーでopensslを使ってテストを行っています。私のテストでは、サーバはパラメータ()に基づいて1つのペア(証明書、キー)またはその他を使用します。"ssl3_get_client_hello:サーバーの証明書と鍵に応じてサーバー内の共有暗号がありません"

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をを使用する場合、私はtestcert2を使用すると、すべてがうまく動作し、サーバが暗号TLS_RSA_WITH_AES_128_GCM_SHA256

を選択し、私はエラーを取得:サーバーに「ssl3_get_client_helloノー共有暗号を」。証明書とキーに依存して、サーバーで選択された暗号は

  1. ですか?
  2. このエラーは、キーに関連しないものが原因である可能性がありますか?
  3. 特定のキーでサポートされている暗号を確認するにはどうすればよいですか?

お返事ありがとうございます。

答えて

2

暗号の選択は、証明書に部分的に依存、RSA認証でつまり暗号はRSA証明書を必要とする、ECDSA認証と暗号ECDSA証明書など

しかし、別の可能性は、鍵と証明書は、あなたがロードしていることです互いに一致しない。この場合、証明書は使用できず、匿名認証を使用した暗号しか使用できません。あなたのコードが証明書を読み込んでいる間、鍵が証明書に合っているかどうかはチェックされません。SSL_CTX_check_private_keyを使ってください。

+0

ありがとうございました! SSL_CTX_check_private_keyの問題を検出できました。 – rodolk

関連する問題