2011-02-05 336 views
12

我以編程方式創建了類型爲jks(即默認類型)的Java密鑰庫。
它最初是空的,所以我創建了一個DSA證書。keytool - 查看公鑰和私鑰

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

如何查看公鑰和私鑰?
I.e.有沒有打印我的證書私鑰的命令?
我只能找到keytool -certreq這在我的理解打印證書作爲一個整體:

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

我想這是整個證書。我如何通過keytool查看私人密鑰(或公共密鑰)?

回答

5

您在密鑰庫中創建了一個私有密鑰(和相關的公共密鑰)。爲了確保它可用,您可以通過認證機構(CA)進行簽名 - 因爲這是-certreq命令(您將輸出發送到該認證機構,以及一些其他信息和一些資金,然後它們會發送取回一個證書,然後你可以導入你的密鑰庫中。)

查看私鑰是不打算的......你通常不需要這個,因爲你在你的Java程序中使用了keystore,使用它。


編輯:既然你想看看你的密鑰庫,這裏一個快速的Java程序,做到這一點:

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); 

    } 
} 

首先調用keytool -list -keystore myStore知道找哪個別名,然後調用這個程序有密碼和參數。在私鑰輸入的情況下,它以可讀形式顯示密鑰本身以及另外包含公鑰的自簽名證書。如果是「可信證書」,則只顯示公鑰。

+0

好的,所以查看私鑰是沒有意義的。關於公鑰有哪些?是否有命令顯示公鑰? – Cratylus 2011-02-05 17:17:02

7

不,你不能。
您可以從代碼訪問私鑰,但不能使用keytool將其導出。
如果您需要導出私鑰,請使用OpenSSL

另一種選擇:您可以生成PKCS12格式的密鑰庫。然後,您可以將其導入瀏覽器,然後導出私鑰。

3

Portecle)是一個非常方便的用於管理密鑰庫的GUI工具。除此之外,它還可以選擇導出私鑰和相關證書。

分享您的公鑰的常用方法是共享的證書爲你的密鑰對(它裏面包含你的公鑰)

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

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

keytool -help 
注意