弁財天

ゴフマン「専門家を信じるのではなく、自分自身で考えて判断せよ」

SSLがプードルに殺されたらしいのでTLS1.2に変更して暗号化強度を上げる update4

Fedora29に付属するTomcat9(tomcat-9.0.10-1.fc29.noarch)からorg.apache.coyote.http11.Http11Protocolが消滅した。

02-Dec-2018 08:14:15.087 SEVERE [main] org.apache.catalina.connector.Connector. Protocol handler instantiation failed
 java.lang.ClassNotFoundException: org.apache.coyote.http11.Http11Protocol
	at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:264)
	at org.apache.catalina.connector.Connector.(Connector.java:101)
	at org.apache.catalina.startup.ConnectorCreateRule.begin(ConnectorCreateRule.java:64)
	at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1174)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:509)
	at com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:182)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1339)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2784)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:602)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:505)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:842)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:771)
	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)
	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:643)
	at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1439)
	at org.apache.catalina.startup.Catalina.load(Catalina.java:605)
	at org.apache.catalina.startup.Catalina.load(Catalina.java:656)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:306)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:491)
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true"
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true"
に修正w。

Fedora21のTomcat7のSSLポートの暗号化強度を上げる。

オレオレ証明書とキーストアはこっち

Keytool keeps giving SHA256 sigalg instead of requested alg

Important notification: Java 8 update 31 disables SSLv3- support
いまどきのJavaはjdk.tls.disabledAlgorithms=SSLv3にしてある。

Tomcat または JBoss Web で SSLv3 および SSLv2 を無効にする

Root Cause

SSLv3 は、後継の Transport Socket Layer (TLS) と比べて安全性が低くなります。セキュリティ上の観点から、SSL シリーズを無効にし、TLS だけを使用することが推奨されます。

SSLv3.0 プロトコルで脆弱性が報告されました。中間者となる攻撃者は、この脆弱性を利用して、padding oracle side-channel 攻撃を行うことで暗号文を解読できます。この脆弱性の詳細については、POODLE: SSLv3.0 脆弱性 (CVE-2014-3566) を参照してください。

なぜならSSLはPOODLE攻撃によって全滅してしまったからだ。 これ

Ivan Ristic SSL 3 is dead, killed by the POODLE attack
「SSL3が死亡。POODLEアタックで殺された。」

Bug 55988 - Add parameter useCipherSuitesOrder to JSSE (BIO and NIO) connectors [PATCH]

(2) Install Java 7 JCE Unlimited Strength (it also works with JDK 1.8.0 EA) [2]
キー長に128ビットの制限がかかってるらすい。

なので、128ビット以上にしたいサイトは
$JAVA_HOME/jre/lib/security/のファイルを
JCE Unlimited Strengthの.jarファイルと差し替える必要があるとか。

Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 7 Download
Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 8 Download

Fedora25のopenjdkなら

# cp UnlimitedJCEPolicyJDK8/US_export_policy.jar /usr/lib/jvm/jre/lib/security/
# cp UnlimitedJCEPolicyJDK8/local_policy.jar /usr/lib/jvm/jre/lib/security/
なかんじで上書きインストール。

暗号鍵の強度のアップグレード

keytool -genkey 
  -alias tomcat 
  -storepass changeit 
  -keypass changeit 
  -keyalg RSA 
  -sigalg SHA256withRSA 
  -keysize 2048 
  -validity 7305 
  -dname CN=host_name 
  -keystore tomcat.keystore
-keyalg RSA -sigalg SHA256withRSA -keysize 2048 -validity 7305

MikeN123 / SSLInfo.java
javaで使える暗号化方式を調べる。

$ java -version
openjdk version "1.8.0_31"
OpenJDK Runtime Environment (build 1.8.0_31-b13)
OpenJDK 64-Bit Server VM (build 25.31-b07, mixed mode)
$
$ java -cp `pwd` SSLInfo
Default	Cipher
 	SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA
*	SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA
 	SSL_DHE_DSS_WITH_DES_CBC_SHA
 	SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA
*	SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA
 	SSL_DHE_RSA_WITH_DES_CBC_SHA
 	SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA
 	SSL_DH_anon_EXPORT_WITH_RC4_40_MD5
 	SSL_DH_anon_WITH_3DES_EDE_CBC_SHA
 	SSL_DH_anon_WITH_DES_CBC_SHA
 	SSL_DH_anon_WITH_RC4_128_MD5
 	SSL_RSA_EXPORT_WITH_DES40_CBC_SHA
 	SSL_RSA_EXPORT_WITH_RC4_40_MD5
