Lỗi Keytool của Java sau khi nhập chứng chỉ, lỗi keytool của Java: java.io.FileNotFoundException & Access Bị từ chối


128

Tôi đang cố gắng kết nối API Web Java thông qua HTTPS; tuy nhiên, một ngoại lệ được đưa ra:

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

Tôi đã làm theo các bước mà tôi đã học được từ các hướng dẫn về chứng chỉ keytool & SSL trực tuyến:

  1. Tôi đã sao chép URL HTTPS vào trình duyệt, tải xuống chứng chỉ SSL & Đã cài đặt chúng trong trình duyệt bằng Internet Explorer.

  2. Xuất chứng chỉ vào một đường dẫn trên máy tính của tôi, chứng chỉ đã được lưu dưới dạng .cer

  3. Đã sử dụng tùy chọn nhập của keytool. Lệnh dưới đây thực hiện mà không có bất kỳ lỗi nào.

    keytool -import -alias downloadedCertAlias -keystore C:\path\to\my\keystore\cacerts.file -file C:\path\of\exportedCert.cer
  4. Tôi đã được nhắc nhập mật khẩu tại dấu nhắc lệnh, tôi đã nhập sau đó tôi được xác thực.

  5. Các cmdcửa sổ in một số dữ liệu chứng nhận & chữ ký và tôi đã nhắc với câu hỏi:

    Tin tưởng chứng chỉ này?

    Tôi trả lời là có.

  6. Dấu nhắc cmd được hiển thị

    Chứng chỉ đã được thêm vào kho khóa

    Tuy nhiên, sau thông báo đó, một ngoại lệ khác đã được hiển thị:

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

Cuối cùng khi tôi kiểm tra kho khóa, chứng chỉ SSL không được thêm vào và ứng dụng của tôi đưa ra ngoại lệ giống như tôi đã nhận được trước đó khi thử kết nối:

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

bạn có thể đăng keytoollệnh chính xác mà bạn đã thực hiện và nó xuất ra không? Một số vấn đề rõ ràng ở đây là lỗi chính tả -keystorevà thực tế là keytool không thể tìm thấy kho khóa để nhập khóa vào
Alex

Tôi định viết: keytool -import -alias đã tải xuống đây chỉ là lỗi chính tả trong câu hỏi của tôi !!! Dù sao cũng cảm ơn
cyber101

Câu trả lời:


266

Điều này có thể xảy ra nếu bạn không chạy dấu nhắc lệnh trong chế độ quản trị viên. Nếu bạn đang sử dụng windows 7, bạn có thể chạy, nhập cmd và nhấn Ctrl + Shift + enter. Điều này sẽ mở dấu nhắc lệnh trong chế độ quản trị viên. Nếu không, bạn cũng có thể bắt đầu -> tất cả các chương trình -> phụ kiện -> nhấp chuột phải vào dấu nhắc lệnh và nhấp vào 'chạy với tư cách quản trị viên'.


9
Đối với người dùng Mac, một sudo đơn giản sẽ khắc phục vấn đề này.
Truthful_ness

13
chạy như quản trị viên không phải là giải pháp đúng. Hầu hết các công ty đang khóa truy cập quản trị viên. Tốt hơn là khắc phục lý do tại sao quyền truy cập bị từ chối thay vì nâng cao các ưu thế.
skword

Gõ cmd và nhấn Ctrl + Shift + Enter và thêm giấy chứng nhận successfully- của nó làm việc cho tôi
cụt

Cảm ơn. điều khiển thay đổi CMD là cách duy nhất tôi có thể thay đổi cửa hàng cacerts.
Malcolm Boekhoff

@Afshar cảm ơn rất nhiều tôi đã vật lộn với điều này trong một thời gian khá dài.
Rajan Chauhan

21

Tôi gặp vấn đề tương tự trong Windows và có thể giải quyết bằng cách chạy cmd.exe với tư cách quản trị viên (nhấp chuột phải trong menu bắt đầu, sau đó "Chạy với tư cách quản trị viên).


19

Tôi đã gặp vấn đề tương tự trong khi nhập chứng chỉ trong kho khóa cục bộ. Bất cứ khi nào tôi phát lệnh keytool, tôi gặp lỗi sau.

Chứng chỉ đã được thêm vào lỗi keytool của kho khóa: java.io.FileNotFoundException: C: \ Program Files \ Java \ jdk1.8.0_151 \ jre \ lib \ security (Truy cập bị từ chối)

Theo giải pháp làm việc cho tôi.

1) đảm bảo rằng bạn đang chạy dấu nhắc lệnh trong chế độ Quản trị viên của Rus

