一尘不染

如何使用错误的证书执行 https 请求?

go

说我想以https://golang.org编程方式获取。当前 golang.org (ssl) 有一个错误的证书,*.appspot.com当我运行这个时,它被颁发给So:

package main

import (
    "log"
    "net/http"
)

func main() {
    _, err := http.Get("https://golang.org/")
    if err != nil {
        log.Fatal(err)
    }
}

我得到(如我所料)

Get https://golang.org/: certificate is valid for *.appspot.com, *.*.appspot.com, appspot.com, not golang.org

现在,我想自己信任这个证书(想象一下我可以验证指纹等的自发证书):我如何提出请求并验证/信任证书?

我可能需要使用 openssl 下载证书,将其加载到我的文件中并填充tls.Configstruct !?


阅读 195

收藏
2021-11-06

共1个答案

一尘不染

安全说明:禁用安全检查是危险的,应该避免

您可以对默认客户端的所有请求全局禁用安全检查:

package main

import (
    "fmt"
    "net/http"
    "crypto/tls"
)

func main() {
    http.DefaultTransport.(*http.Transport).TLSClientConfig = &tls.Config{InsecureSkipVerify: true}
    _, err := http.Get("https://golang.org/")
    if err != nil {
        fmt.Println(err)
    }
}

您可以禁用客户端的安全检查:

package main

import (
    "fmt"
    "net/http"
    "crypto/tls"
)

func main() {
    tr := &http.Transport{
        TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
    }
    client := &http.Client{Transport: tr}
    _, err := client.Get("https://golang.org/")
    if err != nil {
        fmt.Println(err)
    }
}
2021-11-06