golang autocert acme / autocert:缺少服务器名称

时间:2018-12-03 12:43:08

标签: ssl go

我在我的应用程序中使用Library autocert生成ssl证书,问题是30%的用户对我的应用程序有问题,我当前的代码是:

fmt.Println("Starting server on " + this.Params.Bind)
if this.Params.SSL {
    fmt.Println("SSL Enabled")
    m := autocert.Manager{
        Prompt:     autocert.AcceptTOS,
        HostPolicy: autocert.HostWhitelist(this.Params.HostsWhitelist...),
        Cache:      autocert.DirCache(this.Params.CertCache),
    }

    log.Fatal(autotls.RunWithManager(r, &m))
} else {
    r.Run(this.Params.Bind)
}

错误是:

2018/12/03 12:37:33 http: TLS handshake error from 68.71.48.249:55885: acme/autocert: missing server name
2018/12/03 12:37:33 http: TLS handshake error from 209.213.121.223:38284: acme/autocert: missing server name
2018/12/03 12:37:33 http: TLS handshake error from 209.213.121.223:38283: acme/autocert: missing server name
2018/12/03 12:37:33 http: TLS handshake error from 68.71.48.249:55887: acme/autocert: missing server name
2018/12/03 12:37:33 http: TLS handshake error from 68.71.48.249:55888: acme/autocert: missing server name
2018/12/03 12:37:33 http: TLS handshake error from 209.237.150.145:56842: acme/autocert: missing server name

我如何解决服务器名丢失的错误?

1 个答案:

答案 0 :(得分:1)

也许我的博客将帮助您发现代码与我在博客中显示的代码有所不同。

https://marcofranssen.nl/build-a-go-webserver-on-http-2-using-letsencrypt/

此外,我发现还有一个更好的库可用于通过Letsencrypt管理证书。

https://marcofranssen.nl/use-the-acme-dns-challenge-to-get-a-tls-certificate/

在第二个博客中,我使用https://go-acme.github.io/lego/来支持更多ACME挑战。它附带cli,但也可以在您的Web服务器中用作lib。实际上,它已在Traefik以及Caddy网络服务器项目中使用。

您还应该继续使用SNI质询,因为它被认为是不安全的。而是使用ALPN挑战。