[解決済み】Javaクライアントでサーバーの自己署名入りssl証明書を受け入れる。
2022-04-02 18:25:54
質問
標準的な問題のようですが、明確な指示がどこにも見当たりません。
私は、おそらく自己署名された(または期限切れの)証明書を持つサーバーに接続しようとするJavaコードを持っています。コードは次のエラーを報告します。
[HttpMethodDirector] I/O exception (javax.net.ssl.SSLHandshakeException) caught
when processing request: sun.security.validator.ValidatorException: PKIX path
building failed: sun.security.provider.certpath.SunCertPathBuilderException:
unable to find valid certification path to requested target
私の理解では キーツール で、javaにこの接続を許可していいと伝えてください。
この問題を解決するためのすべての指示は、私がkeytoolを完全に使いこなしていることを前提としています。
サーバ用の秘密鍵を生成し、鍵ストアにインポートする。
どなたか詳しい説明を載せてくださる方はいらっしゃいませんか?
unixを使用しているので、bashスクリプトがベストです。
重要かどうかわかりませんが、jbossで実行されるコード。
解決方法は?
自己署名証明書をJVMのトラストストアに追加するか、クライアントを以下のように設定します。
オプション1
ブラウザから証明書をエクスポートし、JVMのトラストストアにインポートします(信頼の連鎖を確立するため)。
<JAVA_HOME>\bin\keytool -import -v -trustcacerts
-alias server-alias -file server.cer
-keystore cacerts.jks -keypass changeit
-storepass changeit
オプション2
証明書の検証を無効にする。
// Create a trust manager that does not validate certificate chains
TrustManager[] trustAllCerts = new TrustManager[] {
new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
public void checkClientTrusted(
java.security.cert.X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(
java.security.cert.X509Certificate[] certs, String authType) {
}
}
};
// Install the all-trusting trust manager
try {
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
} catch (GeneralSecurityException e) {
}
// Now you can access an https URL without having the certificate in the truststore
try {
URL url = new URL("https://hostname/index.html");
} catch (MalformedURLException e) {
}
注意点 オプション②は全くお勧めしません。 . トラストマネージャーを無効にすると、SSLのいくつかの部分が破壊され、中間者攻撃に対して脆弱になります。オプション#1を選ぶか、さらに良い方法は、サーバーによく知られたCAによって署名された"real"証明書を使用させることです。
関連
-
[解決済み] Java - JTextFieldが空かどうかを確認する
-
[解決済み] javac ソースファイルが見つかりません
-
[解決済み] JavaにおけるMouseListenerとMouseAdapterの違いについて
-
[解決済み] 文字列の長さに応じて文字列をトリミングする
-
[解決済み] java.sql.SQLRecoverableException: IO エラーです。NL Exceptionが発生しました
-
[解決済み] Java: getInstanceとStaticの比較
-
[解決済み] OpenSSLを使用して自己署名入りSSL証明書を生成する方法を教えてください。
-
[解決済み] 自己署名入りの証明書をgitに受け入れさせるにはどうしたらいいですか?
-
[解決済み】自己署名付きlocalhost証明書をChromeが受け入れるようにする方法
-
[解決済み] [Solved] javax.net.ssl.SSLHandshakeException の解決: sun.security.validator.ValidatorException: PKIX パスの構築に失敗しました エラー?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] この配列の中の数字を入れ替えるには、何が足りないのでしょうか?ジャバ
-
[解決済み] パラメータ[変数]の不正な修飾子;finalのみが許可される[closed]。
-
[解決済み] Cloneable throws CloneNotSupportedException
-
[解決済み] アクティビティに割り当てられない
-
[解決済み] 文字列の長さに応じて文字列をトリミングする
-
[解決済み] Maven: assembly-pluginが全く実行されない
-
[解決済み] Spring ApplicationContext - リソースリーク: 'context' が閉じられない
-
[解決済み] Javaコンパイラーエラー:ステートメントではありません
-
[解決済み] [Solved] javax.net.ssl.SSLHandshakeException の解決: sun.security.validator.ValidatorException: PKIX パスの構築に失敗しました エラー?
-
[解決済み] 特定の接続で異なる証明書を使用するにはどうすればよいですか?