gpt4 book ai didi

go - 如何使用 Go 在证书中添加 SAN 扩展

转载 作者:IT王子 更新时间:2023-10-29 00:43:26 31 4
gpt4 key购买 nike

我需要在证书中指定registeredID。

因此,当使用 OpenSSL 签署证书时,我将其添加到配置文件中。

[ alternate_names ]
DNS.1 = localhost
RID.1 = 1.2.3.4.5.5

这里,1.2.3.4.5.5是OID。

我关注了How to format an OID Subject Alt Name entry in a openssl.cnf file在 Stack Overflow 中。

现在,我想在 Go 中生成证书。下面一个是我当前的配置

cfg := cert.Config{
CommonName: name,
Organization: []string{"Elasticsearch Operator"},
AltNames: cert.AltNames{
DNSNames: []string{
"localhost",
},
},
Usages: []x509.ExtKeyUsage{
x509.ExtKeyUsageServerAuth,
x509.ExtKeyUsageClientAuth,
},
}

在这个配置中,如何添加 OID 号。

最佳答案

没有直接的方法可以使用 Go 在证书中添加 OBJECT IDENTIFIER。

我们找到了定制解决方案。

Go 提供了在 Certificate 中添加额外 SAN 信息的选项

x509.Certificate{
ExtraExtensions: []pkix.Extension{
{
// Here, We add SAN additional with specific ID
},
},
}

根据 2.5.29.17 - Subject Alternative Name , SAN 的 OID 是 2.5.29.17

比方说,我们将在 SAN 中添加 registeredID 1.2.3.4.5.5。并且需要将此 RID 添加为标记 #8。 (根据 2.5.29.17 )

因此此扩展的字节值为 []byte{0x88, 0x05, 0x2A, 0x03, 0x04, 0x05, 0x05}

这里,

  • 0x88 是特定于上下文的 #8
  • 的标记值
  • 0x05是编码值的长度
  • 0x2A, 0x03, 0x04, 0x05, 0x051.2.3.4.5.5的编码值
    • 0x2A来自42也就是40 * 1 + 2,这里是12 是ID的前两个值。

所以,最后

rawValue := []asn1.RawValue{
{FullBytes: []byte{0x88, 0x05, 0x2A, 0x03, 0x04, 0x05, 0x05}},
}
rawByte, _ := asn1.Marshal(rawValue)

_ = x509.Certificate{
ExtraExtensions: []pkix.Extension{
{
Id: asn1.ObjectIdentifier{2, 5, 29, 17},
Value: rawByte,
},
},
}

关于go - 如何使用 Go 在证书中添加 SAN 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48822600/

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