2012-03-18 41 views
5

Tôi cần biết nếu có thể lấy khóa từ KeyStore mà không cung cấp 'storepass'. Tài liệu here nói rằng "Khi truy xuất thông tin từ kho khóa, mật khẩu là tùy chọn; nếu không có mật khẩu, không thể kiểm tra tính toàn vẹn của thông tin đã truy xuất và cảnh báo được hiển thị"KeyStore nhận khóa mà không cần mật khẩu

Tuy nhiên khi tôi cố gắng lấy khóa mà không có mật khẩu tôi nhận được "java.lang.IllegalArgumentException: mật khẩu không được rỗng" ngoại lệ.

Tiếp theo là làm thế nào tôi đã tạo ra KeyStore

keytool -genseckey -alias "MyKey" -keystore KEYSTORE.jks -storepass "password" -storetype "JCEKS" -keyalg AES -keysize 128

Và tôi đã cố gắng để lấy nó như sau

final KeyStore keyStore = KeyStore.getInstance("JCEKS"); 
keyStore.load(new FileInputStream(new File("C:\\temp\\keytool\\KEYSTORE.jks")), 
    null); 
final Key key = keyStore.getKey("myKey", null); 

nào ném ngoại lệ sau đây

java.lang.IllegalArgumentException: password can't be null 
at com.sun.crypto.provider.SunJCE_z.<init>(DashoA13*..) 
at com.sun.crypto.provider.JceKeyStore.engineGetKey(DashoA13*..) 
at java.security.KeyStore.getKey(KeyStore.java:763) 

Tôi đã hiểu hoàn toàn tài liệu chưa? Có cách nào khác xung quanh điều này, vì tôi không thấy điểm trong lưu trữ 'storepass' trong rõ ràng trong mã của tôi, nơi mọi người có thể nhìn thấy nó, do đó làm cho mật khẩu vô dụng.

Trả lời

4

Nếu storepass (được sử dụng để truy cập khóa riêng) không được cung cấp thì nó sẽ cố gắng sử dụng keypass tức là mật khẩu kho khóa mà bạn cũng không cung cấp.
Đó là lý do bạn nhận được ngoại lệ.
Bạn không thể có cả các keypassstorepass rỗng
Từ liên kết của bạn:

Đối với một lựa chọn -keypass, nếu bạn không chỉ định các tùy chọn trên dòng lệnh , keytool đầu tiên sẽ cố gắng sử dụng mật khẩu kho khóa để khôi phục khóa bí mật/riêng tư và nếu điều này không thành công, sau đó sẽ nhắc bạn mật khẩu khóa riêng/bí mật

+0

Có, có vẻ như tôi đã hiểu lầm ocumentation. Vì vậy, có một approch được đề nghị để có được xung quanh này? Tôi không thể có mật khẩu như vậy trong mã. Cảm ơn – Nishant

+0

Vì vậy, vấn đề của bạn là để tránh các mật mã hardcoded trong mã? Đó là vấn đề phổ biến nhất.Bạn thực sự không thể làm nhiều về that.The cách tiếp cận recomended nói chung là yêu cầu mật khẩu từ người dùng.Nếu bạn không thể làm bạn có thể làm một cái gì đó phức tạp ví dụ mã hóa mật khẩu nhưng điều đó sẽ không thực sự mang lại cho bạn nhiều. Bạn cũng có thể ủy quyền trách nhiệm cho người dùng, tức là giữ an toàn cho hệ thống tệp. – Cratylus

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