从X509Certificate对象导出私钥

RRR*_*RRR 8 c# base64 certificate x509certificate2 private-key

我们使用C#代码我们用.p12文件构建X509Certificate2,在构造函数中我们插入证书的路径,证书的密码.我们还将其标记为可导出,如下所示:

X509Certificate2 x509Certificate2 = new X509Certificate2
("...\\MyCerificate.p12", "P@ssw0rd", X509KeyStorageFlags.Exportable);
Run Code Online (Sandbox Code Playgroud)

我们通过以下方式获取私钥作为AsymmetricAlgorithm格式:

x509Certificate2.PrivateKey
Run Code Online (Sandbox Code Playgroud)

现在,我们希望从证书中获取私钥作为Base64格式 - 但我们不知道如何做到这一点,它对我们如此重要.

pou*_*pou 6

重要的问题是为什么base64

如果这是用于您自己的应用程序,那么您可以将私钥保存为 XML 字符串(更容易:-)。

string xml = x509Certificate2.PrivateKey.ToXmlString (true);
Run Code Online (Sandbox Code Playgroud)

如果您想要base64(再次仅用于您的应用程序),您可以导出密钥(RSAParameters),然后连接每个byte[]并将合并的输出转换为 base64 字符串。

但是,如果您想与需要base64私钥的其他应用程序互操作,则您需要知道格式(在base64字符串中)。例如,在许多情况下,私有密钥是PEM编码(这是一个特殊的页眉/页脚的base64,看到一个例子X509Certificate)。

如果这是您要查找的内容,那么您首先需要在PKCS#8结构中对私钥进行编码,然后转入 base64 并添加页眉/页脚。您可以Mono.Security.dll 中找到一些有用的代码(来自 Mono 项目的 MIT.X11 许可代码)。


Rob*_*ert 2

您可以简单地使用 X509Certificate2 的 PrivateKey 属性。实际返回的私钥实现取决于证书中使用的算法 - 通常是 RSA:

rsaObj = (RSACryptoServiceProvider)myCertificate.PrivateKey; 
Run Code Online (Sandbox Code Playgroud)

之后,您应该能够从它的 ExportParameters 属性中获取 RSA 密钥信息。