我想使用golang.org/x/crypto/acme/autocert
在Golang中使用Let的加密设置TLS。我为什么要在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能够自动用于新主机。我可以创建自己的主机策略函数来查找数据存储区中的主机名,但跳过它会很好。
修改
我在code:
中找到了这个HostPolicy控制Manager将尝试检索的域 新证书。它不会影响缓存的证书。
如果为非nil,则在请求新证书之前调用HostPolicy。如果没有, 目前允许所有主机。这是不推荐的,因为它打开了 客户端通过IP地址和服务器连接到服务器的潜在攻击 假装要求不正确的主机名。经理会尝试 最终错误地获取该主机的证书 达到CA对证书请求的速率限制并进行 无法获得实际证书。
我仍然完全不明白。攻击者可以做什么以及它会如何影响我的应用程序?
答案 0 :(得分:0)
如果您没有HostPolicy,则意味着任何人都可以向您的应用程序发出请求,因此您的服务器将随后尝试为该域创建SSL证书。
然后,黑客可能会向您的服务器发出多个请求,并导致您达到速率限制,因此,当您实际服务于对真实域的续订请求时,由于您达到了速率限制,它们将被拒绝。
因此,最终您将无法创建您真正需要的证书,并且客户会抱怨并且您会哭泣。