2011-02-05 84 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 
注意