私の質問が冗長に思える場合は申し訳ありません。Stackoverflow に関する多くの Q&A と、Tomcat、Java クライアント、OS の TLSv1.1+ の有効化に関するその他のリソースの束を見つけましたが、それでも Win10/Tomcat7/Java7 のローカル環境で有効にできません。 . おそらく、私は何か間違っているだけです。
明確にするために、私はTomcatにデプロイされたJava Webアプリを持っています。この Web アプリは、https 経由でリモート サービスにリクエストを送信します。以前、これらのリモート サービスは TLSv1.0 をサポートしていましたが、私のアプリは正常に動作していました。現在、これらのリモート サービスは TLSv1.1+ のみをサポートしており、エラーが表示されます。実際には、次のような単純な HTML ページの応答が返されます。
To access this website, update your web browser or upgrade your operating system to support TLSv1.1 or TLSv1.2
さまざまな方法で Web アプリケーションの TLSv1.1+ アウトバウンド通信サポートを有効にしようとしましたが、それでもうまくいきません。だから、私は試しました:
set CATALINA_OPTS=-Dhttps.protocols=TLSv1.1,TLSv1.2
set CATALINA_OPTS=-Ddeployment.security.TLSv1.1=true -Ddeployment.security.TLSv1.2=true
と同じものJAVA_OPTS
。システム環境変数に追加することと、Tomcatを起動する前にcmdに設定することの両方を試しました。また、Control Panel\Programs\Java Control Panel Advanced Tab で TLSv1.1 と TLSv1.2 のサポートを設定しました。
ここに私のenvに関する詳細があります:
Windows バージョン:
Microsoft Windows [Version 10.0.14393]
Tomcat 起動ログ (最初の n 行):
c:\Program Files\apache-tomcat-7.0.72\bin>catalina.bat run
Using CATALINA_BASE: "C:\Program Files\apache-tomcat-7.0.72"
Using CATALINA_HOME: "C:\Program Files\apache-tomcat-7.0.72"
Using CATALINA_TMPDIR: "C:\Program Files\apache-tomcat-7.0.72\temp"
Using CATALINA_OPTS: "-Dhttps.protocols=TLSv1.1,TLSv1.2 -Xms1024m -Xmx2048m -XX:MaxPermSize=256m"
Using JRE_HOME: "C:\Program Files\Java\jdk1.7.0_80\jre"
Using CLASSPATH: "C:\Program Files\apache-tomcat-7.0.72\bin\bootstrap.jar;C:\Program Files\apache-tomcat-7.0.72\bin\tomcat-juli.jar"
Jan 12, 2017 3:40:54 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server version: Apache Tomcat/7.0.72
Jan 12, 2017 3:40:54 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server built: Sep 14 2016 12:12:26 UTC
Jan 12, 2017 3:40:54 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server number: 7.0.72.0
Jan 12, 2017 3:40:54 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: OS Name: Windows 8.1
Jan 12, 2017 3:40:54 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: OS Version: 6.3
Jan 12, 2017 3:40:54 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Architecture: amd64
Jan 12, 2017 3:40:54 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Java Home: C:\Program Files\Java\jdk1.7.0_80\jre
Jan 12, 2017 3:40:54 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: JVM Version: 1.7.0_80-b15
Jan 12, 2017 3:40:54 PM org.apache.catalina.startup.VersionLoggerListener log
...
私は自分が間違っていることを理解できません。
更新しました:
Tomcat の JRE_HOME を JAVA 8 に切り替えると、問題なく動作します
今のところ、このコードを追加してApache HttpClientを構成することで修正しました。
SSLContext sslContext = null;
try {
sslContext = SSLContexts.custom().useTLS().build();
} catch (KeyManagementException | NoSuchAlgorithmException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
SSLConnectionSocketFactory f = new SSLConnectionSocketFactory(sslContext, new String[] { "TLSv1.1", "TLSv1.2" }, null,
new AllowAllHostnameVerifier());
httpclient = HttpClients.custom().setSSLSocketFactory(f).build();
しかし、それでもコードを変更しないとできないのでしょうか? どうにかしてTomcat Javaまたはシステムを構成することによって?JAVA 8 では、コードを変更しなくてもすべてが機能します。