Nginx的子域名SSL证书

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

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

本质上,我想要一个server块应答*.example.com ,但基于子域加载适当的证书。 证书全部存储在/etc/letsencrypt/live/[subdomain].example.com/

我的两个笔记:

  • AFAIK(但是请不要把这看作是理所当然的),你不能在任何地方使用variables,包括ssl_certificate ,因为nginx把它当作一个文字string。

  • 但是(想当然的):自己创build证书签名请求 (使用openssl ),并将所有的域放入主题备用名称(SAN)字段中。 如果您使用官方Let's Encrypt客户端,请使用--csr选项将创build的Certificate Signing Request发送给他们。 他们将parsing该字段,validation域名,如果成功,您将获得一个签名证书,该证书对您提供的所有域名均有效。

    注意事项1:根据这篇文章,目前,让我们encryption限制Subject Alternative Name字段中的域数为100。 (不知道这是不是真的,我没有find“官方”的东西。)

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

你可以像sed一样使用Nginx外部的工具来创build模板来实现你想要的:

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

通过: nginx在ssl_certificatepath上使用$ server_name