我正在尝试设置一个主机名来演示一个糟糕的SSL配置,我遇到了一些问题.我可以指定一些不好的密码套件,但是Nginx似乎忽略了协议选择.
server {
listen 443 spdy ssl;
keepalive_timeout 70;
server_name example.co.uk;
client_max_body_size 10M;
ssl_certificate /path/to/ssl.crt;
ssl_certificate_key /path/to/ssl.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
...
}
server {
listen 443 spdy ssl;
keepalive_timeout 70;
server_name weak.example.co.uk;
client_max_body_size 10M;
ssl_certificate /path/to/weakssl.crt;
ssl_certificate_key /path/to/weakssl.key;
ssl_protocols SSLv3;
...
}
Nginx可以使用我指定的不同密码套件,但似乎使用来自第一个服务器块的协议,以便weak.example.co.uk具有TLSv1 / 1.1 / 1.2且不支持SSLv3.
是否可以为每个服务器块指定不同的协议?
最佳答案
>使用Nginx -t检查配置是否已静态验证
>检查配置是否通过监视主级别定义的错误日志动态验证,同时发出重新加载(服务Nginx重新加载或kill -SIGHUP< nginx主PID>)
>在每个服务器中创建一个测试位置(见下文)
>确保您的Nginx是使用SNI扩展构建的(如果使用预先构建的软件包,通常是的)
>确保正在使用正确的服务器:如果通过SNI选择域名失败或SNI不可用,Nginx将回退到默认服务器以提供内容.除非明确指定,否则默认服务器是在配置文件中找到的第一个服务器.
>确保清理浏览器缓存(并且服务器和浏览器之间的任何缓存都会被更新/清除)
>检查配置是否通过监视主级别定义的错误日志动态验证,同时发出重新加载(服务Nginx重新加载或kill -SIGHUP< nginx主PID>)
>在每个服务器中创建一个测试位置(见下文)
>确保您的Nginx是使用SNI扩展构建的(如果使用预先构建的软件包,通常是的)
>确保正在使用正确的服务器:如果通过SNI选择域名失败或SNI不可用,Nginx将回退到默认服务器以提供内容.除非明确指定,否则默认服务器是在配置文件中找到的第一个服务器.
>确保清理浏览器缓存(并且服务器和浏览器之间的任何缓存都会被更新/清除)
如果要提供错误的证书(没有SNI或服务器选择错误),您通常会收到证书警告,因为请求的域名与证书的域名不匹配.
这将显示当前连接使用的协议:
location /SSLProtocol {
return 200 $ssl_protocol;
}