Nginx提供另一个站点的SSL证书

viv*_*agr 10 ssl nginx ssl-certificate

我用Nginx服务两个站点.第一个站点(比如A)有SSL证书,第二个站点(比如说B)没有.在https上打开站点A并在http上打开B时工作正常.但是当我在https上访问站点B时,nginx提供SSL证书和站点A的内容与B域,这不应该发生.

站点A的Nginx配置如下.对于站点B,它只是Flask应用程序的反向代理.

server {
        listen 80;
        server_name siteA.com;
        return 301 https://$host$request_uri;
}

server {
        listen 443 ssl;
        server_name siteA.com;

        ssl_certificate /path/to/cert.cert
        ssl_certificate_key /path/to/cert_key.key;

        ssl_prefer_server_ciphers on;
        ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-RC4-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:RC4-SHA:AES256-GCM-SHA384:AES256-SHA256:CAMELLIA256-SHA:ECDHE-RSA-AES128-SHA:AES128-GCM-SHA256:AES128-SHA256:AES128-SHA:CAMELLIA128-SHA;

        ssl_session_cache   shared:SSL:10m;
        ssl_session_timeout 10m;
        keepalive_timeout   70;

        # and then the `location /` serving static files
}
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚这里有什么问题.

viv*_*agr 2

显然我需要一个站点 A 的专用 IP。

引用“每个 SSL 证书都需要专用 IP”到底是什么意思?

当使用 TLS 保护某些连接时,您通常使用证书来验证服务器(有时也验证客户端)。每个IP/端口有一台服务器,因此服务器选择要使用的证书通常没有问题。HTTPS 是例外——多个不同的域名可以引用一个 IP,并且客户端(通常是浏览器)针对不同的域名连接到同一台服务器。域名在请求中传递到服务器,该请求在 TLS 握手之后进行。这就是问题出现的地方 - Web 服务器不知道要提供哪个证书。为了解决这个问题,TLS 中添加了一个新的扩展,名为 SNI(服务器名称指示)。然而,并非所有客户都支持它。因此,一般来说,每个域的每个 IP/端口都有一个专用服务器是个好主意。换句话说,客户端可以使用 HTTPS 连接的每个域都应该有自己的 IP 地址(或不同的端口,但这并不常见)。

Nginx 正在侦听端口 443,当对站点 B 的请求通过 https 进行时,会发生 TLS 握手,并在提供内容之前提供站点 A 的证书。

  • 这是一个教程:https://www.digitalocean.com/community/articles/how-to-set-up-multiple-ssl-certificates-on-one-ip-with-nginx-on-ubuntu-12-04似乎依赖于 server_name 指令。 (2认同)