如何忽略无效的 TLS

How to ignore invalid TLS

我通过将 HTTP Get() 发送到 prometheus 端点来获取 prometheus 指标。如果普罗米修斯端点是 http 这有效,但当它是 https.

时会抛出错误

现在我想要一个用户设置为 ignore_invalid_tls,可以设置为 true 或 false。

为了实现这个,我需要忽略由 https 端点引起的错误。

我试过这种方法:

client := http.Client{
    Timeout: time.Duration(configuration.Endpoint.Timeout) * time.Second,
    Transport: &http.Transport{
        TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
    },
}

但这只会忽略错误的证书。

当 prometheus 端点是 https 时我得到的错误是:

http: server gave HTTP response to HTTPS client

不能一概而论地忽略“无效的 TLS”。 TLS 握手包括证书的 local 验证,可以使用 InsecureSkipVerify 禁用。但是,如果对方一开始就没有使用 TLS,例如 “服务器向 HTTPS 客户端提供 HTTP 响应”,那么这就不能忽略了。这就像客户端说英语而服务器说西班牙语一样 - 不能简单地忽视双方无法理解对方并继续沟通。