1. ホーム
  2. java

[解決済み] 証明書をインポートした後のJava Keytoolのエラー、"keytool error: java.io.FileNotFoundException & Access Denied" 。

2022-01-31 02:13:40

質問

Java Web API に HTTPS で接続しようとしているが、例外が発生する。

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException

私はオンラインのkeytool & SSL certのチュートリアルから学んだこれらのステップに従いました。

  1. HTTPS URLをブラウザにコピーし、SSL証明書をダウンロードし、Internet Explorerを使ってブラウザにインストールしました。

  2. 証明書をコンピュータのパスにエクスポートすると、証明書は次のような名前で保存されました。 .cer

  3. keytoolのimportオプションを使用。以下のコマンドはエラーなく実行されました。

    keytool -import -alias downloadedCertAlias -keystore C:\path\to\my\keystore\cacerts.file -file C:\path\of\exportedCert.cer
    
    
  4. コマンドプロンプトでパスワードの入力を求められたので、入力したら認証された。

  5. cmd のウィンドウでいくつかの証明書データ & 署名を印刷し、私は質問を促されました。

    この証明書を信用しますか?

    はいと答えました。

  6. 表示されたcmdプロンプト

    証明書がキーストアに追加されました

    しかし、このメッセージの後、別の例外が表示されました。

    keytool error: java.io.FileNotFoundException: C:\Program files\...\cacerts <Access Denied>
    
    

最後にキーストアを確認したところ、SSL証明書は追加されておらず、私のアプリケーションは接続しようとすると、先ほどと同じ例外が発生します。

(javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException)

解決方法は?

この現象は、コマンドプロンプトを管理者モードで実行していない場合に発生する可能性があります。 Windows 7をお使いの場合、「ファイル名を指定して実行」から「cmd」と入力し、Ctrl+Shift+Enterキーを押してください。これで、コマンドプロンプトが管理者モードで開かれます。そうでない場合は、スタート -> すべてのプログラム -> アクセサリー -> コマンドプロンプトを右クリックし、「管理者として実行」をクリックすることも可能です。