Kesalahan Java Keytool setelah mengimpor sertifikat, “kesalahan keytool: java.io.FileNotFoundException & Access Denied”


129

Saya mencoba menghubungkan Java Web API melalui HTTPS; namun, ada pengecualian:

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

Saya mengikuti langkah-langkah ini yang saya pelajari dari keytool online & tutorial sertifikat SSL:

  1. Saya menyalin URL HTTPS ke browser, mengunduh sertifikat SSL & Menginstalnya di browser menggunakan Internet Explorer.

  2. Mengekspor sertifikat ke jalur di komputer saya, sertifikat disimpan sebagai .cer

  3. Menggunakan opsi impor keytool. Perintah di bawah ini dijalankan tanpa ada kesalahan.

    keytool -import -alias downloadedCertAlias -keystore C:\path\to\my\keystore\cacerts.file -file C:\path\of\exportedCert.cer
  4. Saya dimintai kata sandi pada prompt perintah, yang saya masukkan kemudian saya diautentikasi.

  5. The cmdwindow dicetak beberapa sertifikat Data & tanda tangan dan saya diminta dengan pertanyaan:

    Percayai sertifikat ini?

    Saya jawab ya.

  6. Perintah cmd ditampilkan

    Sertifikat telah ditambahkan ke keystore

    Namun setelah pesan itu, pengecualian lain ditampilkan:

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

Akhirnya ketika saya memeriksa keystore, sertifikat SSL tidak ditambahkan dan aplikasi saya memberikan pengecualian yang sama seperti yang saya dapatkan sebelumnya ketika mencoba menghubungkan:

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

dapatkah Anda memposting keytoolperintah yang telah Anda jalankan, dan hasilnya? beberapa masalah yang jelas di sini adalah kesalahan ketik -keystoreargumen, dan fakta bahwa keytool tidak dapat menemukan keystore untuk mengimpor kunci
Alex

Saya bermaksud menulis: keytool -import -alias downloadCertAlias ​​-keystore C: \ path \ to \ my \ keystore \ cacerts.file -file C: \ path \ of \ ExportCert.cer Saya juga menyebutkan perintah yang dijalankan tanpa kesalahan, jadi jelas ini hanya kesalahan ejaan dalam pertanyaan saya !!! Terima kasih lagian
cyber101

Jawaban:


268

Ini bisa terjadi jika Anda tidak menjalankan prompt perintah dalam mode administrator. Jika Anda menggunakan windows 7, Anda dapat menjalankan, ketik cmd dan tekan Ctrl + Shift + enter. Ini akan membuka command prompt dalam mode administrator. Jika tidak, Anda juga dapat memulai -> semua program -> aksesori -> klik kanan command prompt dan klik 'run as administrator'.


9
Untuk pengguna Mac, sudo sederhana akan memperbaiki masalah ini.
truthful_ness

13
menjalankan sebagai admin bukanlah solusi yang tepat. Sebagian besar perusahaan mengunci akses admin. Lebih baik memperbaiki alasan mengapa akses ditolak daripada meninggikan previlages.
skword

ketik cmd dan tekan Ctrl + Shift + masukkan dan tambahkan sertifikat dengan sukses- Ini bekerja untuk saya
deadend

Terima kasih. control-shift CMD adalah satu-satunya cara saya bisa mengubah penyimpanan cacerts.
Malcolm Boekhoff

@Afshar terima kasih banyak saya telah berjuang dengan ini untuk waktu yang cukup lama.
Rajan Chauhan

21

Saya mengalami masalah yang sama di Windows dan dapat mengatasinya dengan menjalankan cmd.exe sebagai administrator (klik kanan di menu mulai, lalu "Jalankan sebagai administrator).


19

Saya mengalami masalah yang sama saat mengimpor sertifikat di keystore lokal. Setiap kali saya mengeluarkan perintah keytool, saya mendapat kesalahan berikut.

Sertifikat ditambahkan ke keystore keytool error: java.io.FileNotFoundException: C: \ Program Files \ Java \ jdk1.8.0_151 \ jre \ lib \ security (Akses ditolak)

Solusi berikut berhasil untuk saya.

1) pastikan Anda menjalankan command prompt di Rus sebagai mode Administrator

2) Ubah direktori Anda saat ini ke% JAVA_HOME% \ jre \ lib \ security

3) lalu keluarkan perintah di bawah ini

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

3) berikan perubahan kata sandi itu

4) masukkan y

5) Anda akan melihat pesan berikut pada "Sertifikat telah ditambahkan ke keystore" berhasil

Pastikan Anda hanya memberikan " cacerts " dalam nilai parameter -keystore, karena saya memberikan jalur lengkap seperti "C **: \ Program Files \ Java \ jdk1.8.0_151 \ jre \ lib \ security **".

Semoga ini berhasil


1
Seperti yang disebutkan di sini, sebenarnya berada di direktori keamanan dan hanya memberi nama "cacerts" dari sertifikat alih-alih path lengkap adalah yang berhasil bagi saya.
risingTide

Saya menggunakan sudo -i untuk menjadikan diri saya pengguna super pada langkah pertama di Mac dan mengikuti langkah-langkahnya dan berhasil. Saya membuka file tanda sisipan sebagai file teks dan menemukan sertifikat saya dengan melakukan perintah f untuk mencari namanya (atau apa pun yang berkaitan dengan sertifikat).
Chigozie A.

11

Periksa izin menulis di keystore.


2
Jika ada yang bisa memperluas ini, hanya memeriksa izin tidak akan mengubah apa pun.
pengguna3071284

mengatur direktori tomcat ke read-only akan menyebabkan pengecualian ini
svarog

bagaimana cara memeriksa izin weite?
Ahmad Arslan

3

Untuk pengguna Mac, pastikan untuk sudo dan ketika diminta pertama berikan kata sandi administrator Anda dan itu akan diikuti oleh kata sandi keystore yang biasanya harus "changeit" kecuali Anda benar-benar mengubahnya.


1

Jika Anda menggunakan windows8:

  1. Klik tombol start
  2. Di kotak pencarian, ketik command prompt
  3. Dari hasilnya, klik kanan command promptdan klik Run as administrator. Kemudian jalankan perintah keytool.

1

Anda dapat memberi diri Anda izin untuk memperbaiki masalah ini.

Klik kanan pada cacerts> pilih properti> pilih tab Securit> Izinkan semua izin untuk semua nama Grup dan pengguna.

Ini berhasil untuk saya.


0

Saya bahkan menjalankan command prompt sebagai Administrator tetapi tidak berhasil untuk saya dengan kesalahan di bawah ini.

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

Jika jalur ke keytool tidak ada di jalur Sistem Anda, maka Anda harus menggunakan jalur lengkap untuk menggunakan keytool, yaitu

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

Jadi, perintahnya harus seperti

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

yang berhasil untuk saya.


0

Saya mendapat kesalahan ini juga bahkan saya menjalankan cmd sebagai Administrator.

Akar penyebabnya adalah: File ini berasal dari VCS (subversi, perforce, dll.), Dan ketika saya memeriksa properti file ini, 'Attributes is Read-only .

Jadi solusinya adalah:

  • (1) nonaktifkan Atribut 'Read-only';
  • (2) periksa dari VCS, biarkan file di bawah status baca & tulis.

-1

TERPECAHKAN

  1. Jalankan saja CMD sebagai administrator.
  2. Pastikan Anda menggunakan kata sandi truststore yang benar

-2

Anda dapat menyimpan disk atau jalur lain (bukan 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

masukkan deskripsi gambar di sini

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.