2) Thay đổi thư mục hiện tại của bạn thành% JAVA_HOME% \ jre \ lib \ security

3) sau đó ban hành lệnh dưới đây

keytool -import -alias "mycertificatedemo" -file "C: \ Users \ name \ Tải xuống \ abc.crt" -keystore cacerts

3) thay đổi mật khẩu

4) nhập y

5) bạn sẽ thấy thông báo sau về "Chứng chỉ đã được thêm vào kho khóa" thành công

Hãy chắc chắn rằng bạn chỉ cung cấp " cacerts " trong giá trị param -keystore , vì tôi đã đưa ra đường dẫn đầy đủ như "C **: \ Program Files \ Java \ jdk1.8.0_151 \ jre \ lib \ security **".

Hy vọng điều này sẽ làm việc


1
Như đã đề cập ở đây, thực sự nằm trong thư mục bảo mật và chỉ đưa ra tên "cacerts" của chứng chỉ thay vì đường dẫn đầy đủ là điều làm việc cho tôi.
tăngTide 20/12/18

Tôi đã sử dụng sudo -i để biến mình thành siêu người dùng trong bước đầu tiên trên Mac và làm theo các bước và nó đã hoạt động. Tôi đã mở tập tin carets dưới dạng tệp văn bản và tìm thấy chứng chỉ của mình bằng cách thực hiện lệnh f để tìm kiếm tên của nó (hoặc bất cứ điều gì khác liên quan đến chứng chỉ).
Chigozie A.

11

Kiểm tra quyền ghi trên kho khóa.


2
Nếu bất cứ ai cũng có thể mở rộng về điều này, chỉ cần kiểm tra các quyền sẽ không thay đổi bất cứ điều gì.
dùng3071284

đặt thư mục tomcat thành chỉ đọc sẽ gây ra ngoại lệ này
svarog

Làm thế nào để chek sự cho phép weite?
Ahmad Arslan

3

Đối với người dùng Mac, hãy đảm bảo sudo và khi được nhắc trước tiên hãy cung cấp mật khẩu quản trị viên của bạn và mật khẩu sẽ được theo sau bởi mật khẩu lưu trữ thường là "thay đổi" trừ khi bạn thực sự thay đổi mật khẩu.


1

Nếu bạn đang sử dụng windows8:

  1. Nhấn vào nút bắt đầu
  2. Trong hộp tìm kiếm, gõ command prompt
  3. Từ kết quả, nhấp chuột phải command promptvà nhấp chuột Run as administrator. Sau đó thực hiện lệnh keytool.

1

Bạn có thể cho phép mình khắc phục vấn đề này.

Nhấp chuột phải vào cacerts> chọn thuộc tính> chọn tab Securit> Cho phép tất cả các quyền đối với tất cả tên nhóm và tên người dùng.

Điều này làm việc cho tôi.


0

Tôi thậm chí đã chạy dấu nhắc lệnh với tư cách Quản trị viên nhưng nó không hoạt động với tôi với lỗi bên dưới.

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

Nếu đường dẫn đến keytool không có trong đường dẫn hệ thống của bạn thì bạn sẽ cần sử dụng đường dẫn đầy đủ để sử dụng keytool, đó là

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

Vì vậy, lệnh nên như thế nào

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

Điều đó đã làm việc cho tôi.


0

Tôi cũng gặp lỗi này ngay cả khi tôi chạy cmd với tư cách Quản trị viên.

Nguyên nhân gốc là: Tệp này là từ VCS (lật đổ, lực lượng, v.v.) và khi tôi kiểm tra các thuộc tính của tệp này, 'Thuộc tính của nó là Chỉ đọc .

Vì vậy, giải pháp là:

  • (1) vô hiệu hóa Thuộc tính 'Chỉ đọc';
  • (2) kiểm tra từ VCS, để tập tin dưới trạng thái đọc và ghi.

-1

GIẢI QUYẾT

  1. Chỉ cần chạy CMD như một quản trị viên.
  2. Hãy chắc chắn rằng bạn sử dụng mật khẩu Truststore chính xác

-2

Bạn có thể lưu trữ đĩa hoặc đường dẫn (không phải 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

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.