Saya memiliki use case yang serupa, yaitu untuk mengaktifkan Tomcat 7 untuk hanya menggunakan TLSv1.2, tidak untuk kembali ke protokol SSL sebelumnya seperti TLSv1.1 atau SSLv3.
Saya menggunakan: C: \ apache-tomcat-7.0.64-64bit dan C: \ Java64 \ jdk1.8.0_60.
Mengikuti instruksi ini: https://tomcat.apache.org/tomcat-7.0-doc/security-howto.html . Tomcat relatif sederhana untuk mengatur dukungan SSL.
Dari banyak referensi saya menguji banyak kombinasi, akhirnya saya menemukan 1 yang akan memberlakukan Tomcat 7 untuk menerima TLSv1.2 saja. 2 tempat yang perlu disentuh:
1) Dalam C: \ apache-tomcat-7.0.64-64bit \ conf \ server.xml
<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.2" />
dimana
keystoreFile = toko kepercayaan lokal yang ditandatangani sendiri
org.apache.coyote.http11.Http11Protocol = Implementasi BISE JSSE.
Kami tidak menggunakan org.apache.coyote.http11.Http11AprProtocol, karena didukung oleh openssl. Openssl yang mendasarinya akan kembali untuk mendukung protokol SSL sebelumnya.
2) Saat memulai Tomcat, aktifkan parameter lingkungan berikut.
set JAVA_HOME=C:\Java64\jdk1.8.0_60
set PATH=%PATH%;C:\Java64\jdk1.8.0_60\bin
set CATALINA_HOME=C:\apache-tomcat-7.0.64-64bit
set JAVA_OPTS=-Djdk.tls.client.protocols="TLSv1.2" -Dsun.security.ssl.allowUnsafeRenegotiation=false -Dhttps.protocols="TLSv1.2"
Pembatasan JAVA_OPTS diperlukan, jika tidak Tomcat (yang didukung oleh Java8) akan kembali untuk mendukung protokol SSL sebelumnya.
Mulai Tomcat C:\apache-tomcat-7.0.64-64bit\bin\startup.bat
Kita bisa melihat JAVA_OPTS muncul di log startup Tomcat.
Oct 16, 2015 4:10:17 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Djdk.tls.client.protocols=TLSv1.2
Oct 16, 2015 4:10:17 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dsun.security.ssl.allowUnsafeRenegotiation=false
Oct 16, 2015 4:10:17 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dhttps.protocols=TLSv1.2
Kemudian, kita dapat menggunakan perintah openssl untuk memverifikasi pengaturan kita. Pertama-tama hubungkan localhost: 8443 dengan protokol TLSv1.1. Tomcat menolak untuk membalas dengan sertifikat Server.
C:\OpenSSL-Win32\bin>openssl s_client -connect localhost:8443 -tls1_1
Loading 'screen' into random state - done
CONNECTED(000001C0)
5372:error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number:.\ssl\s3_pkt.c:362:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 5 bytes and written 0 bytes
Hubungkan localhost: 8443 dengan protokol TLSv1.2, Tomcat membalas ServerHello dengan sertifikat:
C:\OpenSSL-Win32\bin>openssl s_client -connect localhost:8443 -tls1_2
Loading 'screen' into random state - done
CONNECTED(000001C0)
depth=1 C = US, ST = Washington, L = Seattle, O = getaCert - www.getacert.com
verify error:num=19:self signed certificate in certificate chain
---
Certificate chain
0 s:/C=SG/ST=SG/L=Singapore/O=Xxxx/OU=Development/CN=Myself
i:/C=US/ST=Washington/L=Seattle/O=getaCert - www.getacert.com
1 s:/C=US/ST=Washington/L=Seattle/O=getaCert - www.getacert.com
i:/C=US/ST=Washington/L=Seattle/O=getaCert - www.getacert.com
---
Server certificate
-----BEGIN CERTIFICATE-----
(ignored)
-----END CERTIFICATE-----
subject=/C=SG/ST=SG/L=Singapore/O=Xxxx/OU=Development/CN=Myself
issuer=/C=US/ST=Washington/L=Seattle/O=getaCert - www.getacert.com
---
No client certificate CA names sent
Peer signing digest: SHA512
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 2367 bytes and written 443 bytes
Ini membuktikan bahwa Tomcat sekarang hanya merespons permintaan TLSv1.2 saja.