2015-06-08 35 views
6

我正在通過SSL連接到我的數據庫Google Cloud SQL。我使用codeigniter 3.0來這樣做,儘管mysqli驅動程序有點修改以允許此功能。SSL操作失敗,代碼1:dh鍵太小

它已經運行好幾個月了。然而,它只是開始返回此警告:

Message: mysqli::real_connect(): SSL operation failed with code 1. OpenSSL Error messages: error:14082174:SSL routines:SSL3_CHECK_CERT_AND_ALGORITHM:dh key too small 

我假設DH Key is too small是主要的問題,但我不知道這意味着什麼。我已經使用Diffie-Hellman密鑰交換,以及「密鑰太小」的消息,但我沒有太多運氣。

這是服務器上的密鑰被篡改的標誌嗎?我已經檢查過他們上次修改的日期 - 沒有異常近期訪問。

這可能是我的服務器做了一些升級到PHP或他們的服務器配置,這可能導致這種破壞,但我想檢查並確保它不是別的。

感謝您對此主題的任何見解/可讀材料。

+2

嘗試更改httpd.conf文件中的SSLCipherSuite – codex

回答

10
... error:14082174:SSL routines:SSL3_CHECK_CERT_AND_ALGORITHM:dh key too small 

錯誤號碼,你感興趣的是,OpenSSL的錯誤0x14082174。

當啓用出口等級密碼時,通常會看到SSL3_CHECK_CERT_AND_ALGORITHM。由於Logjam(見下文),它可能再次出現在非出口等級談判中。


我假設DH密鑰太小是主要的問題,但我不知道這意味着什麼。我已經使用Diffie-Hellman密鑰交換,以及「密鑰太小」的消息,但我沒有太多運氣。

這是由於文件Imperfect Forward Secrecy: How Diffie-Hellman Fails in Practice最近的Logjam attack造成的。您應使用2048位的Diffie-Hellman組或更大的組。您應該使用512位或1024位迪菲赫爾曼組。

首先要檢查的是您的密碼列表字符串。它應該類似於:

"HIGH:!aNULL:!MD5:!RC4" 

它將避免出口等級密碼,並使用現代密碼。但是您還需要確保您的DH回調不使用弱/小字段。爲此,您需要檢查服務器配置。


有些人正在用kRSA「解決」這個問題。 kRSA是一個關鍵運輸方案,而不是一個關鍵協議方案。 RSA密鑰傳輸方案不提供前向保密,通常不鼓勵使用。事實上,它將從TLS 1.3中刪除。

我只能說「通常不鼓勵」,因爲它取決於受保護的數據。如果你有SSL/TLS來防止公衆可用文件的下載,那麼它可能可以使用。如果您的網站有登錄名,那麼使用它可能有點冒險,因爲密碼是祕密數據(與公開下載的文件不同)。

爲了避免密鑰傳輸和傳遞這些Qualsys SSL Labs測試的Web服務器配置和前向安全性,使用方法:

"HIGH:!aNULL:!kRSA:!MD5:!RC4" 

在Apache配置文件,它看起來像這樣:

# cat /etc/httpd/conf.d/ssl.conf | grep SSLCipherSuite 
# SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5 
SSLCipherSuite HIGH:!aNULL:!kRSA:!MD5:!RC4 

我似乎記得wget在論文發表前很長一段時間拒絕了小團體。它可能會爲您的網站做一個好的測試案例。

還有一個改進sslscan,它測試了很多東西。這也可能成爲一個很好的質量保證工具。

+0

感謝您的洞察。非常感謝。 – markbratanov

相關問題