java - 如何使用 Rest 模板将 TLS1.2 强制执行到 Rest 客户端

标签 java spring resttemplate tls1.2

我正在通过调用 post 方法使用 Spring3.0 restTemplate 使用 json webservice。

        MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>();
        headers.add("Content-Type", MediaType.APPLICATION_JSON_VALUE);      
        HttpEntity<Object> entity = new HttpEntity<Object>(requestAsString, headers);
        postForObject = restTemplate.postForObject(url, entity, responseClass );

我们的应用程序部署在 WAS 服务器中,并尝试通过使用 TLS1.0 创建套接字连接来连接生产者。但是,现在producer只支持TLS1.1和TLS1.2。

如何强制 restTempate 使用 TLS1.1 或 TLS 1.2。

通常对于 apache httpclient 代码,创建自定义 ProtocolSocketFactory 并覆盖 createSocket 方法。然而,在 RestTemplate 的情况下,如何实现相同的。

最佳答案

使用 Spring > 3.1:

import javax.net.ssl.SSLContext;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;

SSLContext context = SSLContext.getInstance("TLSv1.2");
context.init(null, null, null);

CloseableHttpClient httpClient = HttpClientBuilder.create().setSSLContext(context)
    .build();
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient);
RestTemplate restTemplate = new RestTemplate(factory);
.....

关于java - 如何使用 Rest 模板将 TLS1.2 强制执行到 Rest 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39161542/

相关文章:

java - 车辆阵列

java - 优化 DOM 和 XPath Java 代码

java - 具体查询时如何设置fetchSize?

java - 从列表中删除不相关的项目与使用相关项目构建新列表

java - 如何找到Spark的安装目录?

spring - RESTful 中的 JSON 注入(inject)

spring - 了解 tomcat 对中止或超时请求的访问日志

java - 如何针对不同的子类使用 RestTemplate.exchange

spring - 用于 Spring 项目中生产代码的 RestTemplate vs Apache Http Client