1

对不起,如果我的问题似乎多余。我在 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 一切正常,无需修改代码。

4

1 回答 1

0

要在 tomcat 中启用 Tls,请在 tomcat/conf/ 文件夹中 tomcat 的 server.xml 文件的 Connector 部分添加此参数sslEnabledProtocols="TLSv1.X" 。例如:要配置 TLSv1.1,请遵循以下配置。

    <Connector port="8443" 
 protocol="org.apache.coyote.http11.Http11Protocol"
 maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
 keystoreFile="ssl/.keystore" keystorePass="changeit"
 clientAuth="false" sslProtocol="SSL" sslEnabledProtocols="TLSv1.1" />

重启服务器

于 2018-10-10T11:36:41.903 回答