栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

有证书发送https请求

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

有证书发送https请求

一、读取pfx文件获取公私钥
func TransferKey(path, password string) error {
	content, err := ioutil.ReadFile(path)
	if err != nil {
		return fmt.Errorf("Read pfx file error %s ", err.Error())
	}


	blocks, err := pkcs12.ToPEM(content, password)
	if err != nil {
		return fmt.Errorf("pkcs12 decode error %s ", err.Error())
	}

	privateKey, err := os.Create("private.pem")
	if err != nil {
		return fmt.Errorf("Create private.pem error %s ", err.Error())
	}
	defer privateKey.Close()

	publicKey, err := os.Create("public.pem")
	if err != nil {
		return fmt.Errorf("Create private.pem error %s ", err.Error())
	}
	defer publicKey.Close()

	err = pem.Encode(privateKey, blocks[0])
	if err != nil {
		return err
	}
	err = pem.Encode(publicKey, blocks[1])
	if err != nil {
		return err
	}
	return nil
}
二、加载公私钥,构建https client
cliCrt, err := tls.LoadX509KeyPair("public.pem", "private.pem")
	if err != nil {
		fmt.Println(err)
	}

	tr := &http.Transport{
		TLSClientConfig: &tls.Config{
			Certificates:       []tls.Certificate{cliCrt},
			InsecureSkipVerify: true,
		},
	}
	httpsclient := &http.Client{
		Transport: tr,
	}
三、若验证服务端证书
	pool := x509.NewCertPool()
	caPem: = "pem 格式"
	pool.AppendCertsFromPEM([]byte(caPem))
	tr := &http.Transport{
		TLSClientConfig: &tls.Config{
			Certificates:       []tls.Certificate{cliCrt},
			RootCAs: pool
			InsecureSkipVerify: false,
		},
	}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/905391.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号