PKI基础设施

时间:2016-01-20 16:15:05

标签: go ssl-certificate pki

如何使用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没有太多关注?

1 个答案:

答案 0 :(得分:1)

在提出问题http://www.oasis-pki.org/pdfs/Understanding_Path_construction-DS2.pdf

之前我必须知道的事情

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

在我的情况下,我只使用<= p>中的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"},
            }
}