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)
cyber101
sumber
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'.

Sharan Rajendran
sumber
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).

daniel
sumber
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

Waqas Ahmed
sumber
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.

partha saradhi
sumber
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.

VK
sumber
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.
arungopal
sumber
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.

goyalshub1509
sumber
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.

sher17
sumber
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.
Schroeder
sumber
-1

TERPECAHKAN

  1. Jalankan saja CMD sebagai administrator.
  2. Pastikan Anda menggunakan kata sandi truststore yang benar
Ismael ozil
sumber
-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

maithanhduyan
sumber