Как получить серийный номер сертификата, которым было зашифровано сообщение?

Я использую Java с BouncyCastle для расшифровки и проверки сообщений p7m s/mime. Когда закрытый ключ, который я выбрал для расшифровки сообщения, НЕ совпадает, я получаю сообщения об ошибках от Bouncy Castle, таких как «ключ распаковки исключений» или «плохое заполнение».

Но как я могу вывести серийный номер сертификата, который использовался для шифрования сообщения? Например, клиенту было бы полезно увидеть, что он выбрал старый сертификат.

Windows предлагает консольное приложение «certutil» для анализа потока p7m. Серийный номер и указанный там эмитент:

CMSG_KEY_TRANS_RECIPIENT(1) CERT_ID_ISSUER_SERIAL_NUMBER(1) Seriennummer: b33...


person Dan    schedule 18.04.2017    source источник
comment
пожалуйста, добавьте код, который выдает ошибку   -  person Egl    schedule 18.04.2017
comment
Я думаю, что ошибка здесь не важна. Мой вопрос заключался в том, как получить серийный номер сертификата, который использовался для шифрования сообщения.   -  person Dan    schedule 19.04.2017


Ответы (1)


Наконец-то узнал сам :-)

Внутри bouncycastle есть класс, который позволяет анализировать структуру ASN зашифрованного сообщения.

ASN1InputStream bIn = new ASN1InputStream(message.getEncoded());
ASN1Primitive obj = bIn.readObject();
system.out.println(ASN1Dump.dumpAsString(obj));

Также внутри находится серийный номер сертификата. Поэтому я перешел к исходному коду и скопировал нужные мне части, чтобы обнаружить его и сохранить в глобальной переменной.

person Dan    schedule 25.04.2017