首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java中的Tomcat 6和TLSv1.2

Java中的Tomcat 6和TLSv1.2
EN

Stack Overflow用户
提问于 2018-07-12 22:31:12
回答 2查看 4.9K关注 0票数 10

我在tomcat6中部署了一个Java应用程序,该应用程序通过socket向另一个服务发送消息,它只需要使用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"

但仍将使用较旧的tls版本。

在java或tomcat中有什么配置可以强制使用TLSv1.2吗?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-12 23:10:32

https.protocols系统属性仅适用于HttpsURLConnectionURL.openStream(),如Diagnosing TLS, SSL, and HTTPS中所述

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

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

您可以按如下方式配置SSLSocket:

SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket socket = (SSLSocket) factory.createSocket(host, port);
socket.setEnabledProtocols(new String[] {"TLSv1.2"});

当使用REST客户端时,它们中的大多数都支持在SSLContext上配置协议。示例(JAX-RS客户端):

Client client = ClientBuilder.newBuilder()
    .sslContext(SSLContext.getInstance("TLSv1.2"))
    // more settings, such as key/truststore, timeouts, logging
    .build();
票数 3
EN

Stack Overflow用户

发布于 2018-07-16 21:14:56

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

The Apache Tomcat 5.5 Servlet/JSP Container -

正如文档规定的那样,编辑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表示Tomcat6实例的基目录。随Tomcat一起安装的默认server.xml文件中包含了一个用于SSL的示例<Connector>元素。对于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连接器。

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

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

尝试将<Connector>元素中的SSLProtocol属性更改为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"/>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51308294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档