首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >acme自动证书管理器在启动时忽略有效的证书。

acme自动证书管理器在启动时忽略有效的证书。
EN

Stack Overflow用户
提问于 2018-11-16 11:42:27
回答 1查看 214关注 0票数 5

我目前正在构建一个使用acme/autocert的服务。要在超过一个副本中使用该服务,我必须编写一个像DirCache这样的持久缓存接口。然后我注意到,在重新启动服务之后,缓存中的所有有效证书在启动时都被忽略了。以下顺序一直在发生:

  • 缓存放置acme_account+key (即使它存在于缓存中)
  • 缓存获取acme_account+key
  • 缓存获取my.domain.net (它返回缓存的证书)
  • 缓存获取acme_account+key
  • 缓存放置my.domain.net+token
  • 缓存put散列+http-01
  • 缓存删除散列+http-01
  • 缓存删除my.domain.net+token
  • 缓存put my.domain.net (放置新证书)

这行为正确吗?因为每个副本都会创建自己的cert,并且在这种情况下不可能有持久的缓存。

这是我的厂长

代码语言:javascript
复制
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
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-21 11:46:39

这个问题的解决方案是高速缓存接口和行为正确工作。我的缓存实现是错误的。我在Cache.Get(.)从一个DB读取到一个通道,但不幸的是,外部函数体没有等待该通道,并且总是返回一个CacheMissed错误。修好后一切都很好。我的错

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53337190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档