HTTPS経由でJava Web APIに接続しようとしています。ただし、例外がスローされます。
javax.net.ssl.SSLHandshakeException: Sun.security.validator.ValidatorException
オンラインのキーツールとSSL証明書のチュートリアルから学んだ次の手順に従いました。
HTTPS URLをブラウザーにコピーし、SSL証明書をダウンロードして、Internet Explorerを使用してブラウザーにインストールしました。
証明書をコンピューター上のパスにエクスポートすると、証明書は.cer
として保存されました
Keytoolのインポートオプションを使用しました。以下のコマンドはエラーなしで実行されました。
keytool -import -alias downloadedCertAlias -keystore C:\path\to\my\keystore\cacerts.file -file C:\path\of\exportedCert.cer
コマンドPromptでパスワードの入力を求められましたが、入力すると認証されました。
cmd
ウィンドウにいくつかの証明書データと署名が印刷され、次の質問が表示されました。
この証明書を信頼しますか?
はいと答えました。
表示される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を押します。これにより、管理者モードでコマンドプロンプトが開きます。そうでない場合は、スタート->すべてのプログラム->アクセサリ->コマンドプロンプトを右クリックして、「管理者として実行」をクリックすることもできます。
Windowsでも同じ問題が発生し、管理者としてcmd.exeを実行([スタート]メニューで右クリックしてから[管理者として実行])で解決できました。
ローカルキーストアに証明書をインポートするときに同じ問題が発生していました。 keytoolコマンドを発行するたびに、次のエラーが発生しました。
証明書がキーストアkeytoolエラーに追加されました:Java.io.FileNotFoundException:C:\ Program Files\Java\jdk1.8.0_151\jre\lib\security(Access is denied)
私のための次の解決策の仕事。
1)管理者モードでRusでコマンドプロンプトを実行していることを確認してください
2)現在のディレクトリを%Java_HOME%\ jre\lib\securityに変更します
3)次に、以下のコマンドを発行します
keytool -import -alias "mycertificatedemo" -file "C:\ Users\name\Downloads\abc.crt" -keystore cacerts
3)パスワードchangeitを与える
4)yを入力
5)「証明書がキーストアに追加されました」という成功時に次のメッセージが表示されます
-keystore param valueでのみ「cacerts」を指定していることを確認してください。これは、「C **:\ Program Files\Java\jdk1.8.0_151\jre\lib」のようなフルパスを指定したためです。\security ** "。
これがうまくいくことを願って
キーストアの書き込み権限を確認してください。
Macユーザーの場合、必ずSudoを確認し、プロンプトが表示されたら最初に管理者パスワードを入力します。その後、実際に変更しない限り、通常「changeit」であるキーストアパスワードが続きます。
Windows8を使用している場合:
command Prompt
」と入力しますcommand Prompt
を右クリックし、Run as administrator
をクリックします。次に、keytoolコマンドを実行します。PowerShellを使用するとWindows 10でも同じ問題が発生しますが、cmdを使用している場合は機能します。
コマンドプロンプトを管理者として実行することもできましたが、次のエラーが表示されて機能しませんでした。
'keytool' is not recognized as an internal or external command,
operable program or batch file.
キーツールへのパスがシステムパスにない場合、フルパスを使用してキーツールを使用する必要があります。
C:\Program Files\Java\jre<version>\bin
したがって、コマンドは次のようになります
"C:\Program Files\Java\jre<version>\bin\keytool.exe" -importcert -alias certificateFileAlias -file CertificateFileName.cer -keystore cacerts
それは私のために働いた。