2011-10-18 26 views
24

Vì vậy, tôi đang gặp sự cố với LDAP. Tôi có một trường hợp thử nghiệm tích hợp mà hy vọng sẽ làm việc ra, nhưng nó hiện đang chạy vào các vấn đề bảo mật LDAPS với bắt tay SSL.Làm cách nào để nhập tệp kho khóa Java hiện có (.jks) vào cài đặt Java?

Tôi có thể kết nối với LDAPS với Apache Directory Studio và nó đã tải xuống kho khóa vào tệp "permanent.jks".

OK, nhưng tôi muốn thử nghiệm tích hợp của tôi, nằm trong Eclipse bằng cách sử dụng JRE, để có thể kết nối với máy chủ LDAP bằng cách sử dụng kho khóa này.

Làm cách nào để lấy kho khóa này và nhập vào JRE để sử dụng riêng?

Trả lời

34

Ok, vì vậy đây là quá trình của tôi:

keytool -list -v -keystore permanent.jks - đã cho tôi bí danh.

keytool -export -alias alias_name -file certificate_name -keystore permanent.jks - đã cho tôi chứng chỉ để nhập.

Sau đó, tôi có thể nhập nó với keytool:

keytool -import -alias alias_name -file certificate_name -keystore keystore location

Như @Christian Bongiorno nói bí danh không thể đã tồn tại trong keystore của bạn.

+2

Tôi nhận được nó làm việc nhưng với một sự bổ sung (nếu bạn muốn thay đổi câu trả lời của bạn). Trong quá trình nhập, phần mà bạn có "tên bí danh" (BTW: không phải là tên biến lớn với khoảng trắng) đây phải là bí danh không tồn tại trong cửa hàng đích. Nếu bạn không chỉ định bí danh mặc định là "1" - bạn có thể sử dụng bước 1 để liệt kê các bí danh từ đích trước khi cài đặt –

+2

Trong bước cuối cùng (nhập), tôi nhận được lỗi 'keytool error: java.io. IOException: Keystore đã bị giả mạo, hoặc mật khẩu không chính xác' mặc dù bước trước đó (xuất khẩu), tôi có thể hoàn tất thành công bằng mật khẩu của mình. Bạn có biết tại sao nó? –

+0

@ThaiTran Dành cho người đọc trong tương lai, khi nhập chứng chỉ, hãy đảm bảo sử dụng mật khẩu của tệp mục tiêu của chứng chỉ, chứ không phải mật khẩu được sử dụng để tạo chứng chỉ ngay từ đầu. Cũng lưu ý rằng trên nhiều hệ thống, JDK được sở hữu bởi root. Nếu đây là trường hợp bạn cần thực thi lệnh keytool -import như là root. – BRasmussen

25

để tải KeyStore, bạn cần phải cho biết loại kho khóa đó là (có thể là jceks), cung cấp luồng nhập và mật khẩu. sau đó, bạn có thể tải nó như vậy:

KeyStore ks = KeyStore.getInstance(TYPE_OF_KEYSTORE); 
ks.load(new FileInputStream(PATH_TO_KEYSTORE), PASSWORD); 

điều này có thể ném một KeyStoreException, vì vậy bạn có thể bao quanh trong khối thử nếu muốn hoặc ném lại. Hãy ghi nhớ một keystore có thể chứa nhiều phím, vì vậy bạn sẽ cần phải tìm kiếm chìa khóa của bạn với một bí danh, đây là một ví dụ với một chìa khóa đối xứng:

SecretKeyEntry entry = (KeyStore.SecretKeyEntry)ks.getEntry(SOME_ALIAS,new KeyStore.PasswordProtection(SOME_PASSWORD)); 
SecretKey someKey = entry.getSecretKey(); 
+0

Bạn đã cứu sống tôi. Đã không tải kho khóa đúng cách, cho đến khi tôi đến ví dụ của bạn. Đáng tiếc là tôi không thể cung cấp cho bạn 10000 điểm cho điều đó. Cảm ơn nhiều!! – raspayu

+0

vui lòng trợ giúp! cảm ơn của bạn đáng giá hơn một vài điểm :). –

12

Bạn có thể số lượng lớn nhập khẩu tất cả các bí danh từ một keystore khác:

keytool -importkeystore -srckeystore source.jks -destkeystore dest.jks 
+0

lệnh này có thể hoạt động không? – mike

+0

@mike ý của bạn là gì? – qwertzguy

+0

hoạt động và thực sự tốt: D – Aspekt

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