ZZr*_*nZZ 7 ssl https debian openssl nginx
我使用两个不同的证书为两个TLS虚拟主机'example.one'和'example.two'配置了Nginx.
我需要为第一个设置TLS1.0 +,为第二个设置TLS1.2.但是,第二个(example.two)配置忽略ssl_protocols指令并从第一个服务器指令获取ssl_procolols.
因此,两个服务器指令都使用第一个配置的ssl_protocols指令.
server {
listen 443 default_server ssl spdy;
server_name example.one;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_certificate /certs/cert-for-example.one.pem;
ssl_certificate_key /certs/privkey-for-example.one.pem;
# another ssl_* directives ...
}
server {
listen 443 ssl spdy;
server_name example.two;
ssl_protocols TLSv1.2;
ssl_certificate /certs/cert-for-example.two.pem;
ssl_certificate_key /certs/privkey-for-example.two.pem;
# another ssl_* directives ...
}
Run Code Online (Sandbox Code Playgroud)
我不想使用SSL3,因此TLS SNI应该可以正常工作.而且我不关心没有TLS SNI支持的客户.
只有相关的信息,我找到了.它说,Openssl负责.
难道我做错了什么 ?或者有解决方法吗?(除了服务器指令的单独IP地址,但我不想回到石器时代)
我在Debian Wheezy上使用Nginx/1.6.2,OpenSSL 1.0.1e.
这就是 ssl 的工作原理。SSL 首先创建连接,然后执行 SNI。Nginx 将选择一项 ssl 设置(例如在默认服务器配置中)来创建 ssl 连接。如果该配置未指定某些 ssl 协议,则根本不会使用该协议。
所以基本上“每服务器 ssl 协议”不会像看起来那样工作。
您可以尝试在默认服务器配置中指定 ssl 协议的联合集,并在每个服务器配置中禁用其中一些协议。我尝试了这个并且成功了。但我并没有测试所有可能的情况。
您可以在这里看到讨论:http://mailman.nginx.org/pipermail/nginx/2014-November/045733.html
小智 5
作为一种解决方法,可以使用ssl_ciphers指令来限制 TLS 协议版本。提供 TLSv1.2 特定的密码套件将有效防止较低 TLS 版本的握手。所以,对于上面的例子,
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256';
Run Code Online (Sandbox Code Playgroud)
反而ssl_protocols TLSv1.2;会奏效。
| 归档时间: |
|
| 查看次数: |
3455 次 |
| 最近记录: |