TLSv1のみを使用するようにApache Tomcatサーバーを再構成しようとしています。ただし、特定のブラウザーを使用してSSLv3にフォールバックしています。
<connector>タグを次のように設定しました。
<Connector ...
enableLookups="true" disableUploadTimeout="true"
acceptCount="100" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
clientAuth="false" sslProtocol="TLS" ciphers="TLS_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA" sslEnabledProtocols="TLSv1" />
構成設定が欠けているのか、それとも存在すべきではない、何か存在するものがあるのか?
Tomcat 5とバージョン6のバージョンによっては、SSLEnabled = "true"はリリースの途中で追加されたため機能しない場合があります。これを回避するには、以下を編集する必要があります。sslProtocols = TLS To:sslProtocols = "TLSv1、TLSv1.1、TLSv1.2"
奇妙に思えるが、それはTLSと書いてあるが、SSL 3を含んでいる。
これにより、Tomcat 5.5.20およびTomcat 6インスタンスで問題が修正されました。 -グレッグ
私はあなたがする必要があることを信じています:
ボス:
<Connector protocol="HTTP/1.1" SSLEnabled="true"
enableLookups="true" disableUploadTimeout="true"
acceptCount="100" maxThreads="200"
scheme="https" secure="true" clientAuth="false"
keystoreFile="${jboss.server.home.dir}/conf/keystore.jks"
keystorePass="rmi+ssl"
sslProtocols = "TLSv1,TLSv1.1,TLSv1.2" />
暗号スイートの定義は不明ですが、sslprotocolsはTLSv1、TLSv1.1、TLSv1.2に設定する必要があります
tomcatのバージョンによって異なりますが、他の解決策は次のとおりです。
Tomcat 5および6
<Connector...
enableLookups="true" disableUploadTimeout="true"
acceptCount="100" maxThreads="200" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslEnabledProtocols = "TLSv1,TLSv1.1,TLSv1.2" />
** RHEL5ベースのディストリビューションでは、Tomcat 6バージョンに以下が適用されます Tomcat 6.0.38より前 **
ご了承ください TLSv1.1,TLSv1.2
はJava 7でサポートされていますJava 6.ではありません6.これらのディレクティブを実行中のサーバーに追加するJava 6は無害です、ただしTLSv1.1とTLSv1.2は有効になりません。
<Connector...
enableLookups="true" disableUploadTimeout="true"
acceptCount="100" maxThreads="200" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocols = "TLSv1,TLSv1.1,TLSv1.2" />
Tomcat> = 7
<Connector...
enableLookups="true" disableUploadTimeout="true"
acceptCount="100" maxThreads="200" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocols = "TLSv1,TLSv1.1,TLSv1.2" />
Tomcat APRコネクタ
<Connector...
maxThreads="200"
enableLookups="true" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
SSLEnabled="true"
SSLProtocol="TLSv1"
SSLCertificateFile="${catalina.base}/conf/localhost.crt"
SSLCertificateKeyFile="${catalina.base}/conf/localhost.key" />
上記は、コネクタの仕様が上記の仕様に合うように変更されています。ソース: https://access.redhat.com/solutions/12322
同様の使用例があります。Tomcat7が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実装。
Opensslを使用しているため、org.Apache.coyote.http11.Http11AprProtocol
は使用しません。基礎となる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要求のみに厳密に応答するようになったことを証明しています。
Tomcat 7のドキュメントには、sslEnabledProtocols
およびsslProtocol
オプションがサポートされており、それらの間に重複があることが明記されています。
https://Tomcat.Apache.org/Tomcat-7.0-doc/config/http.html
まず第一に、@ iviorelが言うように、それはsslProtocols
ではなく、sslProtocol
です。 (なぜ彼の答えは下がったのですか?)
[〜#〜] jsse [〜#〜]
私にとって、Tomcat 7およびJava 7、の場合、次の構成のsslProtocol
は機能しません。
<Connector SSLEnabled="true" clientAuth="false"
keyAlias="keyalias" keystoreFile="keystore" keystorePass="changeit"
maxThreads="150" port="443" protocol="org.Apache.coyote.http11.Http11Protocol"
scheme="https" secure="true" sslProtocol="TLSv1,TLSv1.1,TLSv1.2" />
それは言う:
SEVERE: Failed to initialize end point associated with ProtocolHandler ["http-bio-443"]
Java.io.IOException: TLSv1,TLSv1.1,TLSv1.2 SSLContext not available
at org.Apache.Tomcat.util.net.jsse.JSSESocketFactory.init(JSSESocketFactory.Java:465)
at org.Apache.Tomcat.util.net.jsse.JSSESocketFactory.createSocket(JSSESocketFactory.Java:187)
at org.Apache.Tomcat.util.net.JIoEndpoint.bind(JIoEndpoint.Java:398)
at org.Apache.Tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.Java:646)
...
Caused by: Java.security.NoSuchAlgorithmException: TLSv1,TLSv1.1,TLSv1.2 SSLContext not available
at Sun.security.jca.GetInstance.getInstance(GetInstance.Java:159)
at javax.net.ssl.SSLContext.getInstance(SSLContext.Java:156)
at org.Apache.Tomcat.util.net.jsse.JSSESocketFactory.createSSLContext(JSSESocketFactory.Java:478)
at org.Apache.Tomcat.util.net.jsse.JSSESocketFactory.init(JSSESocketFactory.Java:439)
... 19 more
しかし、以下はうまく動作します:
<Connector SSLEnabled="true" clientAuth="false"
keyAlias="keyalias" keystoreFile="keystore" keystorePass="changeit"
maxThreads="150" port="443" protocol="org.Apache.coyote.http11.Http11Protocol"
scheme="https" secure="true" sslEnabledProtocols="TLSv1,TLSv1.1,TLSv1.2" />
[〜#〜] apr [〜#〜]
SSL v3を無効にし、TLSv1プロトコルを有効にするには:
SSLProtocol="TLSv1"
TLSv1、TLSv1.1、TLSv1.2プロトコルを有効にするには:
SSLProtocol="TLSv1+TLSv1.1+TLSv1.2"
または:
SSLProtocol="all"
注:「TLSv1.1」、「TLSv1.2」の値には、Tomcat Native 1.1.32およびそれをサポートするTomcatのバージョンが必要です。
Jboss 4.0.3 SP1(Java 1.5を含むTomcat 5.5))でSSL 3(POODLE)を無効にするには、次のようにコードを変更します。
<Connector port="443" address="${jboss.bind.address}" maxThreads="100" strategy="ms" maxHttpHeaderSize="8192" emptySessionPath="true" scheme="https" secure="true" clientAuth="false" keystoreFile="${jboss.server.home.dir}/conf/eCP.keystore" keystorePass="password" sslProtocol="TLS" protocols="TLSv1,TLSv1.1,TLSv1.2" />
Tomcat 5.5では、文書化されていないパラメーターを使用する必要があります
protocols="TLSv1"
このプロトコルバージョンの使用を制限します。
Tomcat 6.0.41では、NIOコネクタがこれらの設定を無視しているため、ブロッキングコネクタを使用する必要があります。
http://wiki.Apache.org/Tomcat/Security/POODLE
http://mail-archives.Apache.org/mod_mbox/Tomcat-users/201410.mbox/%[email protected]%3E
コネクタポート= "443" protocol = "org.Apache.coyote.http11.Http11Protocol" maxThreads = "200" scheme = "https" secure = "true" SSLEnabled = "true" clientAuth = "false"
keystoreFile = "Tomcat.jks" keystorePass = "changeit" sslEnabledProtocols = "TLSv1、TLSv1.1、TLSv1.2" />
新しいTomcatの場合は、次のようにsslProtocolsおよびsslEnabledProtocolsコンボを使用します。
<Connector port="8443" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" disableUploadTimeout="true" acceptCount="100" scheme="https" secure="true" clientAuth="false" sslProtocols="TLSv1,TLSv1.1,TLSv1.2"sslEnabledProtocols="TLSv1,TLSv1.1,TLSv1.2" SSLEnabled="true" URIEncoding="UTF-8" keystorePass=""/>