Go语言 转到autocert acme/autocert:缺少服务器名称

rslzwgfq  于 2023-08-01  发布在  Go
关注(0)|答案(2)|浏览(245)

我在应用程序中使用库 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


如何修复缺少服务器名称的错误?

rsaldnfx

rsaldnfx1#

基于在存储库https://github.com/suyashkumar/ssl-proxy/issues/45上创建的问题。当您的golang.org/x/crypto软件包不是最新的时,就会出现此问题。请尝试更新软件包,然后重试

vqlkdk9b

vqlkdk9b2#

也许我的博客会帮助你找到你的代码与我在博客中展示的代码的区别。
https://marcofranssen.nl/build-a-go-webserver-on-http-2-using-letsencrypt/
此外,我发现有一个更好的库可以通过Let's Encrypt管理证书:
https://marcofranssen.nl/use-the-acme-dns-challenge-to-get-a-tls-certificate/
在这第二篇博客文章中,我使用了https://go-acme.github.io/lego/,它支持更多的ACME挑战。它附带了一个CLI,但它也可以用作Web服务器中的库。事实上,它被用于Træfik以及Caddy Web服务器项目。
你也应该 * 不要 * 再使用SNI挑战,因为它被认为是不安全的。使用ALPN挑战。

相关问题