aer*_*ite 5 openssl go x509certificate subject-alternative-name
我需要在证书中指定registeredID。
因此,当使用OpenSSL签署证书时,我将此添加到配置文件中。
[ alternate_names ]
DNS.1 = localhost
RID.1 = 1.2.3.4.5.5
Run Code Online (Sandbox Code Playgroud)
这里1.2.3.4.5.5是OID。
我遵循了如何在Stack Overflow 中的openssl.cnf文件中格式化OID主题替代名称条目。
现在,我想在Go中生成证书。下面是我当前的配置
cfg := cert.Config{
CommonName: name,
Organization: []string{"Elasticsearch Operator"},
AltNames: cert.AltNames{
DNSNames: []string{
"localhost",
},
},
Usages: []x509.ExtKeyUsage{
x509.ExtKeyUsageServerAuth,
x509.ExtKeyUsageClientAuth,
},
}
Run Code Online (Sandbox Code Playgroud)
在此配置中,如何添加OID号。
没有直接的方法可以使用Go在证书中添加对象标识符。
我们找到了一个定制的解决方案。
Go提供了在证书中添加其他SAN信息的选项
x509.Certificate{
ExtraExtensions: []pkix.Extension{
{
// Here, We add SAN additional with specific ID
},
},
}
Run Code Online (Sandbox Code Playgroud)
根据2.5.29.17-使用者备用名称,SAN的OID为2.5.29.17
可以说,我们将1.2.3.4.5.5在SAN中添加registeredID 。并且需要将此RID添加为Tag #8。(根据2.5.29.17)
所以这个扩展的字节值是 []byte{0x88, 0x05, 0x2A, 0x03, 0x04, 0x05, 0x05}
这里,
0x88 是特定于上下文的标签值 #80x05 是编码值的长度0x2A, 0x03, 0x04, 0x05, 0x05 是的编码值 1.2.3.4.5.5
0x2A来自42其是 40 * 1 + 2,这里1和2是第一ID的2个值。所以,最后
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,
},
},
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
452 次 |
| 最近记录: |