2016-01-20 87 views
2

如何使用golang .x509包建立簡單的鏈? 假設我需要CA頒發的服務器的自簽名CA證書和證書。 當我使用PKI基礎設施

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

我有什麼之前就知道問的問題http://www.oasis-pki.org/pdfs/Understanding_Path_construction-DS2.pdf

DN名稱(在服務器證書的CA證書和發行人主體)必須是相同的。但是主體和發行人的DN名稱不能相同。 DN構成發行人與主體之間的鏈接。

在我來說,我只用O =組織提交的

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

DN的是同爲發行人的subject.That就是爲什麼瀏覽器無法找到路徑。只需向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"}, 
      } 
}