[英]Tomcat 6 and TLSv1.2 In Java
我在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,我只能配置環境而不是代碼。
https.protocols
系統屬性僅考慮HttpsURLConnection
和URL.openStream()
,如診斷TLS,SSL和HTTPS中所述
控制Java客戶端使用的協議版本,該客戶端通過使用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();
如果您試圖強制服務器使用TLSv1.2,以下鏈接可能會提供您所需的內容。
由於doc指定編輯Tomcat配置文件,如下所示,
Tomcat使用的SSL的實現是自動選擇的,除非它被覆蓋如下所述。 如果安裝使用APR - 即您已經安裝了Tomcat本機庫 - 那么它將使用APR SSL實現,否則它將使用Java JSSE實現。
要避免自動配置,可以通過在Connector的protocol屬性中指定classname來定義要使用的實現。 要定義Java(JSSE)連接器,無論是否加載APR庫,都要執行以下操作:
<Connector protocol="org.apache.coyote.http11.Http11AprProtocol" port="8443" .../>
在$CATALINA_BASE/conf/server.xml
文件中配置連接器,其中$CATALINA_BASE
表示Tomcat 6實例的基本目錄。 用於SSL連接器的示例<Connector>
元素包含在隨Tomcat一起安裝的缺省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)。 但是,在許多操作系統上運行Tomcat的端口號低於1024時,必須進行特殊設置(在本文檔的范圍之外)。
完成這些配置更改后,您必須像平常一樣重新啟動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"/>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.