Tomcat サーバーにウェブアクセスできない
古い Tomcat でサーバーを運用していたのですが、"サーバーは短い一時 Diffie-Hellman 公開鍵を使用しています" あるいは "ERR_SSL_WEAK_SERVER_EPHEMERAL_DH_KEY" というエラーメッセージが出てアクセスできない問題に直面したのでその解決方法を記載します。Diffie-Hellman 公開鍵問題について
Chrome や Firefox から Tomcat サーバーにウェブアクセスすると、以下のようなメッセージが表示されてアクセスできなくなっていることに気付き色々と調査しました。サーバーは短い一時 Diffie-Hellman 公開鍵を使用しています ERR_SSL_WEAK_SERVER_EPHEMERAL_DH_KEY
Diffie-Hellman 公開鍵には脆弱性があり、安全ではないため各主要なブラウザはその公開鍵を利用しているウェブサイトにはアクセスさせないようにしています。
Google Chrome ヘルプには次のように記載されています。
「サーバーは短い一時 Diffie-Hellman 公開鍵を使用しています」、「ERR_SSL_WEAK_EPHEMERAL_DH_KEY」
このエラーは、古いセキュリティ コードを使用しているウェブサイトにアクセスしようとした場合に表示されます。Chrome では、こうしたサイトへの接続をブロックしてユーザーのプライバシーを保護しています。
このウェブサイトを所有している場合は、サーバーを ECDHE 対応にして、DHE を無効にしてみてください。ECDHE を使用できない場合は、DHE 暗号スイートをすべて無効にして、単純な RSA を使用する方法もあります。
Tomcat 側での対策
この問題を回避するには、以下の設定を Tomcat の server.xml に追記することで回避可能です。 つまり Diffie-Hellman 公開鍵よりもセキュアな異なる公開鍵を使うように指示してあげるわけですね。sslEnabledProtocols="TLSv1,TLSv1.1,TLSv1.2" 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_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"
実際には server.xml ファイルに次のように設定することになります。
<Service name="Catalina"> <Connector port="2000" maxThreads="200" acceptCount="100" minSpareThreads="25" maxSpareThreads="50" compression="on" URIEncoding="Shift_JIS" keystorePass="XYZ" keystoreFile="/opt/www/.keystore" enableLookups="true" connectionTimeout="60000" scheme="https" secure="true" sslProtocol="TLS" sslEnabledProtocols="TLSv1,TLSv1.1,TLSv1.2" 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_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" /> .....
この設定を登録して Tomcat を再起動すれば Chrome や Firefox ブラウザからアクセスできるようになります。