Nginx 子域名 SSL 证书

Nginx 子域名 SSL 证书

我有一个网站需要回答任意数量的任意子域,例如client1.example.comclient2.example.com等等。一切都在 SSL 后面。

我真的很想使用 Let's Encrypt,当然,这意味着没有通配符证书。有没有办法创建一个server { ... }加载适当目录的单个块,或者我是否需要为每个客户端子域进行单独的配置?

本质上,我想要一个server块来响应*.example.com,但根据子域加载适当的证书。证书都存储在 中/etc/letsencrypt/live/[subdomain].example.com/

答案1

我有两点看法:

  • 据我所知(但请不要认为这是理所当然的),您不能在任何地方使用变量,包括ssl_certificate,因为nginx将其视为文字字符串。

  • 但(跳出思维定势):创造证书签名请求自己动手(使用openssl),并将所有域名放入主题备用名称 (SAN)字段。如果您使用的是官方 Let's Encrypt 客户端,请利用选项--csr将您创建的内容发送Certificate Signing Request给他们。他们将解析该字段,验证域,如果成功,您将获得签名的证书对您提供的所有域均有效。

    注意事项 1:目前,Let's Encrypt 限制字段中的域名数量Subject Alternative Name为 100 个,根据帖子。(不确定这是否仍然正确,我找不到“官方”的东西。)

    注意事项 2:证书是公开的,因此任何检查您的证书的人都可以看到此证书有效的所有域。这是否可以接受取决于您的用例、环境等。

答案2

您可以使用 Nginx 外部的工具(如 sed 和 make)来创建模板来实现您想要的效果:

http://nginx.org/en/docs/faq/variables_in_config.html

通过:nginx 在 ssl_certificate 路径上使用 $server_name

相关内容