我在我的应用程序中使用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
我如何解决服务器名丢失的错误?
答案 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挑战。