2012-04-25 105 views
82

HTTPS経由でJava Web APIに接続しようとしています。ただし、例外がスローされます。証明書をインポートした後のJava Keytoolエラー "keytool error:java.io.FileNotFoundException&Access Denied"

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

私はオンラインのkeytoolから&のSSL証明書のチュートリアルを学んだの手順に従っ:

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

  2. は自分のコンピュータ上のパスに証明書をエクスポート.cer

  3. は、キーツールのインポートオプションを使用して、証明書が保存されました。以下のコマンドはエラーなしで実行されました。

  4. 入力したコマンドプロンプトでパスワードの入力を求められましたが、認証されました。

  5. cmdウィンドウには、いくつかの証明書データに&署名を印刷し、私は、問題が表示された:私はyesと答えた

    Trust this certificate?

  6. CMDプロンプトがしかし、そのメッセージの後、別の例外が表示されていた

    Certificate was added to keystore

    を表示:

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

を最後に、私は、キーストアをチェックすると、SSL証明書が追加されませんでしたし、私のアプリケーションは、接続しようとしたときに私が以前に取得していたのと同じ例外を与えます:

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

あなたが実行した正確な 'keytool'コマンドを投稿すれば出力できますか?ここで明白な問題のいくつかは、 '-keystore'引数のタイプミスであり、keytoolがキーをインポートするためにキーストアを見つけることができなかったという事実です。 – Alex

+0

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

答えて

179

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

+3

感謝します!私のために右クリックのrun-asが機能しました! –

+6

Macユーザーの場合、簡単なsudoでこの問題が修正されます。管理者として実行している –

+10

は適切な解決策ではありません。ほとんどの企業は管理者アクセスをロックダウンしています。優勢を上げるのではなく、なぜアクセスが拒否されるのかという理由を修正する方がよいでしょう。 – skword

16

私はWindowsで同じ問題を抱えており、によって管理者としてcmd.exeを実行して解決することができます(スタートメニューで右クリックしてから[管理者として実行])。

+0

正しい答えとしてこれをチェックしてください!!! – HDave

9

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

+0

これは私のために働く! –

+1

誰でもこれを拡張できれば、権限を確認しても何も変わりません。 – user3071284

+0

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

0

あなたはwindows8を使用している場合:

  1. [スタート]ボタン、検索ボックスに
  2. 、タイプcommand prompt
  3. 結果からは、command promptを右クリックし、[Run as administratorをクリックします。その後、keytoolコマンドを実行します。
-1

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

cacertsを右クリックし、プロパティ> [セキュリティ]タブ> [すべてのグループとユーザー名にすべてのアクセス許可を許可する]を選択します。

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

-2

あなたはディスクまたはパス(ないC)EX orther保存することができます:

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 

enter image description here

0

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

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

キーツールへのパスは、あなたがそう

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

あるkeytoolを使用する完全なパスを使用する必要がありますあなたのシステムパスにない場合、コマンドは

ようにする必要があります
"C:\Program Files\Java\jre<version>\bin\keytool.exe" -importcert -alias certificateFileAlias -file CertificateFileName.cer -keystore cacerts 

私のために働いた。

1

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

+0

正に、私の友人! – Chisko

+0

はUNIXユーザーと同じです。 – JanDotNet

-1

ただ、管理者としてCMDを実行

  1. を解決しました。
  2. あなたがローカルキーストアに証明書をインポートするとき、私は同じ問題を抱えていた、正しいトラストストア・パスワード
0

を使用していることを確認してください。私がkeytoolコマンドを発行するたびに、私は次のエラーを受け取りました。

証明書が のkeytoolエラーをキーストアに追加されました:java.io.FileNotFoundException:C:\プログラムファイル\のJava \ jdk1.8.0_151 \ JRE \ libに\セキュリティ(アクセスが拒否されました)

のためのソリューションの作業に続いて私。

1)あなたは管理者モード

2)%JAVA_HOME%\ JRE \ libに\セキュリティ

3)その後、以下のコマンドを発行するために、あなたの現在のディレクトリを変更してルーシでコマンドプロンプトを実行していることを確認してください

keytool -import -alias "mycertificatedemo" -file "C:\ Users \ name \ Downloads \ abc。CRT "

メイクをキーストアに証明書が追加されました」-keystore cacertsを )は、パスワードchangeitと

4)

5)あなたが 成功に次のメッセージが表示されますyの入力を与えます" 「C **:¥Program Files¥Java¥jdk1.8.0_151¥jre¥lib¥security **」のような完全なパスを指定していたので、「cacerts」に-keystoreパラメータ値のみを指定していることを確認してください。

これはうまくいくでしょう

関連する問題