我在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,我只能配置环境,而不能配置代码。
答案 0 :(得分:2)
如Diagnosing TLS, SSL, and HTTPS所述,仅考虑https.protocols
和HttpsURLConnection
的{{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"/>