集成指南

最后更新: | 所有文档

如果您是托管服务提供商或集成Let’s Encrypt的大型网站,或者您正在为Let’s Encrypt编写客户端软件,则本文档包含有用的建议。

做好更改准备

Let’s Encrypt和Web PKI都将随着时间的推移而不断发展。 您应该确保能够轻松更新使用Let’s Encrypt的所有服务。 如果您还要部署依赖于Let’s Encrypt的加密证书的客户端,请特别确保这些客户端定期收到更新。 将来,这些事情可能会发生变化:

我们将始终尽可能提前通知此类更改,但如果在某些组件中发现严重的安全漏洞,我们可能需要在短期内或立即进行更改。 特别是对于中级证书改变,你不应该将中级证书写入代码,而应该使用Link: rel="up"来自ACME协议的标头(Header),因为中级证书可能会改变。

同样,我们可能会在更新时更改服务条款(ToS)的链接。 避免硬编码ToS URL,而是依赖Link:rel =“terms-of-service”标头(Header)确定要使用的服务条款链接。

您还需要一种方法来使您的TLS配置保持最新以免在您使用的密码套件或协议版本上发现了新的攻击。

获取更新

要接收有关上述重要更改的小批量更新,请订阅我们的API公告分类。这对客户端开发人员和托管提供商都很有用。

有关维护和停机的更高容量更新,请访问我们的状态页面并点击右上方的订阅。 这对托管服务提供商最有用。

此外,请确保为ACME帐户使用有效的电子邮件地址。 我们将使用该电子邮件向您发送过期通知,并就您帐户特有的任何问题进行沟通。

谁是订阅者

我们的CPS和订户协议表示订阅者是拥有证书私钥的人。 对于托管服务提供商而言,订阅者是提供商,而不是提供商的客户。 如果您正在编写允许自我部署的软件,那订阅者就是部署软件的人。

创建帐户(即注册)时提供的联系电子邮件应发送给订阅者。 我们将向该地址发送电子邮件以警告即将到期的证书,并通知我们隐私政策的更改。如果您是托管服务提供商,那些通知应该发送给您而不是客户。 理想情况下,设置邮件列表或别名,以便在您休假时其他人可以响应通知。

这样做的结果是,如果您是托管服务提供商,您无需向我们发送客户的电子邮件地址或让他们同意我们的订户协议。 您只需为您控制的域颁发证书并使用。

一个账户还是多个?

在ACME中,可以创建一个帐户并将其用于所有授权和颁发,或者为每个客户创建一个帐户。 这种灵活性可能很有价值。 例如,一些主机提供商可能希望每个客户使用一个帐户,并将帐户密钥存储在不同的地方中,因此即使帐户密钥泄露也不会允许该账户给所有用户颁发证书。

但是,对于大多数大型托管服务提供商,我们建议使用单个帐户并保护相应的帐户密钥。 这样可以更轻松地识别属于同一实体的证书,更容易保持联系信息的最新状态,并在需要时更轻松地提供速率限制调整。 如果使用许多不同的帐户,我们将无法有效调整速率限制。

多域(SAN)证书

我们的颁发政策允许每个证书最多100个名称。 无论您是为每个主机名使用单独的证书,还是将少量证书上的许多主机名组合在一起,都取决于您。

每个主机名使用单独的证书意味着在配置和停用域时逻辑上添加和删除域所需的更改更少。 单独的证书还可以最大限度地减少证书大小,从而加快低带宽网络上的HTTPS握手速度。

另一方面,使用具有许多主机名的大型证书可以让您整体管理更少的证书。 如果您需要支持不支持TLS服务器名称指示(SNI)的Windows XP等旧客户端,则每个证书都需要一个唯一的IP地址 ,因此在每个证书上放置更多名称会减少您需要的IP地址数量。

对于大多数情形下,两种选择都提供相同的安全性。

存储和重用证书和密钥

Let’s Encrypt的主要价值在于我们允许在创建新网站时自动申请/颁发证书。但是,如果您的基础架构可能会为同一网站重复创建新的前端服务器,那么这些前端应该首先尝试使用来自持久性存储的证书和私钥,并且只在没有可用的证书或者所有现有的证书都是过期的情况下发出一张新的证书。

对于Let’s Encrypt,这有助于我们为尽可能多的人提供有效的服务。对您而言,这可以确保您能够随时随地部署您的网站,无论Let’s Encrypt的状态如何。

例如,许多站点开始使用Docker按需配置新的前端实例。如果您将Docker容器设置为在启动时发出,并且您没有永久位置存储证书和密钥,那么如果您一次调出太多实例,则可能会达到速率限制。在最糟糕的情况下,如果您必须立即销毁并重新创建所有实例,您可能会遇到这样的情况:您的实例都没有能够获得证书,并且您的网站已经损坏了几天,直到限制结束。但是,这种类型的问题并不是速率限制所特有的。如果在需要调出前端时出于任何原因导致加密不可用,则会出现同样的问题。

请注意,某些部署原则指出加密密钥永远不会离开生成它们的物理机器。只要您确保机器及其数据的使用寿命足够长,并且您仔细管理速率限制,此模型就可以正常使用Let’s Encrypt。

挑选挑战类型

如果您正在使用http-01 ACME挑战,则需要先向每个前端提供质询回复,然后通知Let’s Encrypt您已准备好迎接挑战。 如果你有很多前端服务器,这可能是一个很困难的事情。 在这种情况下,使用dns-01挑战可能会更容易。 当然,如果您有许多地理位置分散的DNS响应服务器,则必须确保每个响应服务器都可以使用TXT记录。

