如何使用java或spring库使rest服务仅使用TLSV1.2?
托管rest服务的服务提供商要求仅使用TLS版本1.2进行通信。 所以现在我需要让我的应用程序使用TLS1.2与该服务通信 我知道,在java8中,我们可以使用java.security文件中的属性jdk.TLS.disabledAlgorithms=SSLv3,RC4禁用传统版本的TLS和SSL 但在服务器中,会有其他进程使用相同的java设置,因此我担心如果我在java.security文件中更改该属性,那么它将适用于使用相同设置的其他服务 问题:如何使用java或spring库使rest服务仅使用TLSV1.2?,java,spring,tls1.2,using,Java,Spring,Tls1.2,Using,托管rest服务的服务提供商要求仅使用TLS版本1.2进行通信。 所以现在我需要让我的应用程序使用TLS1.2与该服务通信 我知道,在java8中,我们可以使用java.security文件中的属性jdk.TLS.disabledAlgorithms=SSLv3,RC4禁用传统版本的TLS和SSL 但在服务器中,会有其他进程使用相同的java设置,因此我担心如果我在java.security文件中更改该属性,那么它将适用于使用相同设置的其他服务 问题: 我想知道是否有其他方法可以通过使用java
我想知道是否有其他方法可以通过使用java/spring库的应用程序代码使我的rest调用只使用特定的TLS版本?创建
SSLContext
以使用所需的协议:
SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
sslContext.init(null, null, null);
如果客户端代码或库使用HttpsURLConnection,则可以为所有HTTS连接设置默认的SSLSocketFactory
:
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
或在每个连接级别:
HttpsURLConnection urlConnection = ....;
urlConnection.setSSLSocketFactory(sslContext.getSocketFactory());
urlConnection.connect();
不同的库可能有不同的系统来提供SSLSocketFactory
或SSLContext
。
例如,如果您使用的是JAX-RS,则可以创建一个REST客户端,该客户端使用SSLContext
:
Client client = ClientBuilder.newBuilder().sslContext(sslContext).build();
首先,如果您展示您的REST客户机代码,这将有所帮助,因为这将有助于找到适合您的解决方案。其次,如果服务提供商只想支持TLSv1.2,那么他们可以在服务器端进行配置。然后,只要客户端支持,所有连接都将使用TLSv1.2。我的意见是,他们应该执行这一点,而不是客户。