在autocert.Manager中省略HostPolicy有任何危险吗?

问题描述 投票:0回答:1

我想使用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控制Manager将尝试为其检索新证书的域。它不会影响缓存的证书。

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

我还是完全不明白。攻击者可以做什么以及它会如何影响我的应用程序?

ssl go lets-encrypt
1个回答
0
投票

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

然后,黑客可以向您的服务器发出多个请求并导致您达到速率限制,因此当您的服务实际上对真实域进行续订请求时,他们将因为您达到速率限制而被拒绝。

所以最终你将无法创建你真正需要的证书,而你的客户会抱怨并且你会哭。

© www.soinside.com 2019 - 2024. All rights reserved.