Nginx 中的前向保密 (CentOS6)
我正在嘗試使用 nginx 網路伺服器在 CentOS 中啟用正向保密。
我試過
的我已經閱讀了一些教程,似乎我們應該有 nginx,openssl 最新版本來啟用它。所以我從原始碼安裝了最新的openssl。
sudo wget http://www.openssl.org/source/openssl-1.0.1e.tar.gz sudo tar -xvzf openssl-1.0.1e.tar.gz cd openssl-1.0.1e sudo ./config --prefix=/usr/local sudo make sudo make install
現在 OpenSSL 支持橢圓曲線密碼 (ECDHE)。我也用 openssl s_server 測試了這個。它運作良好。
接下來,我用最新的替換了 Nginx。
sudo wget http://nginx.org/packages/centos/6/x86_64/RPMS/nginx-1.4.2-1.el6.ngx.x86_64.rpm sudo rpm -e nginx sudo rpm -ivh nginx-1.4.2-1.el6.ngx.x86_64.rpm
並按照此連結中的說明配置了 Nginx
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA256:EECDH+aRSA+RC4:EDH+aRSA:EECDH:RC4:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS;
http://baudehlo.wordpress.com/2013/06/24/setting-up-perfect-forward-secrecy-for-nginx-or-stud/
但是現在 Nginx 不支持 ECDHE 密碼。它支持 DHE 密碼。我嘗試在 nginx 中啟用 ECDHE 密碼仍然不起作用。我正在使用最新的網路瀏覽器(chrome 29,它支持這個密碼)
我錯過了什麼嗎?或者 CentOS 或 Nginx 有問題?我在某處讀到 CentOS 的 ECC 專利問題,這會導致問題嗎?
openssl
您是對的,由於專利問題,RedHat(以及因此在 CentOS 中)中的 ECC被禁用;有關更多詳細資訊,請參閱(例如)此 bugzilla 條目。請注意,任何時候任何人打開一個新的跟踪器進行比較時,它都會作為該跟踪器的副本關閉,所以不要被跟踪器的年齡所愚弄,認為這是一個失效的問題(旁注:儘管大多數 bugzilla 是壞消息,我確實喜歡 RH 的評論’請注意:“Ubuntu 做到了”從來都不是一個可行的法律論據。 ‘)。你已經正確地猜到了繞過這意味著編譯你自己的
openssl
,這很好。但是這樣做之後,您不能簡單地安裝打包的二進製文件並期望它們神奇地拾取您的新庫,因為它們不會。您需要使用 eg 重新編譯 openssl,
--prefix=/usr/local/openssl-custom
然後make install
將其編譯到該新位置,然後nginx
從原始碼編譯,注意告訴它編譯並連結到新庫(我不能為此給您一個標準的咒語,因為它因包裝而異,但-with-ssl=/usr/local/openssl-custom
有時可能是正確的)。如果您需要任何其他工具來使用
nginx
,並且其中任何一個都具有openssl
依賴項(現在,什麼沒有?),您可能還需要編譯這些工具。最後,請讓我勸阻你。工作量很大;編譯是最少的,然後您必須掌握所建構軟體包的所有新版本,並在它們發生更改時重新建構它們。 我不知道你為什麼決定需要前向保密,但我強烈懷疑你會因為包不更新檔而給自己帶來更多的安全問題,而不是通過啟用它來修復。
還要注意上面連結的 bugzilla 條目中的註釋 43 和 90;如果通過前向保密,您的意思是完美前向保密 (PFS),那麼啟用 PFS似乎不需要 ECC **。**或者只是等待,因為看起來我們從 RHEL6.5 (C6.5) 開始獲得 ECC。