6

こんにちは、クライアント側で SSLV23 メソッドを使用して複数のバージョンの TLS をサポートしたいのですが、エラーが発生して接続できません:

SSL23_GET_SERVER_HELLO:sslv3 アラート ハンドシェイクの失敗

openssl を使用して複数のバージョンの TLS をサポートする方法を教えてください。

SSLV23 のコード スニペット (動作しない)

cctx = SSL_CTX_new(SSLv23_client_method());
  if(cctx) {
  SSL_CTX_set_options(cctx, SSL_OP_NO_SSLv3);
  }

TLS V1 のみ (動作中)

cctx = SSL_CTX_new(TLSv1_client_method());
4

1 に答える 1

7

タグとコメントに基づいて、TLS接続のみが必要だと思います。クライアントは TLS 接続のみを開始する必要があります。もしそうなら、なぜあなたは主張するのSSLv23_client_methodですか?しかし、以下は私のテストで TLS 1.0 client hello を送信しました:

ctx = SSL_CTX_new(SSLv23_client_method());
SSL_CTX_set_options(ctx,SSL_OP_NO_SSLv3);

POODLE 攻撃を防ぐには、クライアントとサーバーで SSL3 サポートを完全に無効にするのが最善です。あなたの場合、サーバーはTLSのみをサポートしていると述べました。したがって、SSL3 上のクライアントとの下位互換性は必要ありません。サーバーが SSL3 と通信する場合、POODLE 攻撃を防ぐために、クライアントとサーバーは TLS フォールバック シグナリング暗号スイート値を実装する必要があります。 https://datatracker.ietf.org/doc/html /draft-ietf-tls-downgrade-scsv-05

クライアント側で TLS を設定する例:

/* Exclude SSLv2 and SSLv3 */
ctx = SSL_CTX_new(TLSv1_client_method());
SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2);
SSL_CTX_set_options(ctx,SSL_OP_NO_SSLv3);

/* Exclude SSLv2, SSLv3 and TLS 1.0 */

 ctx = SSL_CTX_new(TLSv1_1_client_method());
 SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2);
 SSL_CTX_set_options(ctx,SSL_OP_NO_SSLv3);
 SSL_CTX_set_options(ctx,SSL_OP_NO_TLSv1);

/* Exclude SSLv2, SSLv3 ,TLS 1.0 and TLS 1.1 */

   ctx = SSL_CTX_new(TLSv1_2_client_method());
   SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2);
   SSL_CTX_set_options(ctx,SSL_OP_NO_SSLv3);
   SSL_CTX_set_options(ctx,SSL_OP_NO_TLSv1);
   SSL_CTX_set_options(ctx,SSL_OP_NO_TLSv1_1);

オプションを OR してSSL_CTX_set_options、一度に渡すこともできます。

于 2015-04-21T19:22:34.077 に答える