如何在Win10 / Tomcat7 / Java7上从Web应用程序启用TLSv1.1 +出站通信?

时间:2017-01-12 23:49:31

标签: java tomcat https tls1.2 tls1.1

对不起,如果我的问题似乎多余了。我发现大量的Q& As on stackoverflow和一堆其他资源关于为Tomcat启用TLSv1.1 +,对于Java客户端,对于操作系统...,但我仍然无法在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支持。

以下是关于我的环境的详细信息:

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的原因一切正常,无需修改代码。

1 个答案:

答案 0 :(得分: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" />

重新启动服务器