我想设置TLS,让我们用golang.org/x/crypto/acme/autocert在Golang加密。为什么我要在Manager中设置HostPolicy?在没有默认autocert.HostWhitelist的情况下,一切似乎都很好。
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("test"))
})
m := autocert.Manager{
Prompt: autocert.AcceptTOS,
//HostPolicy: autocert.HostWhitelist("example.com"),
Cache: autocert.DirCache("certs"),
}
s := &http.Server{
Addr: ":443",
TLSConfig: &tls.Config{
GetCertificate: m.GetCertificate,
},
}
log.Fatal(s.ListenAndServeTLS("", ""))我正在设置一个简单的CMS,我希望SSL对新主机是自动的。我可以创建自己的主机策略函数,在数据存储中查找主机名,但最好跳过它。
编辑
我在他们的代码里发现了这个
HostPolicy控制管理器将尝试检索新证书的域。它不影响缓存的证书。 如果非零,则在请求新证书之前调用HostPolicy。如果为零,则目前允许所有主机。不建议这样做,因为它会引发潜在的攻击,客户端通过IP地址连接到服务器,并假装请求不正确的主机名。管理器将试图错误地为该主机获取证书,最终达到CA对证书请求的速率限制,从而无法获得实际证书。
我还是不完全明白。攻击者能做些什么?它将如何影响我的应用程序?
发布于 2018-09-01 16:00:46
如果您没有HostPolicy,这意味着任何人都可以向您的应用程序提出请求,因此您的服务器将尝试为该域创建一个SSL证书。
然后,黑客可以向您的服务器发出多个请求,并导致您达到速率限制,因此当您的服务实际上对实际域提出更新请求时,它们将被拒绝,因为您达到了速率限制。
因此,最终你将无法创建你真正需要的证书,你的客户会抱怨,你会哭。
https://stackoverflow.com/questions/48046133
复制相似问题