2011-03-28 304 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);