我可以在LetsEncrypt中使用公钥吗?


Answers:


12

首先请注意以下几点:

  • 如果您打算实施HPKP,请知道您在做什么。
  • 如果您做得不好,或者“如果发生了不好的事情”,这些都不在您的控制之下,则可能会使您的域无法使用。
  • 确保使用不是很重要的域或非常短的缓存时间(例如十秒)来测试设置。
  • 考虑一下您想要固定的证书:根,中级,叶...
  • 考虑一下固定另一个(备份)证书颁发机构是否有意义,它是中间证书和叶证书。
  • 安全胜过遗憾:考虑将另一个备份CA /证书固定为两个是否合理。
  • 如果这些要点和问题对您来说听起来是“新”:实施此功能之前,请阅读HPKP的内容以及常见的陷阱和警告。

我可以在LetsEncrypt中使用公钥吗?

  • 是。

如果证书被更新,那么公钥也被更新,对吗?

  • 这取决于您要引用的证书以及要固定的证书。

9

会回应gf_所说的一切。

但是,要回答这个问题,可以。

默认情况下,“让我们加密”会在续订时重新创建密钥和证书。如果您想固定在叶子上,这会使实施HPKP变得很困难,如果发生中间更改,您可能应该这样做(就像2016年3月所做的那样)。

因此,如果您仍然想执行HPKP,则有几种解决方法:

  1. 使用您自己的固定CSR,而不要使用每次都会为您创建CSR的标准客户端,因此叶密钥不会更改。这篇博客文章解释了具体如何执行此操作,因为作者使用HPKP。
  2. 使用较短的HPKP到期时间并在该到期时间内进行更新,并在实际更改证书之前更改策略以拥有新密钥和旧密钥,并留有足够的时间以使新策略可供任何访问者使用。
  3. 固定Let's Encrypt根目录,而不是叶子或证书。

1
好的加法,+ 1。
gf_

扎根安全吗?对于MITM,使用他自己的Let's Encrypt证书真的很容易。
melbic '16

2
攻击者使用“让我们加密”获取您域名的证书“真的很容易”吗?不知道这样做的任何方式。但是,如果任何 CA在域验证过程中存在错误,则可能会出现这种情况。通过固定LE根,与世界上每个CA相比,您的攻击面已大大减少至“让我们加密”。我同意,仍然还不如固定叶子那么安全,但这会带来风险,因此取决于您对“安全”的定义。
巴里·波拉德

说我确实认为HPKP存在着巨大的风险-主要是从自杀的角度-所以不是狂热者。如果您决定更改CA,或更改证书路径(例如,由于SHA-256折旧),或者迫切需要重新发行证书,或者备份密钥被盗用/丢失,或者设置密钥的人离开而下一个人却没有意识到他们使用HPKP和/或对此一无所知。HPKP也不保护免受诸如Superfish之类的本地根源的侵害。因此,对于大多数站点而言,HPKP太复杂了,恕我直言,不值得为增加一点安全性而增加保护。但那只是我的个人意见。
巴里·波拉德

好的,我之所以只问是因为我认为所有LE证书都具有相同的根证书。因此,如果您将根固定到另一个LE证书中,则可以使用MITM并在其自己的证书中伪造。你懂我的意思吗?
melbic '16

5

我只是使用带有dns01验证的脱水客户端来实现此功能。dns01挂钩是安全的,因为我们的DNS托管在Azure中。

编辑:当我谈论私钥时,很明显我总是意味着您只将公钥部分变成了引脚。顾名思义,私钥应始终保持私密。有关实现的详细信息,请参见我自己的挂钩。


您需要私钥过渡才能实现这一点。也就是说,您总是手头有当前的私钥(称为A)和将来的私钥(称为B),以便可以将它们都添加到自己的引脚上。因此,此时您的密码是A和B。当证书更新之日到来时,私钥A变得过时而B生效。同时,您将获得一个新的将来的私钥,将其称为C。您重新生成了密码列表,现在它包含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,没有匹配项,并且从第61天到第71天(HPKP策略到期)为客户端提供了中指。


另一个可能更安全,当然也更简单的选择是,每次使用相同的私钥并生成一个或多个备份私钥,然后将其硬编码到您的HPKP配置中并完成此操作。


是的,这很棘手,可能还有一些我没有想到的警告,但从长远来看,我们会看到的。显然,我将其部署在HPKP使用期限短(15天)的非关键子域上,这样就不会造成大麻烦。


编辑:我编写了一些脚本来帮助您使用“让我们加密”设置HPKP并使用Nginx进行脱水:

HPKPinx


3
我决定两全其美。自动私钥过渡+静态私钥。如果有人感兴趣,可能会写一篇关于它的博客文章。
bviktor

1
如果这样做,请编辑您的信息并插入链接-谢谢!
gf_

谢谢,我会尽力在本周或下周完成此操作
bviktor

2
链接已添加。尚无文档,但是这里有代码,您可以尝试一下并对其进行破解。
bviktor '17
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.