keytool – 查看公钥和私钥

我以编程方式创建了类型为jks的Java密钥库(即默认类型)。
它最初是空的,所以我创建了一个DSA证书。

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

我怎样才能看到公钥和私钥?
即是否有一个命令打印我的证书的私钥?
我只能找到keytool -certreq ,在我的理解中,它打印整个证书:

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

我认为这是整个证书。 如何通过keytool查看私人(或公钥)?

您在密钥库中创建了一个私有(和关联的公共)密钥。 为了使它真正可用,您可以通过认证机构(CA)签署 – 这是-certreq命令(您将输出发送到此认证机构,以及其他一些信息和一些钱,他们发回证书,然后可以在密钥库中导入。)

查看私钥不是故意的……您通常不需要这样做,因为您在Java程序中使用密钥库,并且知道如何使用它。


编辑:因为你想看看你的密钥库,这里有一个快速的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以了解要查找的别名,然后使用密码和参数调用此程序。 在私钥输入的情况下,它以可读的forms显示密钥本身以及包含公钥的自签名证书。 如果是“可信证书”,则仅显示公钥。

你不能。
您可以从代码访问私钥,但不能使用keytool导出它。
如果需要导出私钥,请使用OpenSSL 。

另一种选择:您可以生成PKCS12格式的密钥库。 然后,您可以将其导入浏览器,然后导出私钥。

( Portecle )是一个非常方便的GUI工具,用于管理密钥库。 除此之外,它还可以选择导出私钥及其相关证书。

共享公钥的常用方法是共享密钥对的证书(它包含您的公钥)

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

要么

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

如中所述

 keytool -help