从自签名证书

时间:2016-11-24 17:00:53

标签: c# encryption cryptography x509

我正在为第三方API构建存根。向第三方提出的请求必须使用提供的公钥加密。作为存根的一部分,我想解密传入的请求。

我计划更改我的调用代码使用的公钥,以便我可以使用我的私钥解密它。

我有一个自签名证书,用于我希望可以重复使用的应用程序的其他部分。

我遇到的问题是以我需要的格式从证书中获取公钥。

基于Ian Boyd(this onethis one)的几个答案,我需要获取公钥的格式是" X.509 SubjectPublicKeyInfo / OpenSSL PEM ",这是我从第三方收到的密钥的格式。例如:

-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDcZ/r0nvJyHUUstIB5BqCUJ1CC
Cd1nzle4bEpPQJ/S0Wn7mV2FDAeh+UcbVhZu9n+5zypYNjeZKapPqBLoT8eCK51y
Kpzeb8LuEm3P8PK4xN18XBrIF1GprN8IIgSdK9f5SwnemutcURrY+PlWnvj7N5s/
03RlJA3/NHVXpPW/VQIDAQAB
-----END PUBLIC KEY-----

我已尝试使用X509Certificate2.GetPublicKey方法,然后base64对其进行编码,但这为我提供了键入" PEM DER ASN.1 PKCS#1 RSA "格式。

有谁知道如何以我需要的格式获取公钥?我不一定需要代码中的密钥,我只需要一个可以存储在我的数据库中的字符串值。

我的证书/私人/公共/加密知识仅限于任何帮助,我们将非常感谢!

1 个答案:

答案 0 :(得分:0)

我能够使用Bouncy Castle的PemWriter以{I>的格式构建公钥:

var cert = Org.BouncyCastle.Security.DotNetUtilities.FromX509Certificate(x509certificate);

using (var stringWriter = new StringWriter())
{
    var pemWriter = new Org.BouncyCastle.OpenSsl.PemWriter(stringWriter);
    pemWriter.WriteObject(cert.GetPublicKey());
    var pem = stringWriter.ToString();
}