nginx多个ssl配置

时间:2015-08-31 11:18:13

标签: ssl nginx https user-agent

我在nginx.conf中配置ssl如下,它工作正常:

    server {
        listen 8443 ssl;
        ssl_certificate /usr/local/nginx/security/test.crt;
        ssl_certificate_key /usr/local/nginx/security/test.key;
        location / {
        }
    }

但是上面配置的ssl证书不支持ie6,所以我应用了另一个组证书,但它将是一个灰色锁,而不是绿色锁。 所以我只想为ie6使用新的组证书,对于其他浏览器,我仍然想使用旧的。 我想如果有一些代码可以解决我的问题:

server {
    listen 8443 ssl;
    if ($http_user_agent ~ "MSIE 6.0" ) {
       ssl_certificate /usr/local/nginx/security/test_ie6.crt;
       ssl_certificate_key /usr/local/nginx/security/test_ie6.key;
    }else{
       ssl_certificate /usr/local/nginx/security/test.crt;
       ssl_certificate_key /usr/local/nginx/security/test.key;
    }
    location / {
    }
}

1 个答案:

答案 0 :(得分:0)

不可能以您想象的方式为不同的浏览器提供不同的证书。 您的尝试是基于用户代理检测浏览器版本,但此信息仅在成功进行TLS握手后才可用,即在证书已经发送之后。

但是,现代浏览器Server Name Indication指示他们想要连接哪个服务器,以防多个服务器位于同一IP地址后面。较早的浏览器如XP上的IE 8.0和IE 6.0都不支持此扩展。因此,您可以为具有特定server_name(server_name example.com)的部分内的特定主机名(SNI)配置证书,然后在默认部分(server_name _)中为该站点配置默认证书。支持SNI的浏览器将使用名称特定证书,而其他所有证书将回退到默认证书。