当我设置一个cronjob来每30天更新一次LetsEncrypt证书时,我可以设置公用密钥引脚吗?
如果证书被更新,那么公钥密码也被更新了吗?
一些谨慎的话来说:
我可以使用LetsEncrypt的公钥密码?
如果证书被更新,那么公钥密码也被更新了吗?
会回应gf_所说的一切。
但是,要回答这个问题,是的,你可以。
默认情况下,让我们encryption重新生成密钥和证书更新。 这使得HPKP的实施变得困难,如果您想要在叶子上进行固定,那么在中间变化的情况下( 如2016年3月所做的那样 ),您可能应该这样做。
所以,如果你仍然想要做HPKP的话,你有几个select:
我刚刚使用dns01validation的脱水客户端实现了这一点。 dns01挂钩是certzure,因为我们的DNS托pipe在Azure中。
编辑:当我谈论私钥时,显然我只是意味着你只把公钥部分变成了引脚。 私人钥匙,顾名思义,应始终保持私密。 查看我自己的钩子实现细节。
您需要私钥翻转来实现这一点。 也就是说,你总是有当前的私钥(称之为A)和将来的私钥(称之为B),以便你可以将它们添加到你的引脚。 所以在这一点上,你的针脚是A和B.当证书更新的日子来了,私人密钥A变得过时,B变得活着。 同时你得到一个新的未来的私钥,称之为C.你重新生成你的PIN列表,所以现在它包含B和C.所以这就是你如何滚动你的私钥。 现在脱水支持 。
另外,您需要一个每次更新证书时都会调用的钩子,并因此翻转您的私钥。 我自己实现了这个。
最后,如果我得到这个权利,你必须确保:
HPKP age x 2 < days between cert renewals
例如,如果您的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,没有匹配,当HPKP策略到期时,从第61天到第71天,客户端被指定为中指。
另一个可能更安全,更简单的select是每次使用相同的私钥,并生成一个或多个备份私钥,然后将这些私钥硬编码到HPKPconfiguration中并完成它。
是的,这是棘手的,有可能是我没有想到的警告,但我们会看到从长远来看。 很明显,我把它部署在短暂的(15天)HPKP时代的一个不加批判的子域,这样就不会造成很大的麻烦。
编辑:我已经写了几个脚本来帮助你设置HPKP让我们使用Nginx进行encryption和脱水:
HPKPinx