1

別のサーバーに接続する必要がある apache-commons-httpclient 2.0 を使用するクライアント アプリケーションがあります。私が使用する暗号化プロトコルとして:

protocols = new String[]{"SSLv3", "SSLv2Hello", "TLSv1"};
((SSLSocket) socket).setEnabledProtocols(protocols);

通常は問題なく動作しますが、一部のサーバーでは次のことが起こります。

main, handling exception: java.net.SocketException: Software caused connection abort: recv failed
main, SEND SSLv3 ALERT:  fatal, description = unexpected_message
Padded plaintext before ENCRYPTION:  len = 22
0000: 02 0A 7B FA 57 7E 6E B7   56 4C 8A 2F 7F 1F BC 9F  ....W.n.VL./....
0010: A6 80 57 12 0B EE                                  ..W...
main, WRITE: SSLv3 Alert, length = 22
main, Exception sending alert: java.net.SocketException: Software caused connection abort: socket write error

プロトコル リストから TLSv1 を削除すると、このサーバーで正常に動作し、予期される 200 ステータスが返されます。サーバーがサポートするプロトコル (SSL または TLS) とプロトコル バージョンを事前に定義する方法を教えてください。

または、この問題を解決する他の方法がありますか?

4

1 に答える 1

0

さて、有効なサーバー プロトコルを取得する方法を見つけました。

Socket socket = sSLSocketFactory.createSocket(host, port);
((SSLSocket) socket).getEnabledProtocols();

しかし、それは役に立ちません。

SSLv2Hello
SSLv3
TLSv1

これは、サーバーが TLSv1 をサポートする必要があることを意味します。したがって、問題は別の場所にあります。

于 2013-09-30T07:19:03.953 に答える