証明書のインポート後のJava Keytoolエラー、「keytoolエラー:java.io.FileNotFoundException&Access Denied」


128

HTTPS経由でJava Web APIに接続しようとしています。ただし、例外がスローされます。

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

オンラインのkeytoolとSSL証明書のチュートリアルから学んだ次の手順に従いました。

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

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

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

    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)

keytool実行した正確なコマンドを投稿して、それを出力できますか?ここで明らかな問題のいくつかは、-keystore引数のタイプミス、およびkeytoolがキーをインポートするキーストアを見つけられなかったという事実です
Alex

私は書くつもりでした:keytool -import -aliasdownloadedCertAlias -keystore C:\ path \ to \ my \ keystore \ cacerts.file -file C:\ path \ of \ exportedCert.cerエラーなしで実行されたコマンドについても言及したので、明らかにこれは私の質問のスペルミスです!!! とにかくありがとう
cyber101 2012

回答:


267

これは、管理者モードでコマンドプロンプトを実行していない場合に発生する可能性があります。Windows 7を使用している場合は、実行に移動し、cmdと入力して、Ctrl + Shift + Enterを押します。これにより、管理者モードでコマンドプロンプトが開きます。そうでない場合は、スタート->すべてのプログラム->アクセサリ->コマンドプロンプトを右クリックして、[管理者として実行]をクリックすることもできます。


9
Macユーザーの場合、単純なsudoでこの問題を修正できます。
trueful_ness 2014年

13
管理者として実行することは適切なソリューションではありません。ほとんどの企業は管理者アクセスをロックダウンしています。特権を昇格するよりも、アクセスが拒否される理由を修正した方がよい。
2015年

cmdと入力してCtrl + Shift + Enterを
押し

ありがとう。コントロールシフトCMDは、cacertsストアを変更できる唯一の方法でした。
Malcolm Boekhoff

@Afsharは、長い間これに苦労してきました。
Rajan Chauhan

21

Windowsでも同じ問題があり、cmd.exeを管理者として実行することで解決できました(スタートメニューで右クリックし、[管理者として実行])。


19

ローカルキーストアに証明書をインポートするときに、同じ問題が発生していました。keytoolコマンドを発行するたびに、次のエラーが発生しました。

証明書がキ​​ーストアに追加されましたkeytoolエラー:java.io.FileNotFoundException:C:\ Program Files \ Java \ jdk1.8.0_151 \ jre \ lib \ security(アクセスが拒否されました)

次の解決策は私のために働きます。

1)Rusで管理者モードでコマンドプロンプトを実行していることを確認します

2)現在のディレクトリを%JAVA_HOME%\ jre \ lib \ securityに変更します

3)次に、以下のコマンドを発行します

keytool -import -alias "mycertificatedemo" -file "C:\ Users \ name \ Downloads \ abc.crt" -keystore cacerts

3)パスワードを変更する

4)yと入力します

5)成功すると「証明書がキ​​ーストアに追加されました」というメッセージが表示されます

「C **:\ Program Files \ Java \ jdk1.8.0_151 \ jre \ lib \ security **」のようなフルパスを指定しているため、「cacerts」を-keystore param値でのみ指定していることを確認してください。

これがうまくいくことを願って


1
ここで述べたように、実際はセキュリティディレクトリにあり、フルパスの代わりに証明書の「cacerts」名のみを指定することが私にとってはうまくいきました。
risingTide

Macの最初のステップでsudo -iを使用して自分自身をスーパーユーザーにして、そのステップに従いました。キャレットファイルをテキストファイルとして開き、コマンドfを実行してその名前(または証明書に関連するその他のもの)を検索することにより、証明書を見つけました。
Chigozie A.

11

キーストアの書き込み権限を確認してください。


2
誰かがこれを拡張できる場合、権限を確認するだけでは何も変更されません。
user3071284

tomcatディレクトリを読み取り専用に設定すると、この例外が発生します
svarog

weiteの許可をチェックする方法は?
Ahmad Arslan

3

Macユーザーの場合は必ずsudoを実行し、プロンプトが表示されたら最初に管理者パスワードを入力してください。その後、実際に変更しない限り、通常は「changeit」であるキーストアパスワードが続きます。


1

windows8を使用している場合:

  1. スタートボタンをクリック
  2. 検索ボックスに、 command prompt
  3. 結果から、右クリックしてcommand promptをクリックしますRun as administrator。次に、keytoolコマンドを実行します。

1

この問題を修正する権限を自分に与えることができます。

cacertsを右クリック>プロパティを選択> Securitタブを選択>すべてのグループとユーザー名にすべての権限を許可

これでうまくいきました。


0

私は管理者としてコマンドプロンプトを実行しましたが、以下のエラーで動作しませんでした。

'keytool' is not recognized as an internal or external command,
 operable program or batch file.

keytoolへのパスがシステムパスにない場合、keytoolを使用するにはフルパスを使用する必要があります。

C:\Program Files\Java\jre<version>\bin

したがって、コマンドは次のようになります

"C:\Program Files\Java\jre<version>\bin\keytool.exe" -importcert -alias certificateFileAlias -file CertificateFileName.cer -keystore cacerts

それは私のために働いた。


0

管理者としてcmdを実行しても、このエラーも発生しました。

根本的な原因は次のとおりです。ファイルはVCS(subversion、perforceなど)からのものであり、このファイルのプロパティを確認すると、その属性は読み取り専用です。

したがって、解決策は次のとおりです。

  • (1)「読み取り専用」属性を無効にします。
  • (2)VCSからチェックアウトし、ファイルをread&writeの状態にします。

-1

解決した

  1. 管理者としてCMDを実行するだけです。
  2. 正しいトラストストアのパスワードを使用していることを確認してください

-2

ortherディスクまたはパス(Cではなく)を保存できますEX:D \

C:\Program Files\Java\jre1.8.0_101\bin>keytool -genkey -alias server -keyalg RSA -keysize 2048 -keystore D:\myserver.jks -dname "CN=myserver,OU=IT-WebDev, O=TIACHOP, L=HCM, ST=0753, C=VN" && keytool -certreq -alias server -file D:\myserver.csr -keystore D:\myserver.jks

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.