*	SSL_RSA_WITH_3DES_EDE_CBC_SHA
 	SSL_RSA_WITH_DES_CBC_SHA
 	SSL_RSA_WITH_NULL_MD5
 	SSL_RSA_WITH_NULL_SHA
*	SSL_RSA_WITH_RC4_128_MD5
*	SSL_RSA_WITH_RC4_128_SHA
*	TLS_DHE_DSS_WITH_AES_128_CBC_SHA
*	TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
*	TLS_DHE_DSS_WITH_AES_128_GCM_SHA256
*	TLS_DHE_DSS_WITH_AES_256_CBC_SHA
*	TLS_DHE_DSS_WITH_AES_256_CBC_SHA256
*	TLS_DHE_DSS_WITH_AES_256_GCM_SHA384
*	TLS_DHE_RSA_WITH_AES_128_CBC_SHA
*	TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
*	TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
*	TLS_DHE_RSA_WITH_AES_256_CBC_SHA
*	TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
*	TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
 	TLS_DH_anon_WITH_AES_128_CBC_SHA
 	TLS_DH_anon_WITH_AES_128_CBC_SHA256
 	TLS_DH_anon_WITH_AES_128_GCM_SHA256
 	TLS_DH_anon_WITH_AES_256_CBC_SHA
 	TLS_DH_anon_WITH_AES_256_CBC_SHA256
 	TLS_DH_anon_WITH_AES_256_GCM_SHA384
*	TLS_EMPTY_RENEGOTIATION_INFO_SCSV
 	TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5
 	TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA
 	TLS_KRB5_EXPORT_WITH_RC4_40_MD5
 	TLS_KRB5_EXPORT_WITH_RC4_40_SHA
 	TLS_KRB5_WITH_3DES_EDE_CBC_MD5
 	TLS_KRB5_WITH_3DES_EDE_CBC_SHA
 	TLS_KRB5_WITH_DES_CBC_MD5
 	TLS_KRB5_WITH_DES_CBC_SHA
 	TLS_KRB5_WITH_RC4_128_MD5
 	TLS_KRB5_WITH_RC4_128_SHA
*	TLS_RSA_WITH_AES_128_CBC_SHA
*	TLS_RSA_WITH_AES_128_CBC_SHA256
*	TLS_RSA_WITH_AES_128_GCM_SHA256
*	TLS_RSA_WITH_AES_256_CBC_SHA
*	TLS_RSA_WITH_AES_256_CBC_SHA256
*	TLS_RSA_WITH_AES_256_GCM_SHA384
 	TLS_RSA_WITH_NULL_SHA256
$ 
OpenJDKてTLS_ECDH_RSA_WITH_AES_*で話せない。
Tomcat7/OpenJDK1.8.0_31はSHA256ができてもよさげなのに
TLS_ECDHE_RSA_WITH_AES_*が話せない。256も384もできない。

TLS_DHE_RSA_WITH_AES_128_CBC_SHAとか
TLS_RSA_WITH_AES_128_CBC_SHAになるんだw

$ /usr/java/jdk1.8.0_40/bin/java -version
java version "1.8.0_40"
Java(TM) SE Runtime Environment (build 1.8.0_40-b26)
Java HotSpot(TM) 64-Bit Server VM (build 25.40-b25, mixed mode)
$
$ /usr/java/jdk1.8.0_40/bin/java -cp . SSLInfo
Default	Cipher
 	SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA
*	SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA
 	SSL_DHE_DSS_WITH_DES_CBC_SHA
 	SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA
*	SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA
 	SSL_DHE_RSA_WITH_DES_CBC_SHA
 	SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA
 	SSL_DH_anon_EXPORT_WITH_RC4_40_MD5
 	SSL_DH_anon_WITH_3DES_EDE_CBC_SHA
 	SSL_DH_anon_WITH_DES_CBC_SHA
 	SSL_DH_anon_WITH_RC4_128_MD5
 	SSL_RSA_EXPORT_WITH_DES40_CBC_SHA
 	SSL_RSA_EXPORT_WITH_RC4_40_MD5
*	SSL_RSA_WITH_3DES_EDE_CBC_SHA
 	SSL_RSA_WITH_DES_CBC_SHA
 	SSL_RSA_WITH_NULL_MD5
 	SSL_RSA_WITH_NULL_SHA
*	SSL_RSA_WITH_RC4_128_MD5
*	SSL_RSA_WITH_RC4_128_SHA
*	TLS_DHE_DSS_WITH_AES_128_CBC_SHA
*	TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
*	TLS_DHE_DSS_WITH_AES_128_GCM_SHA256
*	TLS_DHE_RSA_WITH_AES_128_CBC_SHA
*	TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
*	TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
 	TLS_DH_anon_WITH_AES_128_CBC_SHA
 	TLS_DH_anon_WITH_AES_128_CBC_SHA256
 	TLS_DH_anon_WITH_AES_128_GCM_SHA256
