2012-04-25 37 views
82

Tôi đang cố gắng kết nối một API Web Java qua HTTPS; Tuy nhiên, một ngoại lệ được ném:Lỗi Keytool Java sau khi nhập chứng chỉ, "lỗi keytool: java.io.FileNotFoundException & Access Denied"

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

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

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

  2. xuất khẩu các chứng chỉ cho một con đường trên máy tính của tôi, giấy chứng nhận đã được lưu lại dưới dạng .cer

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

  4. Tôi được nhắc nhập mật khẩu tại dấu nhắc lệnh mà tôi đã nhập sau đó tôi đã được xác thực.

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

    Trust this certificate?

    Tôi trả lời có.

  6. Các dấu nhắc cmd hiển thị

    Certificate was added to keystore

    Tuy nhiên sau khi thông điệp rằng, ngoại lệ khác được trưng bày:

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

Cuối cùng khi tôi kiểm tra các keystore, giấy chứng nhận SSL không được bổ sung và đơn đăng ký của tôi cung cấp cùng một ngoại lệ mà tôi đã nhận được trước đó khi cố gắng kết nối:

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

bạn có thể đăng lệnh 'keytool' chính xác mà bạn đã thực thi và đầu ra của nó không? một số vấn đề rõ ràng ở đây là lỗi đánh máy của đối số '-keystore' và thực tế là keytool không thể tìm thấy kho khóa để nhập khóa vào – Alex

+0

Tôi muốn viết: keytool -import -alias đã tải xuốngCertAlias ​​-keystore C: \ path \ to \ my \ keystore \ cacerts.file -file C: \ path \ of \ exportsCert.cer Tôi cũng đề cập đến lệnh được thi hành mà không có lỗi, vì vậy rõ ràng đây chỉ là lỗi chính tả trong câu hỏi của tôi !!! Cảm ơn anyways – cyber101

Trả lời

179

Điều này có thể xảy ra nếu bạn không chạy lời nhắc lệnh trong chế độ quản trị viên. Nếu bạn đang sử dụng windows7, bạn có thể chạy để chạy, gõ cmd và nhấn Ctrl + Shift + enter. Thao tác 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à nói chạy với tư cách quản trị viên.

+3

CẢM ƠN BẠN! Nhấp chuột phải chạy-như đã làm việc cho tôi! –

+6

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

+10

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

16

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

+0

Vui lòng kiểm tra đây là câu trả lời đúng !!! – HDave

9

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

+0

MỘT CÔNG TRÌNH NÀY CHO TÔI !!! –

+1

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

+0

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

0

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

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

Bạn có thể tự cấp quyền sửa lỗi này.

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

Điều này phù hợp với tôi.

-2

Bạn có thể lưu trữ tin tức khác đĩ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 

enter image description here

0

Tôi thậm chí chạy command prompt as Administrator nhưng nó không làm việc cho tôi với các bên dưới lỗ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 sau đó bạn sẽ cần phải 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 được như thế

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

làm việc cho tôi.

1

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

+0

Đúng giờ, bạn của tôi! – Chisko

+0

tương tự cho người dùng Unix;) – JanDotNet

-1

SOLVED

  1. Chỉ cần chạy CMD với quyền quản trị.
  2. Hãy chắc chắn rằng bạn sử dụng đúng mật khẩu truststore
0

Tôi đã có cùng một vấn đề trong khi nhập khẩu giấy chứng nhận trong keystore địa phương. Bất cứ khi nào tôi phát hành lệnh keytool tôi nhận được lỗi sau.

Giấy chứng nhận đã được thêm vào keystore lỗi keytool: java.io.FileNotFoundException: C: \ Program Files \ Java \ jdk1.8.0_151 \ jre \ lib \ security (Truy cập bị từ chối)

Tiếp theo việc giải pháp cho tôi.

1) chắc chắn rằng bạn đang chạy command prompt trong Rus như chế độ quản trị

2) Thay đổi thư mục hiện lên% JAVA_HOME% \ jre \ lib \ security

3) sau đó Chạy lệnh dưới đây

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

3) cung cấp cho các mật khẩu changeit

4) nhập y

5), bạn sẽ thấy thông báo sau trên thành công "Giấy chứng nhận đã được thêm vào keystore"

Make chắc chắn bạn đang đưa ra "cacerts" chỉ trong giá trị tham số -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

Các vấn đề liên quan