Как создать объект сертификата из открытого ключа в формате PEM? - PullRequest
0 голосов
/ 10 ноября 2019

Я хочу использовать 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'. Пропущены символы загрузки. Модуль оптимизирован и включена опция отладчика «Просто мой код». Возникло исключение: «System.Security.Cryptography.CryptographicException» в mscorlib.dll Произошло необработанное исключение типа «System.Security.Cryptography.CryptographicException» в mscorlib.dll Не удается найти запрошенный объект.

 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;
        }

1 Ответ

0 голосов
/ 15 ноября 2019

Вы не можете создать сертификат из открытого ключа. Это похоже на вопрос о том, как создать автомобиль из рулевого колеса ... вам не хватает многих других вещей, прежде чем он станет автомобилем.

Учитывая, что у вас есть открытый ключ RSA в SubjectPublicKeyInfoформат, вы можете импортировать его как ключ RSA, начиная с .NET Core 3.0, через

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, это намного сложнее. См. Как загрузить открытый ключ RSA из файла в C # или Как получить открытый и закрытый ключ RSACryptoServiceProvider только в c # для получения дополнительной информации.

...