此外,在使用dns-01挑战时,请务必清理旧的TXT记录,以便对Let’s Encrypt的查询的回复不会太大。

如果您想无论如何都要使用http-01挑战,您可能希望利用HTTP重定向。 您可以设置每个前端,将/.well-known/acme-validation/XYZ重定向到所有XYZ的validation-server.example.com/XYZ。 这会将颁发证书的责任委托给验证服务器,因此您需要很好地保护该服务器。

中央验证服务器

与上述两点相关,如果您有很多前端服务器,可能需要使用较小的服务器子集来管理发布。 这样可以更轻松地使用重定向进行http-01验证,并提供持久存储证书和密钥的位置。

实施OCSP固定

很多浏览器在加载您的网页时会尝试从Let’s Encrypt的OCSP服务器获取响应。这会导致一些性能和隐私问题。理想情况下,连接到网站不应该需要等待Let’s Encrypt服务器的辅助连接结束。 此外,OCSP请求会向Let’s Encrypt泄露用户访问的网站名称。我们有良好的隐私权政策,所以不会单独记录OCSP请求中的详细信息,我们甚至不会收到该数据。 此外,我们预计,每次浏览器首次访问适用Let’s Encrypt证书的站点时,为OCSP提供服务的带宽成本将是我们基础架构费用的重要部分。

通过启用OCSP Stapling,您可以提高网站的性能,为用户提供更好的隐私保护,并帮助Let’s Encrypt有效地为尽可能多的人服务。

防火墙配置

要使用Let’s Encrypt,您需要允许来自运行ACME客户端的计算机的出站443端口流量。 我们不会公布我们的ACME服务的IP范围,它们将在不另行通知的情况下更改。

对于“http-01”ACME方法,您需要允许入站80端口流量。 我们不会发布执行验证的IP范围,它们将在不另行通知的情况下更改。

注意:我们建议始终允许对Web服务器进行纯HTTP访问,并重定向到HTTPS。 这提供了比拒绝或丢弃80端口连接的网络服务器更好的用户体验,并提供相同级别的安全性。

对于所有挑战,您需要允许入站端口53流量(TCP和UDP)到您的权威DNS服务器。

支持的密钥算法

Let’s Encrypt接受长度为2048到4096位的RSA密钥,以及P-256和P-384 ECDSA密钥。 这对于帐户密钥和证书密钥都是如此。 您不能将帐户密钥重复使用为证书密钥。

我们的建议是提供双证书配置,默认情况下提供RSA证书,并向指示支持的客户提供(小得多的)ECDSA证书。

默认使用HTTPS

对于托管服务提供商,我们的建议是自动颁发证书并为您控制的所有主机名配置HTTPS,并提供用户可配置的设置,以确定是否将HTTP URL重定向到其HTTPS等效项。我们建议对于现有帐户,默认情况下会禁用该设置,但对于新帐户,默认情况下会启用该设置。

原因:现有网站可能包含一些HTTP子资源(脚本,CSS和图像)。如果这些站点自动重定向到其HTTPS版本,则由于混合内容阻止,浏览器将阻止其中一些子资源。这可能会破坏网站上的功能。但是,创建新网站并发现重定向到HTTPS的人很可能只包含HTTPS子资源,因为如果他们尝试包含HTTP子资源,他们会立即注意到该资源不起作用。

我们建议允许客户设置HTTP严格传输安全(HSTS)标头,默认最大使用期限为60天。但是,此设置应伴随警告,如果客户需要转移到不提供HTTPS的托管服务提供商,则浏览器中的缓存HSTS设置将使其网站不可用。此外,客户和托管服务提供商都应该知道HSTS标头会将证书错误变为硬故障。例如,虽然人们通常可以通过浏览器点击关于名称不匹配或证书过期的警告,但浏览器不允许对具有活动HSTS标头的主机名进行单击。

续费时间

我们建议在剩余使用寿命的三分之一时自动续订证书。对于Let’s Encrypt当前的90天证书,这意味着在到期前30天续订。

如果您要发行超过10,000个主机名,我们建议使用小批量自动续订,而不是将续订批量分成大块。这样可以降低风险:如果Let’s Encrypt在您需要续订时发生中断,或者续订系统出现暂时性故障,则只会影响您的一些证书,而不是所有证书。它还使我们的容量规划更容易。

您可能希望批量发布所有域的证书以快速配置服务器。然后,您可以通过在正常续订前一天进行一次更新某些证书的过程来延长续订时间,其中一些在提前2天进行,等等。

如果您提供自动配置定期批处理作业的客户端软件,请确保在一天中随机的小时和分钟运行,而不是始终在特定时间运行。这可以确保Let’s Encrypt在一小时内不会收到任意流量峰值。由于Let’s Encrypt需要提供容量来满足峰值负载,因此减少流量高峰可以帮助降低成本。

重试失败的验证

续期失败不应被视为致命错误。 您应该使用指数退避模式(graceful retry logic )在颁发服务中实现优雅的重试逻辑,并限制每个证书每天最多一次重试。 例如,合理的退避时间表将是:一分钟后第一次重试,十分钟后第二次重试,100分钟后第三次重试,一天后第四次和随后的重试。 您也应该有一种方法让管理员可以按域或全局请求早期重试。

躲避重试意味着您的颁发软件应该跟踪失败和成功的尝试,并在尝试重新颁发之前检查最近是否有失败。 尝试每小时颁发数百次是没有意义的,因为重复失败的原因可能会持续存在。

应将所有错误发送给负责管理员,以查看是否需要修复特定问题。