Java GetSupportedCipherSuite与GetDefaultCipherSuite Apache CXF

Java GetSupportedCipherSuite与GetDefaultCipherSuite Apache CXF,java,ssl,cxf,Java,Ssl,Cxf,这个问题是为了解Apache CXF JAX RS工作原理的人提出的。当CXF创建一个HttpsUrlConnection时,它会在默认的SSLSocketFactory(称为SSLSocketFactoryWrapper)周围放置一个包装器,该包装器具有一个名为ciphers的参数 通过调用SSLContextImpl的GetSupportedCipherSuite()初始化此参数 但是,当JAVA的默认实现创建SSLSocket时,它通过调用getDefaultCipherSuite()初始

这个问题是为了解Apache CXF JAX RS工作原理的人提出的。当CXF创建一个HttpsUrlConnection时,它会在默认的SSLSocketFactory(称为SSLSocketFactoryWrapper)周围放置一个包装器,该包装器具有一个名为ciphers的参数

通过调用SSLContextImpl的GetSupportedCipherSuite()初始化此参数

但是,当JAVA的默认实现创建SSLSocket时,它通过调用getDefaultCipherSuite()初始化密码,该函数返回较小的密码列表

GetSupportedCipherSuite()返回已启用的密码列表 +那些可以启用的

看起来我的程序失败只是因为CXF调用GetSupportedCipherSuite而不是GetDefaultCipherSuite。有人知道为什么会这样吗?是否有任何方法可以覆盖此行为。我知道如何设置CipherSuiteFilter,我可以使用它来减少密码的数量,但在我的环境中使用它并不容易


谢谢

您可以通过以下方式使用默认的SSLSocketFactory:

tlsClientParameters.isUseHttpsURLConnectionDefaultSslSocketFactory()

(见此处:)

我不知道为什么你的程序会失败,只是因为安装了范围更广的密码套件而不是默认的


Colm.

由于使用了不安全的密码套件,它可能会导致安全审计失败。不管是谁,这都是非常糟糕的做法。我从SSL握手中了解到的是,客户端提供一个密码套件列表,服务器选择其中一个…如果是这种情况,列表中的一些密码套件不安全并不重要,对吗?这些可以被服务器忽略。我还发现这个问题只发生在JAVA 8上,显然JAVA 8在其默认列表中添加了更多的密码套件。@Colm是的,我知道这个选项。就是这样。但这更像是一种回退实现,因为这意味着我们没有使用cxf的功能。如果有帮助,我会得到一个SocketException:连接重置作为异常。@EJP-不安全的密码套件会被显式过滤掉。