解決「伺服器的暫時 Diffie-Hellman 公開金鑰不足」

今日打開 Chrome 瀏覽器(版本 45.0.2454.85 m)瀏覽公司內部資訊系統,發現有很多 HTTPs 網站都出現「伺服器的暫時 Diffie-Hellman 公開金鑰不足 (ERR_SSL_WEAK_SERVER_EPHEMERAL_DH_KEY)」的警告,而且 Chrome 為了確保連線通訊的安全性,強制不允許存取這些不安全的網站。

 

 

  無獨有偶,本人開發的一個小系統網站竟然也中獎了,被 Chrome 判定不安全,而無法存取。還好,網路上很容易就找到相關資訊,花了幾分鐘就把這資安問題解決了。解決方法非常簡單,以 Tomcat 6.0 版本為例,只需修改/conf/server.xml 檔案,將 ciphers 設定中所有 DHE 字眼的演算法全部刪除即可。

 

  以下面的設定為例,把紅色的部份刪除、存檔,再重啟 Tomcat 即可。

 

<Connector 
protocol="org.apache.coyote.http11.Http11NioProtocol" port="443" …(省略)… 

ciphers="…(省略)…,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_DSS_WITH_AES_128_CBC_SHA,SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA,SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA" />

 

#而我是在開NSS v8.00 b8535 182b版的USB key安裝系統中的Dell OpenManager遇到此問題,找到系統中/opt/dell/srvadmin/lib64/openmanage/apache-tomcat/conf/server.xml 按上面描述修改後,重開機即可或/etc/init.d/dsm_om_connsvc restart。

​#在NSS v7.80中也遇到類似問題,但NSS v7.80 USB key所安裝的是Tomcat 7,沒有特別注明用那些ciphers,所以解決辦法是自己加入可用的ciphers如下:

For me it worked after adding a list of allowed ciphers to the Tomcat configuration in conf/server.xml to disable the weak Diffie-Hellman ciphers:

vi $TOMCAT_HOME/conf/server.xml

    <Connector
        ...
        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"
        ...

It works with Google Chrome ver.44 and Thanks to Jason Scroggins for suggesting:

  1. In a new tab, type or paste about:config in the address bar and press Enter. Click the button promising to be careful.
  2. In the search box above the list, type or paste dhe and pause while the list is filtered.
  3. Double-click the security.ssl3.dhe_rsa_aes_128_sha preference to switch it from true to false (disable Firefox from using this cipher).
  4. Double-click the security.ssl3.dhe_rsa_aes_256_sha preference to switch it from true to false (disable Firefox from using this cipher).