首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加密/自动证书包停止工作,永远挂起等待acme挑战

加密/自动证书包停止工作,永远挂起等待acme挑战
EN

Stack Overflow用户
提问于 2019-09-08 22:37:02
回答 1查看 130关注 0票数 0

我已经依赖这个库有一段时间了,没有任何问题,但是突然它完全忽略了缓存的证书,试图获得一个新的证书,但它只是永远等待着acme挑战,显然从来没有到来。据我所知,我的用法是完全正确的(这在过去的几周里一直有效,没有问题):

代码语言:javascript
复制
certManager := autocert.Manager{
    Prompt:     autocert.AcceptTOS,
    HostPolicy: autocert.HostWhitelist("example.com"),
    Cache:      autocert.DirCache("certs"),
}

c1 := make(chan error)

go func() {
    err := http.ListenAndServe(":80", certManager.HTTPHandler(nil))
    if err != nil {
        c1 <- err
    }
}()

err := <-c1
if err != nil {
    os.Stderr.WriteString(
        fmt.Sprintf(
            "failed to serve certification manager for acme verification - %v\n",
            err,
        )
    )
}
if err := s.ListenAndServeTLS("", ""); err != http.ErrServerClosed {
    os.Stderr.WriteString(fmt.Sprintf("Failed to start: %v\n", err))
    return err
}

我在亚马逊网络服务上运行这个程序,我100%确定route53配置正确(它在http上工作),并且安全组为所有流量打开了所有端口,所以我知道这也不是问题所在。

在过去,如果质询失败或证书无法加载,我会收到一些有用的调试信息,但如果没有对此特定代码的任何明显更改和任何有意义的错误信息,我就完全卡住了。我如何调试它,并得到一些有意义的解释,为什么这个工作的代码突然失败了?有没有办法让我知道letsencrypt对我有什么影响?

EN

回答 1

Stack Overflow用户

发布于 2019-09-08 23:30:24

我能够通过将我的服务器配置从以下位置更改来解决此问题:

代码语言:javascript
复制
s := &http.Server{
    Addr:    ":https",
    Handler: allowCORS(mux),
    TLSConfig: &tls.Config{
        GetCertificate: certManager.GetCertificate,
    },
}

要这样做:

代码语言:javascript
复制
s := &http.Server{
    Addr:    ":https",
    Handler: allowCORS(mux),
    TLSConfig: certManager.TLSConfig(),
}

这使得通过HTTP的显式服务变得多余,所以我还删除了这段代码及其错误处理:

代码语言:javascript
复制
go func() {
    err := http.ListenAndServe(":http", certManager.HTTPHandler(nil))
    if err != nil {
        c1 <- err
    }
}()

最终,我的配置如下所示:

代码语言:javascript
复制
certManager := autocert.Manager{
    Prompt:     autocert.AcceptTOS,
    HostPolicy: autocert.HostWhitelist("example.com"),
    Cache:      autocert.DirCache("certs"),
}

s := &http.Server{
    Addr:      ":https",
    Handler:   allowCORS(mux),
    TLSConfig: certManager.TLSConfig(),
}

log.Fatal(s.ListenAndServeTLS("", ""))

并且我的TLS证书可以正常工作

如果有人想解释为什么这是可行的,我会很高兴地把它标记为正确的答案!

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

https://stackoverflow.com/questions/57842900

复制
相关文章

相似问题

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