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