为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
Cats萌萌 2021-05-03 10:22:19
假设我想以https://golang.org编程方式获取信息。目前,golang.org(ssl)的证书不正确,*.appspot.com因此我在运行此证书时将其颁发给:package mainimport (    "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!?。
查看完整描述

3 回答

?
哔哔one

TA贡献1854条经验 获得超8个赞

正确的方式(从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 SSL

customTransport := &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 copy

customTransport.TLSClientConfig = &tls.Config{InsecureSkipVerify: true}

client := &http.Client{Transport: customTransport}

警告:仅用于测试/开发目的。否则,后果自负!!!


查看完整回答
反对 回复 2021-05-17
  • 3 回答
  • 0 关注
  • 154 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信