如何使用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没有太多关注?
答案 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"},
}
}