web-dev-qa-db-ja.com

SSLルーチン:SSL23_WRITE:sslハンドシェイクの失敗

OpenSSLを使用してSSLサーバーに接続しようとしています。

私が走ると:

openssl s_client -connect myhost.com:443

次のSSLクライアント構成は問題なく機能します。

  • Windows(OpenSSL 0.9.83e 23 Feb 2007
  • Linux(OpenSSL 0.9.8o 01 Jun 2010
  • Linux(OpenSSL 1.0.0-fips 29 Mar 2010

成功した接続からの出力は次のようになります。

New, TLSv1/SSLv3, Cipher is DES-CBC3-SHA
Server public key is 2048 bit
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : DES-CBC3-SHA
    Session-ID: (hidden)
    Session-ID-ctx:
    Master-Key: (hidden)
    Key-Arg   : None
    Krb5 Principal: None
    PSK identity: None
    PSK identity hint: None
    Start Time: 1337266099
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)

しかし、Ubuntu 12.04(OpenSSL 1.0.1 14 Mar 2012付き)でクライアントを使用すると、エラーが発生します。

CONNECTED(00000003)
...:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:177:

これを解決するにはどうすればよいですか?

すべてのヒントは大歓迎です!

32
Jaakko

これはUbuntuの1.0.1 OpenSSLの既知の問題のようです: https://bugs.launchpad.net/ubuntu/+source/openssl/+bug/965371

修正が利用できるようではありません。可能であれば、1.0.0にダウングレードできます。

openssl s_client -tls1 -connect myhost.com:443をお試しください

29
brent

このエラーは、暗号を再ネゴシエーションできない古いバージョンのopensslが原因である可能性があります(楕円曲線を使用して自己署名証明書を生成しました)。

具体的には、MacOSでデフォルトのopenssl-0.9.8zhで同じエラーが発生しました

醸造バージョンのOpenSSL 1.0.2fをインストールした後、エラーは消えました:

~/bin/openssl s_client -connect localhost:45678 | grep Cipher

verify return:1
New, TLSv1/SSLv3, Cipher is ECDHE-ECDSA-AES256-GCM-SHA384
    Cipher    : ECDHE-ECDSA-AES256-GCM-SHA384
4
Andrei Sura

Java HTTPSサーバーがOpenJDKで実行されているときにこの問題が発生する場合は、/etc/Java-7-openjdk/security/Java.securityを編集して、行をコメント化してみてください。

security.provider.10=Sun.security.pkcs11.SunPKCS11 ${Java.home}/lib/security/nss.cfg

Christoph W によって発見されました。

2
Aldaviva