如何启用TLSv1.1+;Win10/Tomcat7/Java7上web应用程序的出站通信?

如何启用TLSv1.1+;Win10/Tomcat7/Java7上web应用程序的出站通信?,java,tomcat,https,tls1.2,tls1.1,Java,Tomcat,Https,Tls1.2,Tls1.1,对不起,如果我的问题显得多余。我在stackoverflow上找到了大量的问题和建议,以及关于为Tomcat、Java客户机和OS启用TLSv1.1+的大量其他资源,但我仍然无法在Win10/Tomcat7/Java7上的本地环境上启用它。也许,我只是有点不对劲 所以,说得很清楚,我在tomcat上部署了一个java web应用程序。此web应用通过https向远程服务发出请求。以前,这些远程服务支持TLSv1.0,我的应用程序运行良好。现在,这些远程服务只支持TLSv1.1+,我收到一个错误/

对不起,如果我的问题显得多余。我在stackoverflow上找到了大量的问题和建议,以及关于为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
我曾尝试以多种方式为我的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\u OPTS
,同样的东西。我尝试了添加到系统环境变量和在启动tomcat之前简单地在cmd中设置这两种方法。 另外,我在控制面板\程序\ Java控制面板高级选项卡上设置了TLSv1.1和TLSv1.2支持

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

Windows版本:

Microsoft Windows [Version 10.0.14393]
Tomcat启动日志(前n行):

我不明白我做错了什么

更新:

如果我将tomcat的JRE_HOME切换到Java8,它可以正常工作

现在,我通过添加以下代码来配置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中,一切都可以在不修改代码的情况下工作。

要在tomcat中启用Tls,请在tomcat的server.xml文件的连接器部分的tomcat/conf/文件夹中添加此参数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" />


重新启动服务器

要在tomcat中启用Tls,请在tomcat的server.xml文件的Connector部分的tomcat/conf/文件夹中添加此参数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" />


重新启动服务器

您在这里找错了方向。爪哇7。您不必“启用”任何内容。@EJP,可能我遗漏了什么。是的,Java7支持TLS1.1和1.2,但据我所知,它们在默认情况下并没有启用(找不到支持它的好链接)。所以,我正在尝试启用它。现在,我通过在代码中配置apache HttpClient来修复它,但仍然不能在没有代码修改的情况下完成,因为JAVA 8的所有功能都可以在没有代码修改的情况下工作?因此您需要找到好的链接(如果存在)。https.protocols仅适用于HttpsURLConnection和deployment。*或者ControlPanel仅适用于javaws或applet(如果仍有人允许小程序);请参阅。@EJP:请参阅“协议”一节中SunProviders的j7文档链接;还将1.1和1.2的客户端默认启用描述为j8中的新版本,确认它不在j7中。但请注意,7u75及以上默认值禁用SSLv3,因为POODLE与base-7文档相反。您在这里选错了树。Java 7。您不必“启用”任何内容@EJP,可能我遗漏了什么。是的,Java 7支持TLS 1.1和1.2,但据我所知,它们在默认情况下没有启用(找不到支持它的好链接).所以,我正在尝试启用它。目前,我通过在代码中配置apache HttpClient来修复它,但仍然不能在没有代码修改的情况下完成,因为JAVA 8的所有功能都可以在没有代码修改的情况下工作?因此,您需要找到好的链接(如果存在)。https.protocols仅适用于HttpsURLConnection和deployment。*或仅适用于控制面板适用于javaws或小程序(如果有人仍然允许小程序);请参阅。@EJP:请参阅协议一节中SunProviders的j7文档链接;还将1.1和1.2的客户端默认启用描述为j8中的新功能,确认它不在j7中。但注意7u75和up默认禁用SSLv3,因为POODLE与base-7文档相反。