Проблема
Это известная проблема с Microsoft Outlook 2010, но есть исправление - вы можете уведомить отправителя о том, что он должен ее применить.
К сертификатам X.509 прикреплено несколько атрибутов, некоторые из них можно использовать для идентификации сертификатов. Одним из таких способов является использование серийного номера вместе с эмитентом сертификата (вместе они должны формировать уникальный идентификатор). Для зашифрованных сообщений S / MIME это называется issuerAndSerialNumber
. Альтернативой является также стандартизированный subjectKeyIdentifier
, который «должен быть» получен из открытого ключа в некоторой форме, но не определен конкретно.
Outlook 2010 (до SP1) использует subjectKeyIdentifier
и создает его, если такой идентификатор не предоставлен (из статьи базы знаний, указанной выше, выделение добавлено мной):
Синтаксис криптографических сообщений (CMS) документирован в RFC 5652. Эта спецификация позволяет использовать в качестве SignerIdentifier subjectKeyIdentifier или isserAndSerialNumber. Релиз (окончательная первоначальная версия) Outlook 2010 использует subjectKeyIdentifier в качестве SignerIdentifier, тогда как в более ранних версиях используется IssueAndSerialNumber. Если расширение subjectKeyIdentifier не определено в сертификате, Outlook 2010 RTM создает его. Некоторые почтовые клиенты или сторонние операционные системы не могут использовать сгенерированный Outlook subjectKeyIdentifier. Это приводит к тому, что получатель не может расшифровать и прочитать сообщение.
Другими словами, в Microsoft Outlook 2010 pre-SP1 используется идентификатор сертификата, который, скорее всего, не понят ни для одного другого почтового приложения. На самом деле мне не удалось использовать последнюю версию Outlook для расшифровки такого сообщения!
Как расшифровать сообщение в любом случае
Это будет непросто и включает в себя переход в командную строку. Это должно работать практически во всех операционных системах (Linux, Windows, macOS, любые BSD), убедитесь, что установлен OpenSSL. Используя OpenSSL, мы можем обеспечить дешифрование с использованием определенного ключа, игнорируя взломанный subjectKeyIdentifier
.
- Сохраните сообщение в какую-либо папку (Thunderbird сохранит его в виде
.eml
файла). Я назвал этоmail.eml
во всех дальнейших шагах. - Экспортируйте закрытый ключ (откройте « Настройки», « Дополнительно», « Сертификаты», « Просмотреть сертификаты», выберите соответствующий сертификат, « Резервное копирование», выберите ту же папку, что и для сообщения). Thunderbird запросит кодовую фразу. Теперь у вас должен быть другой файл с
.p12
расширением. Я назвал этоcertificate.p12
. - Откройте терминал. Все дальнейшие шаги будут выполнены в командной строке.
- Перейдите в папку с помощью
cd
команды. - Для расшифровки сообщения нам нужен закрытый ключ в формате PEM. Чтобы преобразовать ключ, запустите
openssl pkcs12 -in certificate.p12
-out privatekey.pem -nodes`. Вам будет предложено ввести пароль, который вы ввели в Thunderbird. Теперь используйте экспортированный ключ, чтобы фактически расшифровать сообщение:
openssl cms -decrypt -in mail.eml -inkey privatekey.pem -out decrypted.txt
Расшифрованное сообщение будет сохранено в
decrypted.txt
файле.
Сообщение может быть закодировано как quoted-printable
. Если вы столкнулись со странными последовательностями символов, такими как Gr=FC=DFe
заголовок Content-Transfer-Encoding: quoted-printable
, и включите заголовок, преобразуйте сообщение в простой текст (вам нужен Perl, возможно, ограниченный версией 5, и MIME::QuotedPrint
модуль):
perl -MMIME::QuotedPrint -pe '$_=MIME::QuotedPrint::decode($_);' <decrypted.txt >decoded.txt
decoded.txt
Файл, наконец, включает расшифрованное сообщение. Если кодировка специальных символов все еще кажется неправильной, используйте инструменты преобразования по вашему выбору или попробуйте открыть файл в Firefox или другом браузере - обычно они отлично справляются с исправлением испорченной кодировки.
Создание нового незашифрованного .eml
сообщения требует удаления всех Content-*
заголовков и перемещения любых Content-*
заголовков из дешифрованного сообщения в этом месте. Больше подробностей выходит за рамки данного руководства, слишком много разных кодировок, чтобы оказать разумную помощь.