我已经在域实例上成功安装了 Let's Encrypt SSL 证书(在 Ubuntu 14.4 上),但我现在想在同一个域的另一个虚拟实例上安装相同的证书。
问题:对于同一个域的多个虚拟实例,我应该只是从初始初始复制证书(使用 Let's Encrypt 工具),还是有其他更好的方法?
我想您不能向 Let's Encrypt 查询新证书,否则它将使第一个证书无效。
我目前正在共享有效的证书。
我已经在域实例上成功安装了 Let's Encrypt SSL 证书(在 Ubuntu 14.4 上),但我现在想在同一个域的另一个虚拟实例上安装相同的证书。
问题:对于同一个域的多个虚拟实例,我应该只是从初始初始复制证书(使用 Let's Encrypt 工具),还是有其他更好的方法?
我想您不能向 Let's Encrypt 查询新证书,否则它将使第一个证书无效。
我目前正在共享有效的证书。
是的,这是可能的。至少有两种选择:
certbot
以手动模式运行
./certbot-auto certonly --manual -d example.com
在这种情况下,certbot 需要从 提供随机文件.well-known/acme-challenge/
,例如:
http://example.com/.well-known/acme-challenge/-Y5pUBNKdx5GKSloP3RifHzUW3NT9xt1UAloNkHz7wc
现在您可以将质询文件分发到您的所有服务器或创建从您的所有站点到单个质询服务器的重写:
rewrite ^/.well-known/acme-challenge/(.*)$ http://acme.example.com/$1 redirect;
acme.example.com
应该从单个服务器提供,root 指向/tmp/certbot/public_html/
(或存储挑战文件的任何位置)。
查看certbot 手册中的钩子,以便编写此过程的脚本。
使用 DNS 质询。在这种情况下,系统会要求您将TXT
记录添加到您的 DNS 中,用于example.com
域:
_acme-challenge.example.com. 300 IN TXT "gfj9Xq...Rg85nM"
同样,您可以使用 hooks --manual-auth-hook
自动执行此操作,--manual-cleanup-hook
.
从对 SSL/TLS 证书的共同理解的角度来看,我发现这个问题非常有趣。我个人认为在多台计算机或虚拟实例上共享相同的 SSL/TLS 证书没有一般问题。唯一的问题可能仅存在于证书的某些属性中,例如证书的主题备用名称(DNS 名称)(我的意思是选项,如 )。
rfc2818的第3.1节(服务器身份):
如果客户端有关于服务器预期身份的外部信息,则可以省略主机名检查。(例如,客户端可能连接到地址和主机名是动态的但客户端知道服务器将提供的证书的机器。)
...
如果存在 dNSName 类型的 subjectAltName 扩展,则必须将其用作身份。否则,必须使用证书主题字段中的(最具体的)通用名称字段。尽管使用通用名称是现有的做法,但它已被弃用,并且鼓励证书颁发机构使用 dNSName 代替。
唯一的问题是 Let's Encrypt 似乎还不支持通配符证书(参见常见问题解答)。我不确定限制是否仍然存在,并且您真的无法使用主题备用名称 (``) 创建 Let's Encrypt,例如 DNS Name=www.yourdomain.com 和 DNS Name=*.yourdomain.com。因此,您问题的确切答案可能取决于证书属性。
如果您为两台服务器使用相同的证书,则在使用 TLS 的会话缓存时可能会遇到一些额外的问题,这会提高 TLS 的性能,并且客户端和服务器都可以使用相同的 Session ID,从而提高 TLS 的性能. 您应该描述您使用的确切场景,以便能够准确考虑您是否可能在 Session ID 中遇到一些问题。