对不起,如果我的问题似乎多余。我在 stackoverflow 上发现了大量的问答,以及关于为 Tomcat、Java 客户端、操作系统启用 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
我尝试通过多种方式为我的 webapp 启用 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来尝试它。此外,我在控制面板\程序\Java 控制面板高级选项卡中设置了 TLSv1.1 和 TLSv1.2 支持。
以下是有关我的环境的详细信息:
视窗版本:
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 一切正常,无需修改代码。