解決「伺服器的暫時 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:
- In a new tab, type or paste
about:config
in the address bar and press Enter. Click the button promising to be careful. - In the search box above the list, type or paste dhe and pause while the list is filtered.
- Double-click the
security.ssl3.dhe_rsa_aes_128_sha
preference to switch it from true to false (disable Firefox from using this cipher). - Double-click the
security.ssl3.dhe_rsa_aes_256_sha
preference to switch it from true to false (disable Firefox from using this cipher).