Java7 TLSv1.2 Apache Commons HttpClient3.1
・Java7
・TLSv1.2
・Apache Commons HttpClient3.1
※TLSv1.2はJava7以上が必須
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import javax.net.ssl.SSLContext; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods.GetMethod; public class HttpClientTLSv12 { static { //System.setProperty("javax.net.debug", "ssl"); //System.setProperty("https.protocols", "TLSv1.2"); //System.setProperty("jdk.tls.client.protocols", "TLSv1.2"); //System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.SimpleLog"); //System.setProperty("org.apache.commons.logging.simplelog.showdatetime", "true"); //System.setProperty("org.apache.commons.logging.simplelog.log.httpclient.wire.header", "debug"); //System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.commons.httpclient", "debug"); } public static void main(String[] args) { HttpClientTLSv12 tls = new HttpClientTLSv12(); tls.execute(); } public HttpClientTLSv12() { } private void execute() { GetMethod httpget = null; BufferedReader br = null; try { // 使用するSSLプロトコルのデフォルトをTLS1.2にする SSLContext ctx = SSLContext.getInstance("TLSv1.2"); ctx.init(null, null, null); SSLContext.setDefault(ctx); // Apache Commons HttpClient3.1 HttpClient httpclient = new HttpClient(); httpget = new GetMethod("https://www.yahoo.co.jp/"); httpclient.executeMethod(httpget); // Response System.out.println(httpget.getStatusLine()); InputStream is = httpget.getResponseBodyAsStream(); br = new BufferedReader(new InputStreamReader(is)); String line; while ((line = br.readLine()) != null) { System.out.println(line); } } catch (Exception e) { System.out.println(e.getMessage()); } finally { if(httpget != null) { httpget.releaseConnection(); httpget= null; } if (br != null) { try { br.close(); } catch (IOException e) { // } br = null; } } } }
2019/10/15 追記
・Java8の場合は、TLSv1.2がデフォルトのため、下記の記述は不要
// 使用するSSLプロトコルのデフォルトをTLS1.2にする SSLContext ctx = SSLContext.getInstance("TLSv1.2"); ctx.init(null, null, null); SSLContext.setDefault(ctx);
・下記ファイルにルート証明書が設定されている必要がある
%JAVA_HOME%/lib/security/cacerts
・Java7でVM引数やプロパティにTLSv1.2を設定すれば動くみたいな記事を見かけるけど上手く動作しない。
-Dhttps.protocols=TLSv1.2 -Djdk.tls.client.protocols=TLSv1.2 System.setProperty("https.protocols", "TLSv1.2"); System.setProperty("jdk.tls.client.protocols", "TLSv1.2");
・参考
java tls1 Commons HTTPClient 3.1にTLS 1.2をHTTPS専用に使用させる方法 - 初心者入門サンプル