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

假设我想以https://golang.org编程方式获取信息。目前,golang.org(ssl)的证书不正确,*.appspot.com因此我在运行此证书时将其颁发给:


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!?。


Cats萌萌
浏览 155回答 3
3回答

哔哔one

正确的方式(从Go 1.13开始)(由下面的答案提供):customTransport := http.DefaultTransport.(*http.Transport).Clone()customTransport.TLSClientConfig = &tls.Config{InsecureSkipVerify: true}client := &http.Client{Transport: customTransport}原始答案:这是一种实现方法,而不会丢失的默认设置DefaultTransport,并且不需要根据用户评论提供虚假请求。defaultTransport := http.DefaultTransport.(*http.Transport)// Create new Transport that ignores self-signed SSLcustomTransport := &http.Transport{  Proxy:                 defaultTransport.Proxy,  DialContext:           defaultTransport.DialContext,  MaxIdleConns:          defaultTransport.MaxIdleConns,  IdleConnTimeout:       defaultTransport.IdleConnTimeout,  ExpectContinueTimeout: defaultTransport.ExpectContinueTimeout,  TLSHandshakeTimeout:   defaultTransport.TLSHandshakeTimeout,  TLSClientConfig:       &tls.Config{InsecureSkipVerify: true},}client := &http.Client{Transport: customTransport}较短的方法:customTransport := &(*http.DefaultTransport.(*http.Transport)) // make shallow copycustomTransport.TLSClientConfig = &tls.Config{InsecureSkipVerify: true}client := &http.Client{Transport: customTransport}警告:仅用于测试/开发目的。否则,后果自负!!!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go