HttpsURLConnection
がSSL接続を透過的にネゴシエートするという記事を読みました。
公式文書にはこう書かれています:
このクラスはHostnameVerifierとSSLSocketFactoryを使用します。両方のクラスにデフォルトの実装が定義されています。 [ 1 ]
一度接続を開いたら
httpsCon = (HttpsURLConnection) url.openConnection();
すでにSSL/TLSで暗号化されています。
標準実装のTLSバージョンを表示および設定するにはどうすればよいですか? (Java 8の場合はTLS 1.2、Java 7の場合はTLS 1.0)
Protocollを設定するには、SSLContext
を作成する必要があります。
in Java 1.8:
SSLContext sc = SSLContext.getInstance("TLSv1.2");
// Init the SSLContext with a TrustManager[] and SecureRandom()
sc.init(null, trustCerts, new Java.security.SecureRandom());
in Java 1.7:
SSLContext sc = SSLContext.getInstance("TLSv1");
// Init the SSLContext with a TrustManager[] and SecureRandom()
sc.init(null, trustCerts, new Java.security.SecureRandom());
次に、SSLContextをHttpsURLConnectionに設定するだけです。
httpsCon.setSSLSocketFactory(sc.getSocketFactory());
それはトリックを行う必要があります。
JDK 1.7でTLS 1.2プロトコルを設定することもできます。デフォルトでは、JDK 1.7は1.0に設定します。
SSLContext sc = SSLContext.getInstance("TLSv1.2"); //$NON-NLS-1$
sc.init(null, null, new Java.security.SecureRandom());
HttpsURLConnection con = (HttpsURLConnection) httpsURL.openConnection();
con.setSSLSocketFactory(sc.getSocketFactory());
private static javax.net.ssl.SSLSocketFactory getFactorySimple()
throws Exception {
SSLContext context = SSLContext.getInstance("TLSv1.2");`
context.init(null, null, null);
return context.getSocketFactory();
}
String loginurl ="some url";
HttpsURLConnection connection = null;
URL url = new URL(loginURL);
connection = (HttpsURLConnection) url.openConnection();
javax.net.ssl.SSLSocketFactory sslSocketFactory =getFactorySimple();
connection.setSSLSocketFactory(sslSocketFactory);
上記のコードを使用して、Java 1.7でtls 1.1またはtls 1.2を有効にすることができます