mirror of
https://github.com/woodchen-ink/certimate.git
synced 2025-07-18 01:11:55 +08:00
43 lines
1.0 KiB
Go
43 lines
1.0 KiB
Go
package cert
|
|
|
|
import (
|
|
"crypto/x509"
|
|
"encoding/pem"
|
|
)
|
|
|
|
// 比较两个 x509.Certificate 对象,判断它们是否是同一张证书。
|
|
// 注意,这不是精确比较,而只是基于证书序列号和数字签名的快速判断,但对于权威 CA 签发的证书来说不会存在误判。
|
|
//
|
|
// 入参:
|
|
// - a: 待比较的第一个 x509.Certificate 对象。
|
|
// - b: 待比较的第二个 x509.Certificate 对象。
|
|
//
|
|
// 出参:
|
|
// - 是否相同。
|
|
func EqualCertificate(a, b *x509.Certificate) bool {
|
|
if a == nil || b == nil {
|
|
return false
|
|
}
|
|
|
|
return string(a.Signature) == string(b.Signature) &&
|
|
a.SignatureAlgorithm == b.SignatureAlgorithm &&
|
|
a.SerialNumber.String() == b.SerialNumber.String() &&
|
|
a.Issuer.SerialNumber == b.Issuer.SerialNumber &&
|
|
a.Subject.SerialNumber == b.Subject.SerialNumber
|
|
}
|
|
|
|
func decodePEM(data []byte) []*pem.Block {
|
|
blocks := make([]*pem.Block, 0)
|
|
for {
|
|
block, rest := pem.Decode(data)
|
|
if block == nil {
|
|
break
|
|
}
|
|
|
|
blocks = append(blocks, block)
|
|
data = rest
|
|
}
|
|
|
|
return blocks
|
|
}
|