Java8で使用するTLSのバージョン事情
http://blogger.shase.info/2015/05/java8tls.html
あたりまえだけど、全部に適用されてしまうわけでして。
特定の通信だけ明示的に指定したいケースを考えてみる。
環境
Spring 4.1.xJava 8.x
apache httpclient 4.4.x
とりあえずfactoryのところ変えてみたよ、って感じ。
SimpleClientHttpRequestFactoryはjavaの設定そのままなので、HttpComponentsClientHttpRequestFactoryを使ってみました。
before
// request factoryの生成
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory() {
};
// factoryになんかセットしたりする
// リクエスト
HttpEntity<String> request = new HttpEntity<String>(requestHeaders);
String url = "https://localhost"
RestTemplate restTemplate = new RestTemplate(factory);
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, request, String.class);
after
// request factoryの生成
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
SSLContext sslContext = null;
try {
sslContext = SSLContext.getInstance("TLSv1.2");
sslContext.init(null, null, null);
} catch (Exception e) {
//todo:
}
SSLConnectionSocketFactory sf = new SSLConnectionSocketFactory(sslContext);
CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(sf).setSSLHostnameVerifier(new NoopHostnameVerifier()).build();
factory.setHttpClient(httpClient);
// リクエスト
HttpEntity<String> request = new HttpEntity<String>(requestHeaders);
String url = "https://localhost"
RestTemplate restTemplate = new RestTemplate(factory);
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, request, String.class);
参考にした
http://www.baeldung.com/httpclient-sslgistとか貼ったほうが見やすいね。(。-人-。) ゴメーン
0 件のコメント:
コメントを投稿