2011-03-28 69 views
2

這是一個擴展問題:如何將CRL地址添加到自簽名CA證書?

how-do-i-create-a-self-signed-certificate-for-code-signing-on-windows

爲了進一步利用這個,如果我創建了一個CA證書,並具備創建一套SPC證書的,我怎麼去創造吊銷列表和分發他們? (注意:我不知道CRL如何工作,它們是如何分佈的等)如果我向GUESS說明它是如何工作的,我希望CA證書定義了一些可以下載CRL的HTTP地址,並且Windows會聯繫第一次查詢證書鏈時,每次當前的CRL過期時......我只需要創建一個簽名的Web地址,以分發證書序列號......?

編輯:自ANSWERED

對於任何人誰是有興趣,充氣城堡是一個Java + C#庫提供了一個巨大的一套PKI加密的API,包括證書生成。

他們的示例代碼(在他們的下載中)演示瞭如何生成CA,中級和「個人」證書的鏈接集。

什麼它不顯示,是如何正確分配一個基於HTTP的CRL - 你可以用這個代碼,這樣做的:

GeneralName gn = new GeneralName(new DerIA5String("http://localhost/revocationlist.crl"), 6); 


GeneralNames gns = new GeneralNames(gn); 
DistributionPointName dpn = new DistributionPointName(gns); 
DistributionPoint distp = new DistributionPoint(dpn, null, null); 

DerSequence seq = new DerSequence(distp); 

v3CertGen.AddExtension(X509Extensions.CrlDistributionPoints, false, seq); 

回答

1

假設你有一個CA證書,有些證書集,由CA簽署證書。然後,您可以創建一個CRL,該CRL將(可能)包含撤銷證書的標識,這些標識以前使用CA證書進行了簽名。事實上,您可以通過相應的證書擴展名(CRLDistributionPoint)將CRL的URL添加到CA證書本身。

正如你還沒有指定,你用什麼樣的工具或庫來生成證書,我不能說如何添加擴展。 PS:我建議你學習使用它的技術。特別是在實施安全性方面。否則,最終會出現情況,比Comodo更糟糕,它的子分支機構最近剛發佈了針對谷歌,雅虎等的僞證書。

+0

喜尤金,感謝 我目前使用makecert工具,這些工具的Visual Studio/Platform SDK中的一部分。 絕對同意學習所有這些 - 這是我目前的目標,瞭解它是如何聯繫在一起的,以及它可以實現的目標。我已閱讀了關於科摩多崩潰的所有內容,我不敢相信他們自己沒有被撤銷! – Adam 2011-03-28 21:57:24

+0

@Adam Comodo是一個根CA,他們不能被撤銷。這是他們的客戶之一,誰發佈了欺詐證書。關於要閱讀的書籍 - 我強烈推薦兩本書:http://www.eldos.com/forum/read.php?FID=7&TID=1842我讀過它們,並強烈建議將它們作爲基礎。 – 2011-03-29 06:06:41

+0

@Adam關於makecert工具 - 從描述看來,他們似乎沒有讓你指定CRLDistributionPoint擴展。所以你可能需要編寫一些代碼來生成並添加所需的擴展。您可以使用OpenSSL,或者您可以使用我們的SecureBlackbox產品(http://www.eldos.com/sbb/desc-pki.php)的PKIBlackbox包。 – 2011-03-29 06:09:04

3

由於加密-147提供的代碼已更改爲

GeneralName gn = new GeneralName(GeneralName.uniformResourceIdentifier, new DERIA5String(crlUrl)); 
GeneralNames gns = new GeneralNames(gn); 
DistributionPointName dpn = new DistributionPointName(gns); 
DistributionPoint distp = new DistributionPoint(dpn, null, null); 
DERSequence seq = new DERSequence(distp); 
certGen.addExtension(Extension.cRLDistributionPoints, false, seq);