Go版本
暂无(x/crypto v0.17.0,撰写本文时最新)
go env
在你的模块/工作区中的输出:
n/a
你做了什么?
使用autocert与step-ca作为ACME服务器(https://smallstep.com/docs/step-ca/)进行内部测试。我创建了一个指向step-ca的acme.Client,但我没有更改autocert.Manager.RenewBefore。
你看到了什么?
Autocert检索到了证书,所以它按预期工作。
然而,autocert立即启动并不断刷新证书。这是因为默认的RenewBefore是30天,这对于Let's Encrypt的90天证书有效期期是合理的。然而,step-ca颁发有效期为1天的短暂证书。因此,当检索到新证书时,它会立即刷新,无限循环。
你期望看到什么?
没有刷新循环。
当然,我应该将autocert.Manager.RenewBefore设置为与新step-ca示例的默认1天证书有效期相匹配。这将防止这个问题。然而,我在应用程序中没有使RenewBefore可配置,所以相反,我将step-ca配置更改为颁发有效期为31天的证书。我认为将来配置其他ACME提供商时,更多人可能会遇到这个问题。
我认为改变零RenewBefore值的行为是有帮助的。我们可以将续订时间设置为证书有效期的2/3。对于Let's Encrypt,这仍然是到期前的30天。对于有效期为1天的证书,它将在到期前8小时续订。如果证书有效期为12个月,它将在到期前的4个月续订(这可能感觉太早,但无害,而且不太可能:ACME的一个优点是启用更短寿命的证书,由于吊销问题而令人向往)。
至少,我们应该在不立即续订已签发证书的情况下添加一个检查。例如,有一个最小的“下次刷新延迟”,如1小时。
如果对此想法有兴趣,我可以发起一个CL。
9条答案
按热度按时间oewdyzsn1#
CC @bradfitz, @rolandshoemaker, @golang/security。
1cosmwyk2#
Let's Encrypt将来也会开始提供短期证书作为选项,例如7天证书。
我们被这个包用作默认的CA。
当前的行为对我们来说是有问题的,所以在做任何事情之前提前改变这个会很好,使过渡更容易,避免需要阻止不守规矩的客户端。
我建议使用2/3分数而不是30天。
v6ylcynt3#
由于这实际上将是一个API更改,因此应该通过提案过程进行。
听起来一个合理的更改是使
RevewBefore
的文档注解为:这保持了当前对于非常长时间存在的证书的行为(不太可能特别常见,但🤷),同时引入了更理想的行为对于较短寿命的证书。
zynd9foi4#
我相信现在有一些WebPKI CA正在通过ACME颁发一年期证书,可能还有一些私有的,所以在这里包含一个"较小者"的条款对我来说是有意义的。
yduiuuwa5#
根据以上讨论,此建议似乎是一个可能接受的建议。
— rsc for the proposal review group
该建议编号为#64997(评论)。
zwghvu4y6#
共识没有变化,所以接受。🎉
此问题现在跟踪实施提案的工作。
— rsc提案审查组
提案编号为#64997(评论)。
db2dz4w87#
是否有人已经计划对此进行工作?如果没有,我可以尝试一下。
wgmfuz8q8#
我不太可能在短时间内完成这个任务,如果你愿意提交一个CL(Change List)请求,我很乐意进行审查。
5ktev3wc9#
https://go.dev/cl/579695提到了这个问题:
acme/autocert: renew certs at 2/3 of lifetime by default, but not earlier than 30d before expiry