我在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 / {
}
}
答案 0 :(得分:0)
不可能以您想象的方式为不同的浏览器提供不同的证书。 您的尝试是基于用户代理检测浏览器版本,但此信息仅在成功进行TLS握手后才可用,即在证书已经发送之后。
但是,现代浏览器Server Name Indication指示他们想要连接哪个服务器,以防多个服务器位于同一IP地址后面。较早的浏览器如XP上的IE 8.0和IE 6.0都不支持此扩展。因此,您可以为具有特定server_name(server_name example.com
)的部分内的特定主机名(SNI)配置证书,然后在默认部分(server_name _
)中为该站点配置默认证书。支持SNI的浏览器将使用名称特定证书,而其他所有证书将回退到默认证书。