如何使用PEM格式的公钥创建证书对象?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用PEM格式的公钥创建证书对象?相关的知识,希望对你有一定的参考价值。

我想使用iText在PDF中嵌入签名的哈希并公开。

根据iText 7中签名方法的参数,我需要通过证书链,

如何直接从公钥字符串创建此证书对象?

更新1下面是小的C#代码。您可以看到我正在尝试从公共密钥获取x509证书。该证书将用于验证来自相应私钥的签名数据。它还将用于将此公共证书和签名的哈希值嵌入PDF以进行数字签名。

在下面的代码中,我得到如下错误

错误:

'DigiSignDemo.exe'(CLR v4.0.30319:DigiSignDemo.exe):已加载'C: Users xposs source repos DigiSignDemo bin Debug itext.forms.dll。跳过的加载符号。模块已优化,调试器选项“ Just My Code”已启用。引发异常:mscorlib.dll中的“ System.Security.Cryptography.CryptographicException”mscorlib.dll中发生了类型为'System.Security.Cryptography.CryptographicException'的未处理异常找不到请求的对象。

 public static readonly string publickey = @"-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuGhYfAvWxqIwsZsO1zUN
NyFT/3US7HGLXiW48NvYn2qNyn/9hm/BFWG901YoJAjlPTcNtMo1t8lUr2dRkc3l
8YyP8SetWKbznerQuXYBZZy31kp8u3Wj+zQSroZsFn69FoMAMWXqhkw9woFumINe
gw4sMtQ1S8CucX0uXJ4a2ElzoaUKp1M+MOCATDnmsXSyf/2/ERO71SpD+alDV2rE
m5DqvEnE0t27fm7PpNeCX0XEHRvx620LooGv1Co+0w5Au37sfSjOZp1B9V0n8KFR
6gLFY7mAZ1krZJscYgkNAPIz2QE6voBR8OVSHMnNcPH+0KLfGuNVHhaTyI4naPH+
0QIDAQAB
-----END PUBLIC KEY-----
";

  public static System.Security.Cryptography.X509Certificates.X509Certificate getPublicCertificate()
        {

//Here below I am getting error
                   X509Certificate2 clientCertificate =
    new X509Certificate2(Encoding.UTF8.GetBytes(publickey));

            return clientCertificate;
        }
答案

您无法通过公共密钥创建证书。这类似于询问如何从方向盘创建汽车...在成为汽车之前,您会错过许多其他东西。

鉴于您拥有SubjectPublicKeyInfo格式的RSA公钥,可以通过.NET Core 3.0开始通过以下方式将其作为RSA密钥导入:

RSA rsa = RSA.Create();
rsa.ImportSubjectPublicKeyInfo(
    Convert.FromBase64String(@"
        MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuGhYfAvWxqIwsZsO1zUN
        NyFT/3US7HGLXiW48NvYn2qNyn/9hm/BFWG901YoJAjlPTcNtMo1t8lUr2dRkc3l
        8YyP8SetWKbznerQuXYBZZy31kp8u3Wj+zQSroZsFn69FoMAMWXqhkw9woFumINe
        gw4sMtQ1S8CucX0uXJ4a2ElzoaUKp1M+MOCATDnmsXSyf/2/ERO71SpD+alDV2rE
        m5DqvEnE0t27fm7PpNeCX0XEHRvx620LooGv1Co+0w5Au37sfSjOZp1B9V0n8KFR
        6gLFY7mAZ1krZJscYgkNAPIz2QE6voBR8OVSHMnNcPH+0KLfGuNVHhaTyI4naPH+
        0QIDAQAB"),
    out _);

// the key is loaded now.

如果您不在.NET Core上,这会困难得多。有关更多信息,请参见How to load the RSA public key from file in C#How to get RSACryptoServiceProvider public and private key only in c#

以上是关于如何使用PEM格式的公钥创建证书对象?的主要内容,如果未能解决你的问题,请参考以下文章

从 X.509 证书中提取 PEM 公钥

从PEM格式证书和PEM格式公钥生成DER格式公钥

pem 格式证书 怎么使用openssl

(Erlang)以pem格式从证书中提取公钥

如何将公钥从字符串类型转换为 PEM

OpenSSL生成公钥私钥