[解決済み] 致命的な警告を受け取りました: bad_certificate
2022-02-07 01:20:57
質問
SSLソケット接続を設定しようとしています(クライアント側で以下のようにしています)。
-
Certificte Signing Requestを生成して、署名付きクライアント証明書を取得します。
-
これで、秘密鍵(CSRで使用)、署名済みクライアント証明書、ルート証明書(帯域外で取得)が揃いました。
-
秘密鍵と署名済みクライアント証明書を証明書チェーンに追加し、それをキーマネージャに追加します。 また、ルート証明書をトラストマネージャに追加します。 しかし、不正な証明書エラーが発生しました。
正しい証明書を使用していることは間違いないのですが。署名されたクライアント証明書もトラストマネージャに追加する必要がありますか?それを試してみましたが、まだうまくいきません。
//I add the private key and the client cert to KeyStore ks
FileInputStream certificateStream = new FileInputStream(clientCertFile);
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
java.security.cert.Certificate[] chain = {};
chain = certificateFactory.generateCertificates(certificateStream).toArray(chain);
certificateStream.close();
String privateKeyEntryPassword = "123";
ks.setEntry("abc", new KeyStore.PrivateKeyEntry(privateKey, chain),
new KeyStore.PasswordProtection(privateKeyEntryPassword.toCharArray()));
//Add the root certificate to keystore jks
FileInputStream is = new FileInputStream(new File(filename));
CertificateFactory cf = CertificateFactory.getInstance("X.509");
java.security.cert.X509Certificate cert = (X509Certificate) cf.generateCertificate(is);
System.out.println("Certificate Information: ");
System.out.println(cert.getSubjectDN().toString());
jks.setCertificateEntry(cert.getSubjectDN().toString(), cert);
//Initialize the keymanager and trustmanager and add them to the SSL context
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(ks, "123".toCharArray());
TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
tmf.init(jks);
ここで作成する必要のある証明書チェーンのようなものはありますか?
私はこれらのコンポーネントを持つp12も持っていて、よく似たコードを使って、秘密鍵をキーマネージャに、p12のルート証明書をトラストマネージャに追加したら、動作させることができました。しかし、今、私はp12なしでそれを動作させる必要があります。
EDIT: スタックトレースを要求されました。これで十分だと思います。(注:ファイル名はマスクしてあります)
Caused by: javax.net.ssl.SSLHandshakeException: Received fatal alert: bad_certificate
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:136)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1720)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:954)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1138)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1165)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1149)
at client.abc2.openSocketConnection(abc2.java:33)
at client.abc1.runClient(abc1.java:63)
at screens.app.abc.validateLogin(abc.java:197)
... 32 more
解決方法は?
ルート証明書もキーストアに追加する必要があります。
関連
-
[解決済み】Hibernateエラー:同じ識別子値を持つ別のオブジェクトがすでにセッションに関連付けられました。
-
[解決済み] if / for / while 内で "Missing return statement" が発生する。
-
[解決済み】Javaの".class期待値"
-
[解決済み】「'void' type not allowed here」エラーの原因とは?
-
[解決済み】不正な反射的アクセスとは?
-
[解決済み】 java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver [重複]。
-
[解決済み】Javaのswitch文。定数式が必要だが、定数である
-
[解決済み] StringBuilderをクリアまたは空にするにはどうすればよいですか?重複] [重複] [重複] [重複] [重複] [重複
-
[解決済み】intがnullであるかどうかを確認する方法
-
[解決済み] SQLエラー。0, SQLState: 08S01 通信リンクの失敗 [重複]。
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] hibernateでResultSetを抽出できない。
-
[解決済み】指定された子にはすでに親がいます。先に子の親に対してremoveView()を呼び出す必要がある(Android)
-
[解決済み] hibernate のプロパティが見つかりません。
-
[解決済み】非閉鎖文字リテラルエラー
-
[解決済み】Java Error "Exception in thread "main" java.util.InputMismatchException" Array プログラムで発生。
-
[解決済み】Ubuntu: OpenJDK 8 - パッケージを見つけることができません。
-
[解決済み】どういう意味か。Serializableクラスがstatic final serialVersionUIDフィールドを宣言していないとは?重複している] [重複している] [重複している] [重複している
-
[解決済み】Java: GZIPInputStreamの作成に失敗しました。GZIP形式ではありません
-
[解決済み】koch snowflake java recursion
-
[解決済み】フォルダに書き込もうとすると「java.nio.file.AccessDeniedException」が発生する件