web-dev-qa-db-ja.com

Outlookから送信された壊れたS / MIMEメッセージを復号化するにはどうすればよいですか?

最近、Outlookから送信された暗号化されたメッセージを受信しましたが、復号化できません。 Thunderbirdは、代わりに次のエラーメッセージを出力しています。

Thunderbirdはこのメッセージを復号化できません

送信者は、デジタル証明書の1つを使用してこのメ​​ッセージを暗号化しましたが、Thunderbirdはこの証明書と対応する秘密鍵を見つけることができませんでした。可能な解決策:

  • スマートカードをお持ちの場合は、今すぐ挿入してください。
  • 新しいマシンを使用している場合、または新しいThunderbirdプロファイルを使用している場合は、バックアップから証明書と秘密鍵を復元する必要があります。証明書のバックアップは通常、「。p12」で終わります。

また、他のメールクライアント(最近のバージョンのOutlook!を含む)がメッセージの復号化に失敗しました。メールは非常に重要であり、送信者にメールの再送信を依頼したくないので、どうすればよいですか?

7
Jens Erat

問題

これは Microsoft Outlook 2010の既知の問題 ですが、修正が提供されています-送信者に適用する必要があることを通知することをお勧めします。

X.509証明書にはいくつかの属性が添付されており、そのうちのいくつかは証明書の識別に使用できます。そのような方法の1つは、証明書発行者と一緒にシリアル番号を使用することです(一緒に、それらは一意の識別子を形成する必要があります)。 S/MIME暗号化メッセージの場合、これはissuerAndSerialNumberと呼ばれます。別の方法として、標準化された subjectKeyIdentifier もあります。これは、何らかの形式で公開鍵から派生する必要がありますが、具体的には定義されていません。

Outlook 2010(SP1より前)はsubjectKeyIdentifierを使用し、そのような識別子が提供されていない場合は1つ作成します(上記のリンクされたナレッジベースの記事から、私が追加した強調表示)。

暗号化メッセージ構文(CMS)は、RFC 5652に文書化されています。この仕様では、subjectKeyIdentifierまたはissuerAndSerialNumberのいずれかをSignerIdentifierとして使用できます。 Outlook 2010のリリース(RTM)バージョンはsubjectKeyIdentifierをSignerIdentifierとして使用しますが、以前のバージョンはissuerAndSerialNumberを使用します。 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-*ヘッダーを移動する必要があります。詳細はこのチュートリアルの範囲外です。さまざまなエンコーディングが多すぎて、適切な支援を提供できません。

14
Jens Erat