7

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

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

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

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

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

1 ответ1

15

Проблема

Это известная проблема с 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:: Модуль MIME::QuotedPrint ):

perl -MMIME::QuotedPrint -pe '$_=MIME::QuotedPrint::decode($_);' <decrypted.txt >decoded.txt

Наконец, файл decoded.txt будет содержать расшифрованное сообщение. Если кодировка специальных символов все еще кажется неправильной, используйте инструменты преобразования по вашему выбору или попробуйте открыть файл в Firefox или другом браузере - обычно они отлично справляются с исправлением испорченной кодировки.

Для создания нового незашифрованного .eml сообщения требуется удалить все заголовки Content-* и переместить любые заголовки Content-* из дешифрованного сообщения в этом месте. Больше подробностей выходит за рамки этого руководства, слишком много разных кодировок, чтобы оказать разумную помощь.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .