我正在尝试实现一个安全的 TCP 服务器,因此我需要创建一个类对象X509Certificate2
以对客户端进行身份验证。
我相信这样的证书对象应该包含私钥(以及)以便能够解密传入的消息,不是吗?好吧,无论我如何生成证书文件,当我将其文件地址提供给X509Certificate2
' 的构造函数时,对象的HasPrivateKey
属性都是 false 并且客户端未经过身份验证!
在 Microsoft 关于如何使用X509Certificate2
该类的页面中,在源代码的注释中表明可以使用makecert
如下程序生成证书:
makecert -r -pe -n "CN=CERT_SIGN_TEST_CERT" -b 01/01/2010 -e 01/01/2012 -sky exchange -ss my
在哪个-pe
开关中应该在证书中包含私钥,但是查看生成的文件我可以看出它没有这样做。
由于我使用 Mono 在 Ubuntu 中实现这个软件,所以我想我可以使用它openssl
。因此,按照此页面中给出的说明,我创建了一个私钥和一个公钥。X509Certificate2
类接受公钥,就好像它是由makecert
命令创建的,但不接受私钥(它在构造时抛出异常)。
SO中有一篇相对较旧的帖子提出了同样的问题,但没有公认的答案。并且给出的两个建议使用两种不同的证书格式,PKCS8 和 PKCS12,而在文档中明确表示X509Certificate
使用 PKCS7!
反正我都糊涂了。有没有人能够使用X509Certificate2
加载的私钥?如何?