Bob*_*tiz 11 ssl http-headers ssl-certificate tls public-key
当我设置一个 cronjob 以每 30 天更新一次 LetsEncrypt 证书时,我可以设置 Public-Key-Pins 吗?
如果证书更新,那么公钥密码也会更新,对吗?
gf_*_*gf_ 12
一些警告的话开始:
我可以在 LetsEncrypt 中使用公钥密码吗?
如果证书更新,那么公钥密码也会更新,对吗?
Bar*_*ard 11
会回应 gf_ 所说的一切。
但是,要回答这个问题,是的,您可以。
默认情况下,Let's Encrypt 在续订时重新创建密钥和证书。如果您想固定在叶子上,这会使实现 HPKP 变得困难,如果中间发生变化,您可能应该这样做(就像 2016 年 3 月所做的那样)。
因此,如果您仍想执行 HPKP,您有多种选择:
我刚刚使用带有 dns01 验证的脱水客户端实现了这一点。dns01 挂钩是certzure,因为我们的 DNS 托管在 Azure 中。
编辑:当我谈论私钥时,显然我总是指您只将公钥部分变成针脚。顾名思义,私钥应始终保持私密。有关实现细节,请参阅我自己的钩子。
您需要私钥翻转才能实现这一点。也就是说,您始终手头有当前的私钥(称为 A)和未来的私钥(称为 B),以便您可以将它们都添加到您的引脚中。所以此时你的 pin 是 A 和 B。当证书更新的那一天到来时,私钥 A 变得过时,B 变得有效。同时,您将获得一个新的未来私钥,将其命名为 C。您重新生成您的 pin 列表,现在它包含 B 和 C。这就是您翻转私钥的方式。脱水现在支持这一点。
此外,您需要一个每次更新证书时都会调用的钩子,从而滚动您的私钥。我自己实现了这个。
最后,如果我做对了,你必须确保:
HPKP age x 2 < days between cert renewals
Run Code Online (Sandbox Code Playgroud)
例如,如果您的 HPKP 年龄为 50 天,并且您每 30 天更新一次证书,那么在第一天访问您网站的客户将被私钥 A 和 B 卡住,而您在第 31 天滚动到 B 和 C。您的服务器有 B 和 C,客户端有 A 和 B,即使在第 50 天也有匹配,并且客户端正确打开了站点。
但是让我们看看 HPKP 年龄是否为 70 天。您每 30 天更新一次证书,并且客户端在第一天访问了您的站点,因此同样只有私钥 A 和 B。您在第 31 天转入 B 和 C,并在第 61 天转入到 C 和 D . 你的服务器有 C 和 D,客户端有 A 和 B,没有匹配,从第 61 天到第 71 天,当它的 HPKP 策略到期时,客户端被给予中指。
另一个,可能更安全,当然更简单的选择是每次使用相同的私钥并生成一个或多个备份私钥,然后将它们硬编码到您的 HPKP 配置中并完成它。
是的,这很棘手,可能还有一些我没有想到的警告,但从长远来看,我们会看到的。显然,我将其部署在 HPKP 期限较短(15 天)的非关键子域上,以免造成巨大麻烦。
编辑:我编写了一些脚本来帮助您使用 Let's Encrypt 设置 HPKP 并使用 Nginx 进行脱水:
归档时间: |
|
查看次数: |
5402 次 |
最近记录: |