ChromeとFirefoxの最新バージョンでは POODLEの脆弱性 が原因でデフォルトでSSLv3.0が無効になっています。これにより、サイトを開こうとすると次のエラーが発生します私はセットアップしました(そしてそれはうまくいきました):
Chromeの場合:
A secure connection cannot be established because this site uses an unsupported protocol.
Error code: ERR_SSL_VERSION_OR_CIPHER_MISMATCH
Firefoxの場合:
Cannot communicate securely with peer: no common encryption algorithm(s). (Error code: ssl_error_no_cypher_overlap)
私はこの問題を調査しました Chromeを使用 、 Firefox 、 Tomcat および Tomcatのドキュメント 。問題は理解しましたが、安全なTLS暗号とプロトコルのみを使用するようにTomcat 7を構成するためのドキュメントが見つかりません。新しい証明書/キーペアを作成する必要があるのか、server.xmlを変更する必要があるのか、Tomcatの新しいバージョンをインストールする必要があるのか、または何なのかわかりません。これらのブラウザーで「受け入れられる」と見なされている暗号/プロトコルのバージョンはわかりません。誰かが私にドキュメントまたはこれの設定例を教えてもらえますか?
Tomcat 7を搭載したUbuntu 14.04でOpenJDK 1.7を使用しています。
これが私の証明書ファイルです(編集済み):
Keystore type: JKS
Keystore provider: Sun
Your keystore contains 1 entry
Alias name: something
Creation date: May 4, 2013
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=something, OU=something, O=something, L=something, ST=something, C=something
Issuer: CN=something, OU=something, O=something, L=something, ST=something, C=something
Serial number: ...
Valid from: Sat May 04 17:28:21 MST 2013 until: Tue May 02 17:28:21 MST 2023
Certificate fingerprints:
MD5: ...
SHA1: ...
SHA256: ...
Signature algorithm name: SHA1withDSA
Version: 3
これが私のserver.xml
HTTPSサポートのエントリ:
<Connector port="8484" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
keystoreFile="/path/mykeystore"
keystorePass="password"
clientAuth="false"
sslProtocol="TLS"
sslEnabledProtocols="TLS" />
Javaバージョンに応じて、TLSv1&ffを含めるにはsslEnabledProtocols
を拡張する必要があります。
ciphers
element of the connector で暗号を指定します。
証明書とは関係ありません。
Tomcat 8.0.23とJava 8ビルド1.8.0_45を使用した新規インストールで問題が発生しました。--keyalg RSAの指定に失敗したことが最終的にわかりましたJava keytoolユーティリティを使用して自己署名証明書を作成したときのオプション。古いキーストアを削除し、新しいキーストアを作成するときにそのオプションを含めるようにしました。これで問題が解決しました。
完全なTomcat server.xmlコネクター要素:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" keystoreFile="conf/keystore.jks" keystorePass="changeit"
ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_RC4_128_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,SSL_RSA_WITH_RC4_128_SHA" />
これは私にとってはうまくいきます。私はJRE1.7とTomcat7サーバーも使用しています。ただし、sslEnabledProtocols
の設定は機能しません。ここでは、代わりにsslProtocol = "TLS"を使用し、暗号化アルゴリズムを明示的に指定します。