此问题适用于了解 Apache CXF JAX RS 工作原理的人员。当 CXF 创建 HttpsUrlConnection 时,它会在默认的 SSLSocketFactory 周围放置一个包装器,称为 SSLSocketFactoryWrapper,它有一个名为 ciphers 的参数。
此参数通过调用 SSLContextImpl 的 getSupportedCipherSuites() 来初始化。
但是,当 JAVA 的默认实现创建 SSLSocket 时,它会通过调用 getDefaultCipherSuites() 来初始化密码,这会返回一个较小的密码列表。
getSupportedCipherSuites() 返回已启用的密码列表 + 那些可以启用的。
看起来我的程序失败只是因为 CXF 调用了 getSupportedCipherSuites 而不是 getDefaultCipherSuites。任何人都知道为什么会这样?有什么方法可以覆盖此行为。我知道如何设置 CipherSuiteFilter,我可以用它来减少密码的数量,但在我的环境中使用它并不容易。
谢谢
最佳答案
您可以通过以下方式使用默认的 SSLSocketFactory:
tlsClientParameters.isUseHttpsURLConnectionDefaultSslSocketFactory()
(参见此处:http://cxf.apache.org/docs/tls-configuration.html#TLSConfiguration-ClientTLSParameters)
我不知道为什么你的程序会失败只是因为安装了范围更广的密码套件而不是默认的...
冷静。
关于java - getSupportedCipherSuites 与 getDefaultCipherSuites Apache CXF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30254840/