从c#中的X509Certificate2对象获取私钥作为PEM

时间:2018-02-06 19:02:41

标签: c# ssl export private-key x509certificate2

我正在开发一个项目,要求我使用AMQP和ssl。这适用于基于Linux的云服务器和Windows机器之间的通信。我创建了本地证书颁发机构,证书和私钥。由于我使用Azure,因此必须将其存储为pfx文件。我没有使用密码来创建pfx。

云服务安装脚本(基于linux bash)可以轻松地使用openssl将pfx转换回其部分。我正在努力解决如何使用运行需要读取AMQP消息的服务的本地Windows机器上的密钥。

长话短说,在c#中有一个简单的方法来获取原始私钥

-----BEGIN RSA PRIVATE KEY-----
MIIEowI....
-----END RSA PRIVATE KEY-----
一旦我将pfx文件导入证书管理器,

出了X509Certificate2 privatekey属性?

到目前为止我的代码:

X509Store certStore = new X509Store(StoreName.My, StoreLocation.LocalMachine);
certStore.Open(OpenFlags.ReadOnly);

X509Certificate2 caCert = certStore.Certificates.Find(X509FindType.FindByThumbprint, "3C97BF2632ACAB5E35B48CB94927C4A7D20BBEBA", true)[0];

RSACryptoServiceProvider rsa1 = (RSACryptoServiceProvider)caCert.PrivateKey;

修改 标记为重复不适用。我找到了一个运作良好的解决方案。我在Windows中找不到如何从证书存储转到pem文件的确切示例。

我使用了http://www.bouncycastle.org/csharp/

中找到的实用程序
X509Store certStore = new X509Store(StoreName.My, StoreLocation.LocalMachine);
certStore.Open(OpenFlags.ReadOnly);

X509Certificate2 caCert = certStore.Certificates.Find(X509FindType.FindByThumbprint, "3C97BF2632ACAB5E35B48CB94927C4A7D20BBEBA", true)[0];


RSACryptoServiceProvider pkey = (RSACryptoServiceProvider)caCert.PrivateKey;


AsymmetricCipherKeyPair keyPair = DotNetUtilities.GetRsaKeyPair(pkey);
using (TextWriter tw = new StreamWriter("D:\\private.pem"))
{
    PemWriter pw = new PemWriter(tw);
    pw.WriteObject(keyPair.Private);
    tw.Flush();
}

0 个答案:

没有答案