Nginx (CentOS6) 中的前向保密

Ani*_*nil 4 ssl nginx openssl 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
Run Code Online (Sandbox Code Playgroud)

现在 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
Run Code Online (Sandbox Code Playgroud)

并按照此链接中的描述配置 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;
Run Code Online (Sandbox Code Playgroud)

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 有问题?我在某处读到 ECC 专利与 CentOS 存在问题,这会导致问题吗?

Mad*_*ter 5

openssl由于专利问题,RedHat(以及因此在 CentOS 中)中的 ECC被禁用是正确的;有关更多详细信息,请参阅(例如)此 bugzilla 条目。请注意任何时候任何人打开一个新的跟踪器来compain,它是作为这个的副本关闭的,所以不要被跟踪器的年龄所迷惑,认为这是一个已失效的问题(旁注:尽管大部分 bugzilla 是坏消息,我确实喜欢 RH 的评论'请注意:“Ubuntu 做到了”从来都不是一个可行的法律论据。 ')。

你已经正确地推测出轮回意味着编译你自己的openssl,这很好。但是这样做之后,您不能简单地安装打包的二进制文件并期望它们神奇地选择您的新库,因为它们不会。

您需要使用 eg 重新编译 openssl,--prefix=/usr/local/openssl-custom然后将make install其编译到该新位置,然后nginx从源代码编译,注意告诉它编译并链接到新库(我无法为此提供标准咒语,因为它因包装而异,但-with-ssl=/usr/local/openssl-custom有时可能是正确的)。

如果您需要任何其他工具来使用nginx,并且其中任何一个都具有openssl依赖项(如今,什么没有?),您可能还需要编译它们。

请让我以劝阻您不要这样做作为结束。这是很多工作;编译是其中最少的,然后您必须保持在您构建的包的所有新版本之上,并在它们发生变化时重新构建它们。 我不知道您为什么决定需要 Forward Secrecy,但我强烈怀疑您会因软件包过时而导致的安全问题比启用它所修复的问题更多。

还要注意上面链接的 bugzilla 条目中的评论 43 和 90;如果向前保密,你的意思是完全正向保密(PFS),然后启用PFS并没有似乎需要有ECC。或者等一下,因为看起来我们从 RHEL6.5 (C6.5) 开始获得 ECC