Помилка Java Keytool після імпорту сертифіката, "помилка keytool: java.io.FileNotFoundException & Access Denied"


128

Я намагаюся підключити веб-API Java через HTTPS; однак виняток:

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

Я дотримувався цих кроків, які я дізнався з онлайн-підручників з ключових інструментів та SSL:

  1. Я скопіював URL-адресу HTTPS у браузер, завантажив сертифікати 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 не вдалося знайти сховище ключів, щоб імпортувати ключ,
Алекс

Я мав намір написати: keytool -import -alias завантаженийCertAlias ​​-keystore C: \ path \ to \ my \ keystore \ cacerts.file -file C: \ path \ of \ exportCert.cer Я також згадав команду, виконану без помилок, так очевидно це просто орфографічна помилка в моєму питанні !!! Спасибі в будь-якому випадку
cyber101

Відповіді:


267

Це може статися, якщо ви не запустите командний рядок в режимі адміністратора. Якщо ви використовуєте Windows 7, можете перейти до запуску, введіть cmd і натисніть Ctrl + Shift + enter. Це відкриє командний рядок в режимі адміністратора. Якщо ні, ви також можете перейти до запуску -> всі програми -> аксесуари -> командний рядок правою кнопкою миші та натисніть "запустити як адміністратор".


9
Для користувачів Mac просте рішення виправить це судо.
trueful_ness

13
запуск адміністратора - не правильне рішення. Більшість компаній блокують доступ адміністратора. Краще зафіксувати причину того, чому в доступі заборонено, а не підняти попередні планки.
скло

Введіть CMD і натисніть Ctrl + Shift + Enter і додав СЕРТИФІКАТ successfully- Його працював для мене
Тупик

Дякую. CMD з контрольним переключенням - єдиний спосіб, коли я міг змінити магазин магазинів.
Малькольм

@Afshar велике спасибі, я боровся з цим досить тривалий час.
Раджан Чаухан

21

У мене була така ж проблема в Windows, і я міг її вирішити, запустивши cmd.exe як адміністратор (клацніть правою кнопкою миші в меню "Пуск", потім "Запустити як адміністратор".


19

У мене була така ж проблема під час імпорту сертифіката в локальну сховище ключів. Щоразу, коли я видаю команду keytool, у мене з’являється наступна помилка.

Сертифікат додано до помилки клавішних ключів у магазині: java.io.FileNotFoundException: C: \ програмні файли \ Java \ jdk1.8.0_151 \ jre \ lib \ безпека (доступ заборонено)

Наступна робота для мене.

1) переконайтеся, що ви виконуєте командний рядок в Rus як режим адміністратора

2) Змініть поточний каталог на% JAVA_HOME% \ jre \ lib \ security

3) потім видайте команду нижче

keytool -import -alias "mycertificirano" -файл "C: \ Користувачі \ ім'я \ Завантаження \ abc.crt"

3) дати зміни пароля

4) введіть y

5) ви побачите таке повідомлення про успішне "Сертифікат додано до магазину брелоків"

Переконайтеся, що ви надаєте " cacerts " лише параметри -keystore param, як я давав повний шлях на зразок "C **: \ Program Files \ Java \ jdk1.8.0_151 \ jre \ lib \ security **".

Сподіваюся, це спрацює


1
Як вже згадувалося тут, для мене працювало те , що насправді знаходиться у каталозі безпеки і лише давати ім'я cert замість повного шляху.
підйом припливу

Я використовував sudo -i, щоб зробити себе суперрусером на першому кроці на Mac і дотримувався кроків, і це спрацювало. Я відкрив файл догляду як текстовий файл і знайшов свій сертифікат, виконавши команду f для пошуку його імені (або будь-чого іншого, що стосується сертифіката).
Chigozie A.

11

Перевірте дозволи на запис на сховищі ключів.


2
Якщо хтось може розширити це, просто перевірка дозволів нічого не змінить.
користувач3071284

встановлення каталогу tomcat лише для читання спричинить цей виняток
svarog

як перевірити дозвіл weite?
Ахмад Арслан

3

Для користувачів Mac обов'язково вкажіть sudo, і коли буде запропоновано спочатку ввести пароль адміністратора, після чого слід буде ввести пароль зберігання клавіш, який, як правило, повинен бути "changeit", якщо ви його фактично не змінили.


1

Якщо ви використовуєте windows8:

  1. Натисніть кнопку "Пуск"
  2. У полі пошуку введіть command prompt
  3. З результату клацніть правою кнопкою миші command promptта клацніть правою кнопкою миші Run as administrator. Потім виконайте команду keytool.

1

Ви можете надати собі дозволи для вирішення цієї проблеми.

Клацніть правою кнопкою миші на керах> виберіть властивості> виберіть вкладку 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 тощо), і коли я перевірив властивості цього файлу, його "Attributes is only-read" .

Тож рішення таке:

  • (1) відключити атрибут "лише для читання";
  • (2) перевірити з VCS, дозволити файл у статусі читання і запису.

-1

РЕШЕНО

  1. Просто запустіть CMD як адміністратор.
  2. Переконайтеся, що ви користуєтеся правильним паролем довіреної покупки

-2

Ви можете зберігати інший диск або шлях (не 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

введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.