gpt4 book ai didi

go - 在 go 中比较客户端证书

转载 作者:行者123 更新时间:2023-12-03 03:15:44 25 4
gpt4 key购买 nike

我的用例看起来我知道我的客户的公共(public)证书,并且只想允许它们。我有一个基于 gin 的 go 服务器和一个 TLS 配置,其中我为属性“VerifyPeerCertificate”分配了一个方法。该函数看起来像

func customVerifyPeerCertificate(rawCerts [][]byte, verifiedChains [][]*x509.Certificate) error {

if len(verifiedChains) < 1 {
return errors.New("Verified certificate chains is empty.")
}
if len(verifiedChains[0]) < 1 {
return errors.New("No certificates in certificate chains.")
}
if len(verifiedChains[0][0].Subject.CommonName) < 1 {
return errors.New("Common name can not be empty.")
}

fmt.Println(verifiedChains[0][0].Raw)

publicKeyDer, _ := x509.MarshalPKIXPublicKey(verifiedChains[0][0].PublicKey)

publicKeyBlock := pem.Block{
Type: "CERTIFICATE",
Bytes: publicKeyDer,
}
publicKeyPem := string(pem.EncodeToMemory(&publicKeyBlock))
}

但是,问题是变量“publicKeyPem”中的字符串看起来不像我用来向服务器发送请求的客户端公共(public)证书,它的长度也较短。

最佳答案

证书不仅仅是它的公钥。整个x509.Certificate object代表客户端提交的证书,公钥字段只是公钥的实际值。

如果您想比较证书的严格相等性,则应使用传递给回调的 rawCerts [][]byte 参数。 tls.Config中提到了这一点VerifyPeerCertificate 的评论:

    VerifyPeerCertificate, if not nil, is called after normal
certificate verification by either a TLS client or server. It
receives the raw ASN.1 certificates provided by the peer and also
any verified chains that normal processing found. If it returns a
non-nil error, the handshake is aborted and that error results.

关于go - 在 go 中比较客户端证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57744933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com