Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何(在Java中)定义服务器使用的加密协议(SSL或TLS)?_Java_Ssl_Apache Commons Httpclient - Fatal编程技术网

如何(在Java中)定义服务器使用的加密协议(SSL或TLS)?

如何(在Java中)定义服务器使用的加密协议(SSL或TLS)?,java,ssl,apache-commons-httpclient,Java,Ssl,Apache Commons Httpclient,我有一个客户端应用程序,它使用apache commons httpclient 2.0,我需要连接到不同的服务器。 作为加密协议,我使用: protocols = new String[]{"SSLv3", "SSLv2Hello", "TLSv1"}; ((SSLSocket) socket).setEnabledProtocols(protocols); 一般来说,它工作正常,但对于某些服务器,会发生以下情况: main, handling exception: java.net.Soc

我有一个客户端应用程序,它使用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以及协议版本


或者可能有其他方法来解决此问题?

好的,我已经了解了如何启用服务器协议:

Socket socket = sSLSocketFactory.createSocket(host, port);
((SSLSocket) socket).getEnabledProtocols();
但这没用,因为它给了我:

SSLv2Hello
SSLv3
TLSv1

这意味着服务器应该支持TLSv1。所以问题出在其他地方。

我记得TLSv1.0有一个安全问题——我认为它可能会因此被拒绝。。。我想改用TLSv1.2。@ppeterka66,支持SSLv3但不支持TLSv1的服务器不太可能支持TLSv1.2。遗憾的是,TLSv1.2支持还不是很广泛。请在不更改已启用协议的情况下尝试相同的服务器。