1

Java で自己署名証明書を処理する方法について何度も問題が寄せられており、実装が提供されることがよくあります。ただし、これらの実装によって、求めているセキュリティ/信頼が得られるかどうかはわかりません。

私の状況は次のとおりです。サーバー アプリケーションに接続するクライアント プログラムがあります。これらの両方を完全に制御できます。クライアントが https を使用してストリームをサーバーの URL に投稿し、サーバーが応答します。現在(これは私が修正しようとしているものです)、サーバーには自己署名証明書があります。Java はこれを好まないため、テストのみを目的として、証明書を信頼することで証明書を完全に無視しています。

SSLについての知識はほとんどありません。私の上司は、自己署名証明書を使用することができ、暗号を作成しない限り安全であると言っています。キー公開。これは私には正しいように思えますが、自己署名証明書は中間者攻撃に対して自動的に脆弱であると多くの投稿が述べています。これは、SSL が暗号を送信することを意味しますか。証明書と一緒にキー?

両端を制御できるので、秘密鍵を使用してデータを自分で暗号化し、最後に鍵を使用して復号化する必要がありますか? または、SSL を使用する理由はありますか?

4

3 に答える 3

3

証明書を盲目的に信頼する (接続が MITM 攻撃に対して脆弱になる) 代わりに、その特定の証明書を信頼するように Java クライアントを構成します。自己署名証明書は、本質的に SSL/TLS 接続を MITM 攻撃に対して脆弱にするわけではありません。証明書の配布と信頼の評価を、この特定の展開に固有のものにするだけです (つまり、手動で構成する必要があります)。

少なくとも 3 つの方法でこれを行うことができます (最も簡単な方法を選択してください。箇条書き #2 をお勧めします)。

  • サーバー証明書をクライアントのグローバル信頼ストア ( lib/security/cacertsJRE ディレクトリ内) にインポートします。これにより、この JRE で実行されるすべてのアプリケーションがこの証明書を信頼するようになります。
  • サーバー証明書を別のトラストストア (おそらく のローカル コピー) にインポートし、lib/security/cacertsこの特定のアプリケーションがこのトラストストアを使用するようにします。これは、javax.net.ssl.trustStoreシステム プロパティを使用して行うことができます。
  • クライアント アプリケーションで、その証明書を信頼するように構成されたSSLContext初期化済みを使用するようにします。手動で記述されたものか、その特定の証明書を含むローカル キーストアをロードすることによって初期化されX509TrustManagerたトラスト マネージャーのいずれかです(前の方法のように)。TrustManagerFactory

これらすべての詳細については、JSSE リファレンス ガイドを参照してください。

(同様の質問に対するこの回答は、特に、これらすべてを適切に行うための詳細を提供するはずですkeytool -import ...。)

于 2012-08-15T22:18:24.393 に答える
0

自己署名証明書に対する議論は、主に Web アプリケーションに適用されます。現在のインフラストラクチャでは、ブラウザは自己署名証明書を検証できません。

クライアントを制御できるため、必要な証明書をクライアントにハードコードするだけで済みます。たとえば、証明書の sha1 ハッシュを計算し、それが期待値と一致するかどうかを確認できます。そうすれば、何百もの CA を信頼する必要さえありません。

于 2012-08-15T22:12:10.323 に答える
0

安全な通信を実現するには、まず正しいコンピュータと通信できるようにする必要があります。クライアントが最初に安全な接続を確立しようとすると、サーバーに ping が送信され、サーバーはその証明書で応答します。この時点で、続行する前にサーバー証明書を検証する必要があります。証明書には、証明書が有効であることを確認するために使用できる公開鍵と署名が含まれています。たとえば、Web ブラウザーでは、ブラウザーの設定で信頼できるとリストされている機関によって署名されていることを確認することを意味します。そのチェックに失敗すると、ブラウザーに赤い警告が表示されます。あなたの場合、これは、信頼されるようにサーバー証明書を信頼ストアに手動で (またはコードで) 追加したことを意味します。

于 2012-08-15T22:40:01.593 に答える