带有空域和通配符的nginx SSL

这是一个令人讨厌的问题,我希望有人能帮助我。

首先,我运行自己的CA,所以我正在做自签名的证书; 我可以用openssl来做任何我需要的东西。

我有一个域,example.com和一个运行nginx的networking服务器,我试图设置一个这样的情况,我redirect:

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

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

我的问题不在于让nginx做我需要的东西; 它可以重写或redirect。 目前,我有一个简单的(如果是邪恶的,我知道! 我的问题是SSL证书。

如果我为“example.com”生成一个正常的单域证书,则会在“www.example.com”中收到证书错误。 好的,我会为“* .example.com”制作一个通配符! 除了现在我得到一个裸露的域名证书错误。 这对我来说是有道理的,但是如果可能的话,我仍然想把它们合并成一个证书,一个nginx服务器块。 所以我尝试制作一个名为“DNS:example.com,DNS:*。example.com”的subjectAltName的CSR。 但是,这似乎也没有工作:裸露的域名作品和redirect,但后来一刷新,我得到一个奇怪的证书错误,说“证书只对example.com有效”,而在检查CN是“* .example.com”。

任何人都可以提供一些build议,如何解决这个问题,并尽可能简单地创build这套redirect?

是的,我知道我可以完全忽略https://example.com ,只能在www.example.com上听SSL,但我的完美主义者却不允许; 我希望本网站的所有内容对SSL都是完全不可知的,并且使用完全相同的方式,即使是最初的redirect也是如此。

编辑:nginxconfiguration:

 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; } } 

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

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

你可以在这里阅读关于用这个属性生成一个证书: https : //library.linode.com/security/ssl-certificates/subject-alternate-names

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