加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Golang httptls 通信,带证书请求小实例

发布时间:2020-12-16 18:31:57 所属栏目:大数据 来源:网络整理
导读:package wgetimport ("crypto/tls""crypto/x509""io""net/http""os")func client(rootCa,rootKey string) *http.Client {var tr *http.Transportcerts,err := tls.LoadX509KeyPair(rootCa,rootKey)if err != nil {tr = http.Transport{TLSClientConfig: tls.
package wget

import (
	"crypto/tls"
	"crypto/x509"
	"io"
	"net/http"
	"os"
)

func client(rootCa,rootKey string) *http.Client {
	var tr *http.Transport
	certs,err := tls.LoadX509KeyPair(rootCa,rootKey)
	if err != nil {
		tr = &http.Transport{
			TLSClientConfig: &tls.Config{InsecureSkipVerify: true},}
	} else {
		ca,err := x509.ParseCertificate(certs.Certificate[0])
		if err != nil {
			return &http.Client{Transport: tr}
		}
		pool := x509.NewCertPool()
		pool.AddCert(ca)

		tr = &http.Transport{
			TLSClientConfig: &tls.Config{RootCAs: pool},}

	}
	return &http.Client{Transport: tr}
}

func Wget(url,name,rootCa,rootKey string) (bool,error) {
	resp,err := client(rootCa,rootKey).Get(url)
	if err != nil {
		return false,err
	}
	defer resp.Body.Close()
	File,err := os.Create(name)
	if err != nil {
		return false,err
	}
	io.Copy(File,resp.Body)
	File.Close()
	return true,nil
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读