Как расшифровать испорченное сообщение S / MIME, отправленное Outlook?

3358
Jens Erat

Недавно я получил зашифрованное сообщение, отправленное Outlook, которое не могу расшифровать. Вместо этого Thunderbird выводит следующее сообщение об ошибке:

Thunderbird не может расшифровать это сообщение

Отправитель зашифровал это сообщение для вас, используя один из ваших цифровых сертификатов, однако Thunderbird не смог найти этот сертификат и соответствующий закрытый ключ. Возможные решения:

  • Если у вас есть смарт-карта, вставьте ее сейчас.
  • Если вы используете новую машину или новый профиль Thunderbird, вам потребуется восстановить сертификат и закрытый ключ из резервной копии. Резервные копии сертификатов обычно заканчиваются на «.p12».

Также другие почтовые клиенты (включая последнюю версию Outlook!) Не смогли расшифровать сообщение. Поскольку почта очень важна, и я не хочу просить отправителя отправить письмо, что я могу сделать?

7

1 ответ на вопрос

15
Jens Erat

Проблема

Это известная проблема с 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.

  1. Сохраните сообщение в какую-либо папку (Thunderbird сохранит его в виде .emlфайла). Я назвал это mail.emlво всех дальнейших шагах.
  2. Экспортируйте закрытый ключ (откройте « Настройки», « Дополнительно», « Сертификаты», « Просмотреть сертификаты», выберите соответствующий сертификат, « Резервное копирование», выберите ту же папку, что и для сообщения). Thunderbird запросит кодовую фразу. Теперь у вас должен быть другой файл с .p12расширением. Я назвал это certificate.p12.
  3. Откройте терминал. Все дальнейшие шаги будут выполнены в командной строке.
  4. Перейдите в папку с помощью cdкоманды.
  5. Для расшифровки сообщения нам нужен закрытый ключ в формате PEM. Чтобы преобразовать ключ, запустите openssl pkcs12 -in certificate.p12-out privatekey.pem -nodes`. Вам будет предложено ввести пароль, который вы ввели в Thunderbird.
  6. Теперь используйте экспортированный ключ, чтобы фактически расшифровать сообщение:

    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-*заголовков из дешифрованного сообщения в этом месте. Больше подробностей выходит за рамки данного руководства, слишком много разных кодировок, чтобы оказать разумную помощь.

Вам нужно убрать заголовки писем из письма, прежде чем пытаться их декодировать? Если нет, то почему нет? (Поддерживает ли `openssl` формат .eml?) Да, и дистрибутив Debian - это либо« Debian GNU / Linux », либо более короткий« Debian », но никогда не просто« Debian Linux ». wizzwizz4 7 лет назад 1
Команда `openssl cms` обрабатывает сообщения MIME. From `man cms`: _" Команда cms обрабатывает почту S / MIME v3.1. Она может шифровать, расшифровывать, подписывать и проверять, сжимать и распаковывать сообщения S / MIME. "_ Все содержимое Debian все равно не имеет значения, предыдущая версия требовала `munpack`, который, похоже, не упакован для всех дистрибутивов. Jens Erat 7 лет назад 0

Похожие вопросы