Tomcat 7이 TLSv1.2 만 엄격하게 사용하고 TLSv1.1 또는 SSLv3과 같은 이전 SSL 프로토콜로 폴백하지 않도록하는 유사한 유스 케이스가 있습니다.
C : \ apache-tomcat-7.0.64-64bit 및 C : \ Java64 \ jdk1.8.0_60을 사용하고 있습니다.
이 지침을 따르십시오 : https://tomcat.apache.org/tomcat-7.0-doc/security-howto.html . Tomcat은 SSL 지원 설정이 비교적 간단합니다.
많은 참고 문헌에서 많은 조합을 테스트했으며 결국 Tomcat 7이 TLSv1.2 만 수락하도록 강제하는 1을 발견했습니다. 만져야 할 2 곳 :
1) 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" />
어디에
keystoreFile
= 지역 자체 서명 신뢰 저장소
org.apache.coyote.http11.Http11Protocol
= JSSE BIO 구현
우리는 org.apache.coyote.http11.Http11AprProtocol
openssl에 의해 구동되기 때문에를 사용하지 않습니다 . 기본 openssl은 이전 SSL 프로토콜을 지원하도록 대체됩니다.
2) Tomcat을 시작할 때 다음 환경 매개 변수를 활성화하십시오.
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"
JAVA_OPTS 제한이 필요합니다. 그렇지 않으면 Tomcat (Java8 기반)이 이전 SSL 프로토콜을 지원하도록 대체됩니다.
Tomcat 시작 C:\apache-tomcat-7.0.64-64bit\bin\startup.bat
Tomcat 시작 로그에 JAVA_OPTS가 나타납니다.
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
그런 다음 openssl 명령을 사용하여 설정을 확인할 수 있습니다. 먼저 localhost : 8443을 TLSv1.1 프로토콜과 연결하십시오. Tomcat은 서버 인증서로 응답을 거부합니다.
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
localhost : 8443을 TLSv1.2 프로토콜로 연결하고 Tomcat은 ServerHello를 인증서로 응답합니다.
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
이는 Tomcat이 TLSv1.2 요청에만 엄격하게 응답 함을 나타냅니다.