问题描述
我有一个使用 openssl
使用以下命令生成的 PEM 文件:
.\openssl.exe pkcs12 -in "C:\temp\mytest.pfx" -nokeys -out "C:\temp\mytest.publicchain.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-----
我也在使用 Apache 的 AxualFramework
,我需要为它提供 PEM 公钥和私钥。他们的描述是:
用于身份验证的客户端公钥字符串(PEM 格式)。
用于身份验证的客户端私钥字符串(PEM 格式)。
现在我的问题是,如何从我的 PEM 文件或 PFX 文件中提取它?哪个更容易做到?
我也将 BouncyCastle 安装为 Nuget 包,但我不确定使用什么方法。
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 命令导出了没有密钥的证书,因此您将无法使用 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<link rel="stylesheet" href="{{ asset('css/app.css') }}">
</head>
<body>
<div class="red">
@yield('content')
</div>
</body>
</html>
来提取私钥。
相反,您可以从 PFX 导出 RSA 私钥,然后从私钥中提取公钥:
mytest.publicchain.pem
文件 openssl pkcs12 -in mytest.pfx -nocerts -nodes -out mytest.key
openssl rsa -in mytest.key -pubout -out mytest.pub
和 mytest.key
分别是 PEM 格式的私钥和公钥。