2011-02-05 48 views
12

Tôi đã tạo kho khóa Java theo lập trình của loại jks (tức là loại mặc định).
Ban đầu nó trống nên tôi đã tạo chứng chỉ DSA.keytool - xem các khóa công khai và riêng tư

keytool -genkey -alias myCert -v -keystore trivial.keystore 

Làm cách nào để xem khóa công khai và khóa riêng tư?
I.e. có lệnh nào để in khóa cá nhân của chứng chỉ của tôi không?
tôi chỉ có thể tìm thấy keytool -certreq mà trong sự hiểu biết của tôi in giấy chứng nhận như một toàn thể:

-----BEGIN NEW CERTIFICATE REQUEST----- 
MIICaTCCAicCAQAwZTELMAkGA1UEBhMCR1IxDzANBgNVBAgTBkdyZWVjZTEPMA0GA1UEBxMGQXRo 
BQADLwAwLAIUQZbY/3Qq0G26fsBbWiHMbuVd3VICFE+gwtUauYiRbHh0caAtRj3qRTwl 
-----END NEW CERTIFICATE REQUEST----- 

Tôi giả định này là toàn bộ chứng chỉ. Làm thế nào tôi có thể nhìn thấy khóa riêng (hoặc khóa công khai) thông qua công cụ khóa?

Trả lời

5

Bạn đã tạo khóa riêng (và được liên kết công khai) trong kho khóa của mình. Để nó thực sự có thể sử dụng được, bạn có thể được nó ký bởi một cơ quan chứng nhận (CA) - vì đây là lệnh -certreq (bạn gửi đầu ra tới cơ quan chứng nhận này, cùng với một số thông tin khác và một chút tiền, và họ gửi Quay lại chứng chỉ, sau đó bạn có thể nhập vào kho khóa của mình.)

Xem khóa cá nhân không có ý định ... bạn thường không cần điều này, vì bạn sử dụng kho khóa trong chương trình Java của mình và điều này biết cách để dùng nó.


Edit: Vì bạn muốn nhìn vào keystore của bạn, đây là một chương trình Java nhanh chóng mà thực hiện điều này:

import java.io.*; 
import java.security.*; 
import java.security.cert.Certificate; 

public class KeyPrinter { 

    /** 
    * to be invoked with these parameters: 
    * 
    * [0]: keystore-password 
    * [1]: filename 
    * [2]: alias 
    * [3]: entry-Password (if necessary) 
    */ 
    public static void main(String[] params) 
     throws IOException, GeneralSecurityException 
    { 
     char[] storePass = params[0].toCharArray(); 
     String fileName = params[1]; 
     String alias = params[2]; 
     KeyStore.ProtectionParameter entryPass; 
     if(params.length > 3) { 
     entryPass=new KeyStore.PasswordProtection(params[3].toCharArray()); 
     } else { 
      entryPass = null; 
     } 

     KeyStore store = KeyStore.getInstance("JKS"); 
     InputStream input = new FileInputStream(fileName); 
     store.load(input, storePass); 

     KeyStore.Entry entry = store.getEntry(alias, entryPass); 
     System.out.println(entry); 

    } 
} 

Đầu tiên gọi keytool -list -keystore myStore để biết được bí danh để tìm kiếm, sau đó gọi chương trình này với mật khẩu và thông số. Trong trường hợp một khóa riêng tư, nó cho thấy chính khóa và thêm một chứng chỉ tự ký có chứa khóa công khai, dưới dạng có thể đọc được. Trong trường hợp "chứng chỉ tin cậy", nó chỉ hiển thị khóa công khai.

+0

Ok, vì vậy, việc xem khóa cá nhân không có ý nghĩa. Có gì về khóa công khai? Có lệnh nào để hiển thị khóa công khai không? – Cratylus

+0

Tôi vừa thêm một lớp java đơn giản để xem kho khóa. (Nó phức tạp hơn một chút, tôi thậm chí còn cố định dạng chính bản thân mình ... cho đến khi tôi có ý tưởng thử phương thức 'toString()'.) –

+0

@MircoWidmer - cảm ơn [chỉnh sửa đề xuất] của bạn (http://stackoverflow.com/review/suggested-edits/11463131). Tôi không có ý tưởng tại sao mọi người từ chối nó (những lý do được đề cập chắc chắn là không hợp lệ) khi bạn chỉ đơn giản là sửa chữa một lỗi đánh máy. Tôi đã sửa nó ngay bây giờ. –

7

Không, bạn không thể.
Bạn có thể truy cập khóa riêng từ mã, nhưng bạn không thể xuất khóa bằng cách sử dụng công cụ khóa.
Sử dụng OpenSSL nếu bạn cần xuất khóa cá nhân.

Tùy chọn khác: bạn có thể tạo kho khóa ở định dạng PKCS12. Sau đó, bạn có thể nhập nó vào trình duyệt và sau đó xuất khóa riêng.

3

(Portecle) là một công cụ GUI rất tiện lợi để quản lý các keystores. Và trong số những thứ khác, nó có tùy chọn xuất khóa cá nhân và chứng chỉ liên quan của nó.

Cách phổ biến để chia sẻ khóa công khai của bạn là để chia sẻ một giấy chứng nhận cho cặp khóa của bạn (nó chứa khóa công khai của bạn bên trong)

1
keytool -list -v -alias myCert -storepass 123456 -keystore file.jks 

hoặc

keytool -list -rfc -alias myCert -storepass 123456 -keystore file.jks 

như đã nêu trong

keytool -help 
Các vấn đề liên quan