我以编程方式创建了类型为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查看私人(或公钥)?
答案 0 :(得分:9)
不,你不能。
您可以从代码访问私钥,但无法使用keytool导出私钥
如果您需要导出私钥,请使用OpenSSL。
另一种选择:您可以生成PKCS12格式的密钥库。然后,您可以将其导入浏览器,然后导出私钥。
答案 1 :(得分:5)
您在密钥库中创建了一个私有(和关联的公共)密钥。要使它真正可用,您可以通过认证机构(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
以了解要查找的别名,然后使用密码和参数调用此程序。在私钥输入的情况下,它以可读的形式显示密钥本身以及包含公钥的自签名证书。如果是“可信证书”,则仅显示公钥。
答案 2 :(得分:3)
(Portecle)是一个非常方便的GUI工具,用于管理密钥库。除此之外,它还可以选择导出私钥及其相关证书。
共享公钥的常用方法是共享密钥对的证书(它包含您的公钥)
答案 3 :(得分:2)
keytool -list -v -alias myCert -storepass 123456 -keystore file.jks
或
keytool -list -rfc -alias myCert -storepass 123456 -keystore file.jks
如
所述keytool -help
答案 4 :(得分:0)
您可以使用keystore-explorer。