【问题标题】:PKI infrastructurePKI 基础设施
【发布时间】:2016-04-26 14:17:09
【问题描述】:

如何使用 golang .x509 包建立简单的链? 假设我需要自签名 CA 证书和 CA 颁发的服务器证书。 当我使用

x509.CreateCertificate(rand.Reader, &issuer, &issuer, publicKeyIssuer, privateKeyIssuer)

然后

x509.CreateCertificate(rand.Reader, &subject, &issuer, publicKeySubject, privateKeyIssuer)

它不起作用。创建证书,当服务器将其发送到浏览器时,浏览器看不到从服务器到 ca 的路径。

如果我使用 openssl 并为服务器创建证书请求,然后再创建证书,那么一切都很好

openssl req -key server.key -new -out server.req -sha256
openssl x509 -req -in server.req -CA ca.crt -CAkey ca.key -out server.crt

我知道有 x509.CreateCertificateReuest 但我现在不知道如何将请求与创建证书联系起来? 我做错了什么,或者现在可能对 x509.CreateCertificate 不太感兴趣?

【问题讨论】:

    标签: go ssl-certificate pki


    【解决方案1】:

    在提问http://www.oasis-pki.org/pdfs/Understanding_Path_construction-DS2.pdf之前我必须知道的事情

    DN 名称(CA 证书中的主题和服务器证书中的颁发者)必须相同。但主题和颁发者的 DN 名称不能相等。 DN 构成了 Issuer 和 Subject 之间的链接。

    在我的例子中,我只使用了 O=Organization 归档

    ca := x509.Certificate{
        Subject: pkix.Name{
                    Organization: []string{"O"},
                }
    }
    server := x509.Certificate{
        Subject: pkix.Name{
                    Organization: []string{"O"},
                }
    }
    

    发行者和主题的 DN 相同。这就是浏览器找不到路径的原因。它只是向pkix 添加更多信息,例如CommonName。它将使 DN 独一无二。

    ca := x509.Certificate{
        Subject: pkix.Name{
                    CommonName:   []string{"CA"},
                    Organization: []string{"XUnit"},
                }
    }
    server := x509.Certificate{
        Subject: pkix.Name{
                    CommonName:   []string{"server"},
                    Organization: []string{"XUnit"},
                }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-20
      • 2011-06-19
      • 2013-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多