*	TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA
*	TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
*	TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
*	TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
 	TLS_ECDHE_ECDSA_WITH_NULL_SHA
*	TLS_ECDHE_ECDSA_WITH_RC4_128_SHA
*	TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
*	TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
*	TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
*	TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
 	TLS_ECDHE_RSA_WITH_NULL_SHA
*	TLS_ECDHE_RSA_WITH_RC4_128_SHA
*	TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA
*	TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA
*	TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256
*	TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256
 	TLS_ECDH_ECDSA_WITH_NULL_SHA
*	TLS_ECDH_ECDSA_WITH_RC4_128_SHA
*	TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA
*	TLS_ECDH_RSA_WITH_AES_128_CBC_SHA
*	TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256
*	TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256
 	TLS_ECDH_RSA_WITH_NULL_SHA
*	TLS_ECDH_RSA_WITH_RC4_128_SHA
 	TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA
 	TLS_ECDH_anon_WITH_AES_128_CBC_SHA
 	TLS_ECDH_anon_WITH_NULL_SHA
 	TLS_ECDH_anon_WITH_RC4_128_SHA
*	TLS_EMPTY_RENEGOTIATION_INFO_SCSV
 	TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5
 	TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA
 	TLS_KRB5_EXPORT_WITH_RC4_40_MD5
 	TLS_KRB5_EXPORT_WITH_RC4_40_SHA
 	TLS_KRB5_WITH_3DES_EDE_CBC_MD5
 	TLS_KRB5_WITH_3DES_EDE_CBC_SHA
 	TLS_KRB5_WITH_DES_CBC_MD5
 	TLS_KRB5_WITH_DES_CBC_SHA
 	TLS_KRB5_WITH_RC4_128_MD5
 	TLS_KRB5_WITH_RC4_128_SHA
*	TLS_RSA_WITH_AES_128_CBC_SHA
*	TLS_RSA_WITH_AES_128_CBC_SHA256
*	TLS_RSA_WITH_AES_128_GCM_SHA256
 	TLS_RSA_WITH_NULL_SHA256
$
OpenJDKの問題だったようだ。
Oracleのjdk1.8.0_40なら
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
ができる。


mod_sslはTLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256なのに
tomcat7(OpenJDK1.8.0_31)はTLS_DHE_RSA_WITH_AES_128_CBC_SHAになってる。

Firefox38からアクセスしたときにapache httpdサーバのmod_sslのSSL接続の暗号化強度よりTomcat7のSSL接続の暗号化強度が弱い。


あ、でけた。
Java 7 JCE Unlimited Strengthて必要なんだ。
useServerCipherSuitesOrder="true" useCipherSuitesOrder="true"の設定も必要。

/etc/tomcat/server.xmlにHTTPSコネクターの設定。

    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               keystoreFile="/usr/share/tomcat/.keystore"
               keystorePass="hogehoge"
               URIEncoding="UTF-8"
               clientAuth="false"
               sslProtocol="TLS"
               useCipherSuitesOrder="true"
               ciphers="TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384,
TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384,
TLS_DHE_DSS_WITH_AES_256_GCM_SHA384,
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384,
TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,
TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384,
TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384,
TLS_RSA_WITH_AES_256_GCM_SHA384,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
TLS_RSA_WITH_AES_256_CBC_SHA256,
TLS_RSA_WITH_AES_128_CBC_SHA256,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
TLS_ECDHE_RSA_WITH_RC4_128_SHA,
TLS_RSA_WITH_AES_256_CBC_SHA,
TLS_RSA_WITH_AES_128_CBC_SHA,
SSL_RSA_WITH_RC4_128_SHA"
               />

useServerCipherSuitesOrder="true"
は間違いだったw。
useCipherSuitesOrder="true"
に訂正。

14-Jul-2016 06:05:15.244 SEVERE [main] org.apache.coyote.AbstractProtocol.init Failed to initialize end point associated with ProtocolHandler ["http-apr-8443"]
java.lang.Exception: Connector attribute SSLCertificateFile must be defined when using SSL with APR
at org.apache.tomcat.util.net.AprEndpoint.bind(AprEndpoint.java:511)

Tomcat SSL server.xml の設定メモ

×   <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
○   <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true"
OpenJDKだとTLS_DHE_RSA_WITH_AES_128_CBC_SHAになるので 256マニアのヒトは設定から外すのだとかw
               sslProtocols = "TLSv1.2"
               useCipherSuitesOrder="true"
               ciphers="TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384,
TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384,
TLS_DHE_DSS_WITH_AES_256_GCM_SHA384,
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384,
TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,
TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384,
TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384,
TLS_RSA_WITH_AES_256_GCM_SHA384,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
TLS_RSA_WITH_AES_256_CBC_SHA256,
TLS_RSA_WITH_AES_128_CBC_SHA256,
TLS_RSA_WITH_AES_256_CBC_SHA"

そもそも自分の使ってるブラウザが何を話せるのかを調べるのが先だな。
SSL/TLS Capabilities of Your Browser

Cipher Suites (in order of preference)
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (0xc02b) Forward Secrecy 128
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f) Forward Secrecy 128
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA (0xc00a) Forward Secrecy 256
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA (0xc009) Forward Secrecy 128
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (0xc013) Forward Secrecy 128
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (0xc014) Forward Secrecy 256
TLS_DHE_RSA_WITH_AES_128_CBC_SHA (0x33) Forward Secrecy 128
TLS_DHE_RSA_WITH_AES_256_CBC_SHA (0x39) Forward Secrecy 256
TLS_RSA_WITH_AES_128_CBC_SHA (0x2f) 128
TLS_RSA_WITH_AES_256_CBC_SHA (0x35) 256
TLS_RSA_WITH_3DES_EDE_CBC_SHA (0xa) 112
(1) When a browser supports SSL 2, its SSL 2-only suites are shown only on the very first connection to this site. To see the suites, close all browser windows, then open this exact page directly. Don't refresh.
あ。FF38て384ビットで話せないのか。 ふーん。じゃぁ256ビットの鍵長にデグレード。
候補は
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
TLS_DHE_RSA_WITH_AES_256_CBC_SHA

FF52をチェック。

Cipher Suites (in order of preference)
TLS_AES_128_GCM_SHA256 (0x1301) 128
TLS_CHACHA20_POLY1305_SHA256 (0x1303) 256
TLS_AES_256_GCM_SHA384 (0x1302) 256
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (0xc02b) Forward Secrecy 128
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f) Forward Secrecy 128
TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 (0xcca9) Forward Secrecy 256
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (0xcca8) Forward Secrecy 256
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 (0xc02c) Forward Secrecy 256
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (0xc030) Forward Secrecy 256
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA (0xc00a) Forward Secrecy 256
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA (0xc009) Forward Secrecy 128
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (0xc013) Forward Secrecy 128
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (0xc014) Forward Secrecy 256
TLS_RSA_WITH_AES_128_CBC_SHA (0x2f) 128
TLS_RSA_WITH_AES_256_CBC_SHA (0x35) 256
TLS_RSA_WITH_3DES_EDE_CBC_SHA (0xa) 112
(1) When a browser supports SSL 2, its SSL 2-only suites are shown only on the very first connection to this site. To see the suites, close all browser windows, then open this exact page directly. Don't refresh.
FF52(Firefox52.0a2)はSHA384で喋れるよーになったみたいだ。

で、keytoolで -keyalg RSA -sigalg SHA256withRSA にしたので
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHAで会話してるんだな。

/etc/httpd/conf.d/ssl.confで

SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
になってる時にどの暗号化方式が使われるのかをopensslのコマンドで確かめられる。
$ openssl ciphers -v 'HIGH:MEDIUM:!aNULL:!MD5'|grep "TLSv1.2"|grep ECDHE
ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(256) Mac=AEAD
ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(256) Mac=AEAD
ECDHE-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AES(256)  Mac=SHA384
ECDHE-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AES(256)  Mac=SHA384
ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(128) Mac=AEAD
ECDHE-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(128) Mac=AEAD
ECDHE-RSA-AES128-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AES(128)  Mac=SHA256
ECDHE-ECDSA-AES128-SHA256 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AES(128)  Mac=SHA256
$ 
ECDHEでSHA256でRSAなら
ECDHE-RSA-AES128-GCM-SHA256
しかなかったのか。

SSLHonorCipherOrder on
がなかったのが不味かったみたい。
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite HIGH:!aNULL:!MD5
SSLHonorCipherOrder on
だと
ECDHE-RSA-AES256-SHA SSLv3 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA1
になる。
ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(128) Mac=AEAD
とどっちがいいのかというと
ECDHE-RSA-AES128-GCM-SHA256なのきゃ?
でも、とりあえず鍵長256ビットを使ってみる。

この当たりの混乱はすべてプロパティ名の設定が
useServerCipherSuitesOrder="true"になってて
useCipherSuitesOrder="true"になってないことが原因だったw。

ブラウザでhttpdのmod_sslでもtomcatのSSLConnectorでも接続すると
java-1.8.0-openjdk-1.8.0.121-1.b14のTomcat7にFirefox52で接続すると TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384
になるはず。

投稿されたコメント:

コメント
コメントは無効になっています。