带有裸域名和通配符的 nginx SSL

带有裸域名和通配符的 nginx SSL

这是一个令人恼火的问题,我希望有人能帮助我解决。

首先,我运行自己的 CA,因此我正在做自签名证书;我可以使用 openssl 对它们做任何我需要的事情。

我有一个域名 example.com 和一个运行 nginx 的网络服务器,我正在尝试设置一种情况以便重定向:

http://example.com -> http://www.example.com 

httpS://example.com -> httpS://www.example.com

我的问题不是让 nginx 在那里做我需要的事情;它确实会做,无论是通过重写还是重定向。目前,我有一个带有 if 重写的单个服务器块,以简化操作(是的,我知道 if 是邪恶的!)。我的问题是 SSL 证书。

如果我为“example.com”生成一个普通的单域证书,我会收到“www.example.com”的证书错误。好的,所以我将为“*.example.com”创建一个通配符!但现在我收到了裸域的证书错误。这对我来说很合理,但如果可能的话,我仍然希望将它们合并为一个证书和一个 nginx 服务器块。因此,我尝试制作一个带有 subjectAltName 的 CSR,其值为“DNS:example.com,DNS:*.example.com”。但这似乎也不起作用:裸域可以工作并重定向,但一旦我刷新,我就会收到一个奇怪的证书错误,提示“该证书仅对 example.com 有效”,而经检查,CN 是针对“*.example.com”的。

有人可以提供一些建议,如何解决这个问题,并尽可能简单地创建这套完整的重定向吗?

是的,我知道我可以忽略https://example.com总共只监听 www.example.com 上的 SSL,但是我内心的完美主义者不允许这样做;我希望这个网站的所有内容都与 SSL 完全无关,无论有没有 SSL 都能以完全相同的方式工作,即使是这个初始重定向!

编辑:nginx 配置:

server {
    listen                          80;
    listen                          [::]:80;
    listen                          443 ssl;
    listen                          [::]:443 ssl;
    root                            /var/www/example.com;
    index                           index.html index.htm;
    server_name                     www.example.com example.com;

    ssl_certificate                 /etc/ssl/sites/example.com.crt;
    ssl_certificate_key             /etc/ssl/sites/example.com.key;
    ssl_session_timeout             5m;
    ssl_protocols                   SSLv3 TLSv1;
    ssl_ciphers                     ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP;
    ssl_prefer_server_ciphers       on;

    if ($http_host != "www*") {
             rewrite ^ $scheme://www.$http_host$request_uri permanent;
    }

    location / {
            try_files $uri $uri/ /index.html;
    }
}

答案1

您正在寻找的 X.509 功能称为主题备用名称(或 SAN)。

你可以在这里读更多关于它的内容:http://en.wikipedia.org/wiki/SubjectAltName

您可以在此处阅读有关使用此属性生成证书的信息:https://library.linode.com/security/ssl-certificates/subject-alternate-names

以下是 nginx 和 SAN 证书的配置指南:http://blog.simplytestable.com/using-a-multiple-domain-ucc-secure-certificate-with-nginx/

相关内容