为了账号安全,请及时绑定邮箱和手机立即绑定

acme autocert 管理器在启动时忽略有效证书

acme autocert 管理器在启动时忽略有效证书

Go
慕的地6264312 2023-05-08 16:36:33
我目前正在构建一个使用 acme/autocert 的服务。要将该服务用于超过 1 个副本,我必须编写一个持久缓存接口,如 DirCache。然后我注意到,在重新启动服务后,缓存中的所有有效证书在启动时都被忽略了。以下序列始终发生:缓存放acme_account+key(即使存在缓存中)缓存获取acme_account+key缓存获取 my.domain.net(它返回缓存的证书)缓存获取acme_account+key缓存放my.domain.net+token缓存放HASH+http-01缓存删除HASH+http-01缓存删除my.domain.net+token缓存放入 my.domain.net(放入新证书)这是正确的行为吗?因为每个副本都会创建自己的证书,并且在这种情况下不可能使用持久缓存这是我的经理工厂func NewManager(d *db.DynamoDB, staging bool) *Manager {    manager := &Manager{        CertCache: NewPersistentCertCache(d),    }    directoryURL := acme.LetsEncryptURL    if staging {        directoryURL = LetsEncryptStagingURL        log.Infof("Using CA staging environment")    }    log.Infof("CA URI %s", directoryURL)    client := &acme.Client{        DirectoryURL: directoryURL,    }    manager.AcmeManager = &autocert.Manager{        Prompt:     autocert.AcceptTOS,        HostPolicy: manager.AllowHostPolicy,        Cache:      manager.CertCache,        Client:     client,    }    return manager}
查看完整描述

1 回答

?
喵喔喔

TA贡献1735条经验 获得超5个赞

这个问题的解决方案是缓存接口和行为正常工作。缓存实现有问题。在 Cache.Get(...) 中有一个从数据库读取到通道的 goroutine,但不幸的是,外部 func 主体没有等待该通道并始终返回 CacheMissed 错误。修复后一切正常。



查看完整回答
反对 回复 2023-05-08
  • 1 回答
  • 0 关注
  • 137 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信