如何在不触发浏览器SSL检查的情况下重定向www流量?

时间:2015-12-08 03:50:33

标签: google-chrome redirect ssl nginx

我拥有example.com的有效证书。如果用户在http://example.com访问我的网站,他们会被重定向到https://example.com,一切都很好。如果他们去https://example.com,一切都很好。如果他们甚至转到http://www.example.com,他们会被重定向到https://example.com,一切都很好。

但是,如果他们转到https://www.example.com,Chrome会在我重定向并告诉用户不信任此网站之前触发其SSL警告。我在Safari或Firefox中没有这个问题。

这是我的nginx配置。我做错了什么?

```

# Configuration for redirecting non-ssl to ssl;                                                                                                                                                         

server {
    listen *:80;
    listen [::]:80;
    server_name example.com;
    return 301 https://example.com$request_uri;
}       

# Configuration for redirecting www to non-www; 

server {    
    server_name www.example.com;
    ssl_certificate ssl/ssl_cert.crt;
    ssl_certificate_key ssl/ssl_key.key;
    listen *:80;
    listen *:443 ssl spdy;    
    listen [::]:80 ipv6only=on;
    listen [::]:443 ssl spdy ipv6only=on;

    return 301 https://example.com$request_uri;
} 

server {
    listen *:443 ssl spdy;   
    listen [::]:443 ssl spdy;
    ssl_certificate ssl/ssl_cert.crt;
    ssl_certificate_key ssl/ssl_key.key;
    server_name example.com;
}

```

编辑:我发现这是一个有问题的配置,因为第二个块将查看证书。使用从“example.com”而不是“www.example.com”读取的证书来设置它的正确方法是什么?

1 个答案:

答案 0 :(得分:5)

如果您的证书仅适用于example.com而不适用于www.example.com,则无论您是否只想重定向,任何对www.example.com的访问都会触发证书警告。重定向在HTTP级别完成,在它与HTTP通信之前,它首先进行SSL握手(这会触发问题),因为HTTPS只是SSL内部的HTTP。

在你问之前,使用DNS(如CNAME)的技巧也无济于事,因为浏览器会将证书与URL中的名称进行比较,而不是与可能的DNS别名进行比较。没有办法获得合适的证书。