登录
首页 >  Golang >  Go问答

如何从TLS证书中提取SubjectKeyId?

来源:stackoverflow

时间:2024-02-15 14:03:23 356浏览 收藏

各位小伙伴们,大家好呀!看看今天我又给各位带来了什么文章?本文标题《如何从TLS证书中提取SubjectKeyId?》,很明显是关于Golang的文章哈哈哈,其中内容主要会涉及到等等,如果能帮到你,觉得很不错的话,欢迎各位多多点评和分享!

问题内容

我正在使用 go 和 mdns,并且需要使用 mdns 记录来公布subjectkeyid。 ski 是 x509 证书的一部分,但无法从最终 tls 证书中读取:

priv, err := rsa.GenerateKey(rand.Reader, 2048)
if err != nil {
    log.Fatal(err)
}

template := x509.Certificate{
    SerialNumber: big.NewInt(1),
    Subject: pkix.Name{
        Organization: []string{"Acme Co"},
    },
    NotBefore:             time.Now(),
    NotAfter:              time.Now().Add(time.Hour * 24 * 180),
    KeyUsage:              x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature,
    ExtKeyUsage:           []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth},
    BasicConstraintsValid: true,
}

derBytes, err := x509.CreateCertificate(rand.Reader, &template, &template, publicKey(priv), priv)
if err != nil {
    log.Fatalf("Failed to create certificate: %s", err)
}

tlsCert := tls.Certificate{
    Certificate: [][]byte{derBytes},
    PrivateKey:  priv,
}

如何从生成的 tls.certificate 中提取或生成 ski?


解决方案


您必须自行构建它并将其作为证书模板的 subjectkeyid 提供。

RFC 5280 section 4.2.1.2 建议了几种用于生成主题密钥标识符的潜在方法。最流行的方法是仅采用公钥 asn.1 编码的 sha1 哈希值。例如,如果 pub*rsa.publickey,您可以执行以下操作:

keyBytes := x509.MarshalPKCS1PublicKey(pub)
keyHash := sha1.Sum(keyBytes)
ski := keyHash[:]

然后只需将证书模板的 subjectkeyid 字段设置为 ski,然后再调用 x509.createcertificate

本篇关于《如何从TLS证书中提取SubjectKeyId?》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>