【发布时间】:2013-09-10 12:38:14
【问题描述】:
我正在尝试实现一个安全的 TCP 服务器,因此我需要创建一个 X509Certificate2 类的对象来验证客户端。
我相信这样的证书对象也应该包含私钥,以便能够解密传入的消息,不是吗?好吧,无论我如何生成证书文件,当我将其文件地址提供给 X509Certificate2 的构造函数时,对象的 HasPrivateKey 属性为 false 并且客户端未经过身份验证!
在微软的how to use the X509Certificate2 class页面中,在源代码的cmets中表明可以使用makecert程序生成证书,如下所示:
makecert -r -pe -n "CN=CERT_SIGN_TEST_CERT" -b 01/01/2010 -e 01/01/2012 -sky exchange -ss my
其中-pe 开关应该在证书中包含私钥,但是查看生成的文件我可以看出它没有这样做。
由于我在 Ubuntu 中使用 Mono 实现这个软件,我想我可以改用 openssl。所以按照this page 中给出的说明,我创建了一个私钥和一个公钥。 X509Certificate2 类接受公钥,就好像它是由 makecert 命令创建的一样,但不接受私钥(它在构造时会引发异常)。
SO 中有一个relatively old post,它提出了同样的问题,但没有接受的答案。并且给出的两个建议使用两种不同的证书格式,PKCS8 和 PKCS12,而在 the documentation 中明确表示 X509Certificate 使用 PKCS7!
反正我很困惑。有没有人能够在加载私钥的情况下使用X509Certificate2?怎么样?
【问题讨论】:
标签: c# openssl private-key x509certificate2 makecert