【问题标题】:golang autocert acme/autocert: missing server namegolang autocert acme/autocert:缺少服务器名称
【发布时间】:2019-05-04 18:25:48
【问题描述】:

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

如何解决缺少服务器名称的错误?

【问题讨论】:

  • 您的客户似乎不支持SNI。如果您想在同一个 IP:port 对上托管多个域,那么您可以在服务器上解决任何问题。

标签: go ssl tls1.2 lets-encrypt


【解决方案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,但也可以在您的网络服务器中用作库。事实上,它被用于 Traefik 以及 Caddy 网络服务器项目。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-10
    • 2022-07-12
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    • 2020-08-12
    • 2017-04-23
    • 1970-01-01
    相关资源
    最近更新 更多