Tôi có một trường hợp sử dụng tương tự, đó là cho phép Tomcat 7 chỉ sử dụng nghiêm ngặt TLSv1.2, không quay trở lại các giao thức SSL trước đó như TLSv1.1 hoặc SSLv3.
Tôi đang sử dụng: C: \ apache-tomcat-7.0.64-64bit và C: \ Java64 \ jdk1.8.0_60.
Làm theo hướng dẫn này: https://tomcat.apache.org/tomcat-7.0-doc/security-howto.html . Tomcat tương đối đơn giản để thiết lập hỗ trợ SSL.
Từ nhiều tài liệu tham khảo tôi đã thử nghiệm nhiều kết hợp, cuối cùng tôi đã tìm thấy 1 cái sẽ thực thi Tomcat 7 chỉ chấp nhận TLSv1.2. 2 nơi cần thiết để chạm vào:
1) Trong 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" />
Ở đâu
keystoreFile
= cửa hàng ủy thác tự ký tại địa phương
org.apache.coyote.http11.Http11Protocol
= Thực hiện BSS JSSE.
Chúng tôi không sử dụng org.apache.coyote.http11.Http11AprProtocol
, bởi vì nó được cung cấp bởi openssl. Các openssl cơ bản sẽ quay trở lại để hỗ trợ các giao thức SSL trước đó.
2) Khi khởi động Tomcat, bật các tham số môi trường sau.
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"
Yêu cầu hạn chế JAVA_OPTS, nếu không Tomcat (được cung cấp bởi Java8) sẽ quay lại để hỗ trợ các giao thức SSL trước đó.
Khởi động Tomcat C:\apache-tomcat-7.0.64-64bit\bin\startup.bat
Chúng ta có thể thấy JAVA_OPTS xuất hiện trong nhật ký khởi động 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
Sau đó, chúng tôi có thể sử dụng lệnh openssl để xác minh thiết lập của chúng tôi. Đầu tiên kết nối localhost: 8443 với giao thức TLSv1.1. Tomcat từ chối trả lời với chứng chỉ máy chủ.
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
Kết nối localhost: 8443 với giao thức TLSv1.2, Tomcat trả lời ServerHello bằng chứng chỉ:
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
Điều này chứng tỏ rằng Tomcat hiện chỉ đáp ứng nghiêm ngặt yêu cầu TLSv1.2.