Java中的Tomcat 6和TLSv1.2

时间:2018-07-12 14:31:12

标签: java tomcat ssl

我在tomcat 6中部署了一个Java应用程序。该应用程序通过套接字将消息发送到另一个服务,并且它仅需要使用TLSv1.2协议。 在我的tomcat6.conf文件中,输入以下配置:

JAVA_HOME=/usr/lib/jvm/jre1.7.0_75
JAVA_OPTS="${JAVA_OPTS} -Djavax.sql.DataSource.Factory=org.apache.commons.dbcp.BasicDataSourceFactory -Dhttps.protocols=TLSv1.2"

但是stll使用旧的tls版本。

是否可以在Java或tomcat中应用任何配置来强制使用TLSv1.2?


修改1: @Peter Walser提供的答案很好并且可以工作。问题是我无法修改代码,因为这是第三方提供的jar,我只能配置环境,而不能配置代码。

2 个答案:

答案 0 :(得分:2)

Diagnosing TLS, SSL, and HTTPS所述,仅考虑https.protocolsHttpsURLConnection的{​​{1}}系统属性

  

控制Java客户端使用的协议版本,该Java客户端通过使用HttpsURLConnection类或通过URL.openStream()操作获得https连接。 ...

     

对于非HTTP协议,可以通过SocketFactory的SSLContext进行控制。

您可以如下配置SSLSocket:

URL.openStream()

使用REST客户端时,大多数客户端都支持通过SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault(); SSLSocket socket = (SSLSocket) factory.createSocket(host, port); socket.setEnabledProtocols(new String[] {"TLSv1.2"}); 配置协议。示例( JAX-RS 客户端):

SSLContext

答案 1 :(得分:2)

如果您试图强制服务器使用TLSv1.2,则以下链接可能会提供所需的内容。

  

The Apache Tomcat 5.5 Servlet/JSP Container - SSL Configuration HOW-TO


根据文档的指定,按如下所示编辑Tomcat配置文件,

Tomcat会自动选择SSL的实现,除非如下所述将其覆盖。如果安装使用APR(即您已安装Tomcat本机库),则它将使用APR SSL实现,否则将使用Java JSSE实现。

为避免自动配置,您可以通过在连接器的协议属性中指定类名来定义要使用的实现。 要定义Java(JSSE)连接器,而不管是否加载了APR库:

<Connector protocol="org.apache.coyote.http11.Http11AprProtocol" port="8443" .../>

$CATALINA_BASE/conf/server.xml文件中配置连接器,其中$CATALINA_BASE代表Tomcat 6实例的基本目录。 Tomcat随附的默认<Connector>文件中包含SSL连接器的示例server.xml元素。对于JSSE,它应该看起来像这样:

<!--
<Connector 
   port="8443" maxThreads="200"
   scheme="https" secure="true" SSLEnabled="true"
   SSLCertificateFile="/usr/local/ssl/server.crt" 
   SSLCertificateKeyFile="/usr/local/ssl/server.pem"
   clientAuth="optional" SSLProtocol="TLSv1"/>
-->

您会注意到,默认情况下,示例SSL连接器元素已被注释掉。您可以从要使用的示例SSL连接器周围删除注释标签,也可以添加自己的新连接器元素。无论哪种情况,您都需要根据自己的要求和环境配置SSL连接器。

端口属性(默认值为8443)是Tomcat将在其上侦听安全连接的TCP / IP端口号。您可以将其更改为所需的任何端口号(例如,https通信的默认端口为443)。但是,在许多操作系统上,要在端口号小于1024的端口上运行Tomcat,必须进行特殊设置(超出本文档的范围)。

完成这些配置更改后,您必须像往常一样重新启动Tomcat,并且应该可以正常工作。您应该能够通过SSL访问Tomcat支持的任何Web应用程序。


尝试将SSLProtocol元素中的<Connector>属性更改为SSLProtocol="TLSv1.2"

<Connector 
   port="8443" maxThreads="200"
   scheme="https" secure="true" SSLEnabled="true"
   SSLCertificateFile="/usr/local/ssl/server.crt" 
   SSLCertificateKeyFile="/usr/local/ssl/server.pem"
   clientAuth="optional" SSLProtocol="TLSv1.2"/>