我正在尝试使用nginx webserver在CentOS中启用Forward保密function。
我曾经尝试过
我已经阅读了一些教程,似乎我们应该有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_servertesting了这个。 它运作良好。
接下来,我用最新的代码replace了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
并按照此链接中的描述configurationNginx
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专利问题,这是否导致问题?
在RedHat(因此在CentOS的) openssl ECC由于专利问题被禁用是正确的。 有关更多详细信息,请参阅(例如) 这个bugzilla条目 。 请注意,任何时候任何人打开一个新的追踪器compain,它是作为这个副本closures的,所以不要被追踪器的年龄愚弄,认为这是一个失败的问题(注意:尽pipe大多数bugzilla是坏消息,我喜欢RH的评论“ 请注意:”Ubuntu做到这一点“从来都不是一个可行的法律论据 。
你已经正确地预言到了,这将意味着编译你自己的openssl ,这是很好的。 但是这样做,你不能简单地安装打包的二进制文件,并期望他们神奇地拿起你的新库,因为他们不会。
你需要用--prefix=/usr/local/openssl-custom重新编译openssl,然后make install它make install到新的位置,然后从源代码编译nginx ,注意告诉它编译和链接新的库(我不能给你一个标准的咒语,因为它随着包的不同而不同,但是-with-ssl=/usr/local/openssl-custom有时可能是正确的)。
如果你需要其他的工具来处理nginx ,而且其中的任何一个都有openssl依赖关系(而且这些日子什么也没做?),你也可能需要编译这些工具。
请让我不要灰心。 这是很多工作; 编译是最less的,那么你必须保持在你所build立的软件包的所有新版本之上,并且当它们改变时重build它们。 我不知道为什么你决定需要向前保密,但是我强烈怀疑你将会导致更多的安全问题。
还要注意上面链接的bugzilla条目中的评论43和90; 如果通过Forward Secrecy,则意味着完全正向保密(PFS),然后启用PFS似乎不需要具有ECC。 或者等一下,因为看起来我们正在从RHEL6.5(C6.5)获得ECC 。
作为一个tl;博士MadHatterbuild议:
有一个选项可以让nginx运行在现代的ssl上,如果你的openssl有点过时:
configurationnginx使用你下载的openssl-sources:
./configure ... --with-openssl=/path/to/openssl_source/ ...
那么你将有一个更新的nginx与现代的ssl,静态构build,不会干扰你的分发包中的openssl包。
有关nginx + ssl的更多信息,请参阅本指南中的nginx和ssl
我用
yum --enablerepo=axivo install nginx
和
yum --enablerepo=axivo update openssl
这里的Nginx和OpenSSL的说明。
这个安装(在这个答案的时候)Nginx 1.4.4和OpenSSL 1.0.1e
Apache(httpd)给了我一些问题,我不得不重新编译,但其他的一切都很好,这个设置。
我也花了很长时间来完善这个密码的偏好(对我来说) – 受Google的启发:
ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-RC4-SHA:ECDHE-RSA-AES128-SHA:AES128-GCM-SHA256:RC4-SHA:RC4-MD5:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:AES256-GCM-SHA384:AES256-SHA256:AES256-SHA:ECDHE-RSA-AES128-SHA:AES128-SHA256:AES128-SHA;
需要您自担风险使用它。
你可以使用ssllabs.com来testing。