私の仕事は、Javaを使用してimapsメールサーバーからメールを取得することです。クライアントとして、適切な証明書を使用してメールサーバーを認証する必要があります。ただし、このメールサーバーは自己を使用しているようです。 -デフォルトではトラストストア(?)に含まれていない署名付き証明書。私が見つけたものから ここ 、システムプロパティjavax.net.ssl.trustStore
およびjavax.net.ssl.trustStorePassword
を設定する必要があります。例を示します。
System.setProperty("javax.net.ssl.trustStore","clientTrustStore.key");
System.setProperty("javax.net.ssl.trustStorePassword","qwerty");
私の質問は、これをどのように取得するかですclientTrustStore.key
および関連するパスワード?これは、電子メールサーバーの詳細を知っていれば自分で生成できるものですか、それともこの電子メールサーバーを管理するIT部門が提供する必要があるものですか。
トラストストアを読み取るためにトラストストアのパスワードは必要ありません。
通常はkeytool
ユーティリティを使用して実行されるトラストストアを作成する必要があります。 IMAPSサーバーから公開証明書を取得する必要があります。これはさまざまな方法で実行できます。 openssl
パッケージには、証明書を保存するためのツールが多数含まれています。 Thunderbirdなどの多くのメールユーティリティを使用すると、証明書をエクスポートできます。 sslデバッグを有効にし、単純なクラスに接続することで、証明書を取得できるはずです。この証明書を取得したら、keytool
ユーティリティを使用して新しいキーストアにインポートします。
安全なネットワークを使用している場合は、-Dtrust_all_cert=true
プロパティを設定するだけで、トラストストアの問題を無視できます。これにより、man-in-the-middle攻撃に対して脆弱になります。ただし、これが1回限りの取得である場合は、自己署名証明書の実用的な回避策です。コードでこれを行うこともできます。
あなたを正しい方向に導く関連する質問があります:
https://stackoverflow.com/questions/2642777/trusting-all-certificates-using-httpclient-over-httpshttps://stackoverflow.com/questions/1219208/is- it-possible-to-get-Java-to-ignore-the-trust-store-and-just-accept-whatever
パブリックサーバー証明書を取得する必要があります(サーバー管理者から、またはたとえばopenssl s_client -starttls imap -connect imap-server:143
)次に、Java keytool
ユーティリティを使用して、証明書を追加できる独自のトラストストアを作成し、そのキーストアをコードとともに出荷します。
サーバー証明書が自己署名サーバー証明書ではなく(内部)CAによって署名されている場合は、CA証明書を追加します(例:openssl s_client -starttls imap -showcerts -connect imap-server:143
)トラストストアへ