.net - 获取 PEM 公钥和私钥或从 PFX 文件

标签 .net ssl asp.net-core-3.1 pem x509certificate2

我有一个使用 openssl 生成的 PEM 文件使用以下命令:

.\openssl.exe  pkcs12 -in "C:\temp\mytest.pfx" -nokeys -out "C:\temp\mytest.publicchain.pem"
这会生成一个包含以下内容的 PEM 文件:
-----BEGIN CERTIFICATE-----
MIIJbTCCByGgAwIBAgITfgAAADLWmZPQJCEhKgAAAAAAMjBBBgkqhkiG9w0BAQow
NKAPMA0GCWCGSAFlAwQCAwUAoRwwGgYJKoZIhvcNAQEIMA0GCWCGSAFlAwQCAwUA
... [removed rest of key for obvious reasons]
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
MIIHFzCCBP+gAwIBAgITHgAAAAR0/hITgHTMqgAAAAAABDANBgkqhkiG9w0BAQ0F
ADAcMRowGAYDVQQDExFFbmVjby1TQkRULVJvb3RDQTAeFw0xOTA4MjcyMjMwMjFa
... [removed rest of key for obvious reasons]
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
MIIFsDCCA5igAwIBAgIQM4wn3z5DLaxG8ARk2MpMJTANBgkqhkiG9w0BAQ0FADAc
MRowGAYDVQQDExFFbmVjby1TQkRULVJvb3RDQTAeFw0xODA5MTcwNzIyNDhaFw0y
... [removed rest of key for obvious reasons]
-----END CERTIFICATE-----
我也在使用 AxualFramework来自 Apache,我需要为它提供 PEM 公钥和私钥。他们的描述是:

Client's public key string (PEM format) used for authentication.

Client's private key string (PEM format) used for authentication.


现在我的问题是,如何从我的 PEM 文件或 PFX 文件中提取它?哪个更容易做?
我也将 BouncyCaSTLe 作为 Nuget 包安装,但我不确定使用什么方法。
我还尝试使用以下内容从 PFX 文件中获取它:
X509Certificate2 cert = certificateCollection[0];
var pubKey = cert.PublicKey.Key.ExportSubjectPublicKeyInfo();
var pubKeyString = Convert.ToBase64String(pubKey); // Is this even correct?

// how to get private key...?
但我真的不知道这是否是这样做的方式......
任何人都可以指导我正确的方向吗?

最佳答案

由于您已经在使用 OpenSSL,您可以使用它的命令行工具在不同的格式之间进行转换。在您的情况下,您已经运行的 pkcs12 命令导出了没有 key 的证书,因此您将无法使用 mytest.publicchain.pem提取私钥。
相反,您可以从 PFX 导出私钥 RSA key ,然后从私钥中提取公钥:

openssl pkcs12 -in mytest.pfx -nocerts -nodes -out mytest.key
openssl rsa -in mytest.key -pubout -out mytest.pub
文件 mytest.keymytest.pub然后分别是 PEM 格式的私钥和公钥。

关于.net - 获取 PEM 公钥和私钥或从 PFX 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65394423/

相关文章:

c# - ASP.NET-Core 应用程序根目录中的 NLog 日志文件

c# - 如何在 C# 中对 Azure 机器学习管道终结点使用服务主体身份验证?

c# - 创建用于 Entity Framework 6 的表达式

.net - 使用 For 循环优化大数据比较

c# - 在 C# 中导入证书时 `PersistKeySet` -StorageFlag 的影响是什么

php - 通过 ADODB 库的 MySQL SSL 连接

c# - Microsoft Visual Studio 2019 : The project file cannot be opened. 无法定位 .NET SDK

.NET 电子邮件拦截

c# - RavenDB 的 ID POCO 属性是否必须区分大小写?

python - 为什么我的输出是抓空括号?