导出X.509证书没有私钥

时间:2009-05-21 16:15:27

标签: c# .net ssl-certificate x509certificate2

我认为这很简单,但显然不是。我安装了一个具有私钥,可导出的证书,我想以编程方式仅使用公钥导出它。换句话说,我想要一个等效于在通过certmgr导出并导出到.CER时选择“不导出私钥”的结果。

似乎所有X509Certificate2.Export方法都会导出私钥(如果存在),如PKCS#12,这与我想要的相反。

有没有办法使用C#来实现这一目标,还是我需要开始深入了解CAPICOM?

3 个答案:

答案 0 :(得分:18)

对于其他可能偶然发现的人,我想通了。如果将X509ContentType.Cert指定为X509Certificate.Export的第一个(也是唯一的)参数,则仅导出公钥。另一方面,指定X509ContentType.Pfx包括私钥(如果存在)。

我本来可以发誓我上周看到了不同的行为,但我在测试时必须已经安装了私钥。当我今天删除该证书并从头开始重新开始时,我看到导出的证书中没有私钥。

答案 1 :(得分:8)

我发现以下程序有助于让我自己确认证书的RawData属性只包含公钥(MSDN对此不清楚),以及上面关于X509ContentType.Cert对{的回答{1}}按预期工作:

X509ContentType.Pfx

输出以下内容:

Orig   : RawData.Length = 1337, HasPrivateKey = True
cert A : RawData.Length = 1337, HasPrivateKey = False, certBytes.Length = 1337
cert B : RawData.Length = 1337, HasPrivateKey = True, certBytes.Length = 3187
cert C : RawData.Length = 1337, HasPrivateKey = False, certBytes.Length = 1337
RawData equals original RawData: True

答案 2 :(得分:1)

您可能会发现OpenSSL .NET wrapper有用。