我想使用golang.org/x/crypto/acme/autocert在Golang中使用Let's Encrypt设置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控制管理中心将尝试检索的域
的新证书。它不会影响缓存的证书。

如果不为null,则在请求新证书之前调用HostPolicy。如果没有,
当前允许所有主机。不建议这样做,因为它会打开
客户端通过IP地址连接到服务器的潜在攻击,
假装要求输入错误的主机名。经理将尝试
最终错误地获得该主机的证书
达到CA对证书申请的速率限制并使其达到要求
无法获得实际的证书。

我仍然不完全了解。攻击者该怎么办?它将如何影响我的应用程序?

最佳答案

如果您没有HostPolicy,则意味着任何人都可以向您的应用程序发出请求,因此您的服务器将随后尝试为该域创建SSL证书。

然后,黑客可能会向您的服务器发出多个请求,并导致您达到速率限制,因此,当您的服务实际向真实域提出续订请求时,由于达到了速率限制,它们将被拒绝。

因此,最终您将无法创建您真正需要的证书,并且客户会抱怨并且您会哭泣。

关于ssl - 在autocert.Manager中省略HostPolicy是否有危险?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48046133/

10-11 08:47