私はJava HTTPS接続で実行されるJavaアプリケーションに取り組んでいます。このアプリケーションはユーザーにメールを送信します。これらのメールを中間者攻撃から保護したいと思います。他の潜在的な脅威私の質問は:
すべてが正しく行われていると仮定すると(everythingこれは、特に自分で行う場合は与えられていません)、HTTPS
はメールをメールとして保護しません送信するためにそのプロトコルを使用していません。 「電子メールプロトコル」を使用して実際の電子メールを他のサーバーに実際に送信する必要があるためです:SMTP
。しかし、それでも、これは悪い考えです。
たとえば、これらの「他のサーバー」は正確には何ですか?たとえば、受信者がGmailにいる場合、Gmailサーバーにメールを送信する必要がありますよね?ただし、これはSMTP
の動作とは異なります。電子メールは、最終的な宛先に到達するまでメールサーバーからメールサーバーにホップします。この接続は直接的なものでもかまいませんが、実際にそうなるという保証はありません。この単純な事実により、SMTP
内のエンドツーエンドの暗号化は設計上不可能になります:各領域/ MTAはMitMです!はい、SMTP
を安全にしようとする試みがありましたが、デザインはまだセキュリティの観点からは悪いです。これを参照してください Wiki記事 たとえば、特に:
必須の証明書検証は、インターネットメール配信では実行できません。その結果、TLS経由で配信されるほとんどの電子メールは、便宜的な暗号化のみを使用します。
Opportunisticは、途中で何かが壊れている場合、何かが適切に構成されていない場合など、誰かが違法に読みたいときにデフォルトでテキストをクリアすることを意味します。そして最悪のことは、最初のリレー(別の回答ではMTAと呼ばれます)への接続が実際に安全である(構成での8時間の時間と徹底的なチェックで無駄な時間を費やしたため)ためではなく、最初のリレーと2番目のリレー間の接続が安全になります。あなたはそのことについて何の保証もありません(そして繰り返しになりますが、リレー自体は悪である可能性があります)。
ソリューション?
クリアテキストのメールを送信しないでください。機密性が必要な場合は、PGP/GPG、S/MIMEまたは同等のものを使用してメールを暗号化します。これらはエンドツーエンドの暗号化を提供しますが、ユーザー側とユーザー側からかなりの構成が必要です。適切に実行するには(実際にはプライバシーを提供するため)、各ユーザーを手動で認証する必要があります。これは不可能かもしれません。
別の解決策は、エンドツーエンドの暗号化を提供する、既に安全であるように設計されたプロトコルを使用することです(一部のIMプロトコルは実際にはこれに非常に適しています)。
他の回答で提案されているように、認証されたユーザーのみがアクセスできる保護されたHTTPS
ページへのリンクを電子メールで提供します(URLのトークンは使用できません)。
ただし、最低限のプライバシーの保証が必要な場合は、SMTP
(TLS/StartTLSの有無にかかわらず)を使用しないでください。 SMTP
は安全ではありません。
少なくともダイレクトメールサーバー(Microsoft/Apple/Google)と通信しているユーザー(クライアント)の観点から、通信パスと構成を確認する1つの方法は、Wireshark(スニッフィングツールとパケットアナライザー)を実行してからメールを送信することです1つのアカウントを他のアカウントに。メールクライアントの設定方法に応じて、作成中の通信パスと、暗号化(少なくとも初期パスに対して)が暗号化されているかどうか、つまり、あるタイプのTLS/SSL暗号化パスを使用しているかどうかを確認できます。会社のメールサーバーに入ると、異なるDNSおよびメールサーバーのホップからホップへのパス全体が暗号化されているかどうかを評価することは非常に困難です。 SMTP、POP3 IMAP、MIMEはすべて、デフォルトでデータ暗号化またはヘッダー暗号化を使用しません。
WebアプリケーションがHTTPS接続のみを受け入れているというだけの理由で、Webアプリケーションが送信するすべての電子メールが暗号化されているわけではありません...これは、基になるSMTPサーバーの責任です。暗号化された電子メールのみを送信するようにSMTPサーバーを構成する必要があります。そう:
メールの内容が本当にそれほど機密である場合、私はそれがアプリケーションをまったく残さないことを選択します。ユーザーにメールを送信して、ポータルで新しいメッセージが利用可能であり、ログインするにはメッセージを表示する必要があることを通知することができます。もちろん、これは直接の電子メールよりもユーザーフレンドリーではありません...これは、データの機密性と使いやすさを比較検討して決定する必要がある部分です。