golang解析支付宝根证书(获取应用证书、根证书序列号)

golang解析支付宝根证书

可用于获取支付宝根证书序列号,本代码也适用于获取应用证书序列号,亲测有效

话不多说,直接上代码

首先看一下支付宝java版sdk解析思路:
在这里插入图片描述支付宝根证书有四部分构成,但不是说每一部分都能用的到,根据java版sdk来看,只有oid值以1.2.840.11359.1.1开头的参与根证书序列号的拼接

golang代码:

func GetCertRootSn(certPath string) (string, error) {
	certData, err := ioutil.ReadFile(certPath)
	if err != nil {
		return "", err
	}
	strs := strings.Split(string(certData), "-----END CERTIFICATE-----")

	var cert bytes.Buffer
	for i := 0; i < len(strs); i++ {
		if strs[i] == "" {
			continue
		}
		if blo, _ := pem.Decode([]byte(strs[i] + "-----END CERTIFICATE-----")); blo != nil {
			c, err := x509.ParseCertificate(blo.Bytes)
			if err != nil {
				continue
			}
			if _, ok := alog[c.SignatureAlgorithm.String()]; !ok {
				continue
			}
			si := c.Issuer.String() + c.SerialNumber.String()
			if cert.String() == "" {
				cert.WriteString(utils.MD5(si))
			} else {
				cert.WriteString("_")
				cert.WriteString(utils.MD5(si))
			}
		}

	}
	return cert.String(), nil
}

由于sm2.ParseCertificate得不到算法的oid值,此处,我是采用了判断每个算法是否符合拼接条件,经查询,有一下算法的oid值符合1.2.840.11359.1.1开头的条件
"MD2-RSA" "MD5-RSA" "SHA1-RSA" "SHA256-RSA" "SHA384-RSA" "SHA512-RSA" "SHA256-RSAPSS" "SHA384-RSAPSS" "SHA512-RSAPSS"

	var alog map[string]string = map[string]string{
		"MD2-RSA":       "MD2WithRSA",
		"MD5-RSA":       "MD5WithRSA",
		"SHA1-RSA":      "SHA1WithRSA",
		"SHA256-RSA":    "SHA256WithRSA",
		"SHA384-RSA":    "SHA384WithRSA",
		"SHA512-RSA":    "SHA512WithRSA",
		"SHA256-RSAPSS": "SHA256WithRSAPSS",
		"SHA384-RSAPSS": "SHA384WithRSAPSS",
		"SHA512-RSAPSS": "SHA512WithRSAPSS",
	}

到这里就结束了;

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值