Java keytool-请参阅公钥和私钥

Java keytool-请参阅公钥和私钥,java,security,keystore,digital-certificate,keytool,Java,Security,Keystore,Digital Certificate,Keytool,我以编程方式创建了jks类型的Java密钥库(即默认类型)。 它最初是空的,所以我创建了一个DSA证书 keytool -genkey -alias myCert -v -keystore trivial.keystore 如何查看公钥和私钥? 即,是否有打印证书私钥的命令? 我只能找到keytool-certreq,据我所知,它打印整个证书: -----BEGIN NEW CERTIFICATE REQUEST----- MIICaTCCAicCAQAwZTELMAkGA1UEBhMCR1I

我以编程方式创建了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查看私钥(或公钥)

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

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

您在密钥库中创建了私钥(以及关联的公钥)。为了使其真正可用,您可以让认证机构(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-keystoremystore
以了解要查找的别名,然后使用密码和参数调用此程序。对于私钥条目,它以可读形式显示密钥本身以及包含公钥的自签名证书。对于“可信证书”,它只显示公钥。

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

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

如中所述

keytool -help
你可以用。

好的,所以查看私钥不是故意的。公钥呢?有显示公钥的命令吗?我刚刚添加了一个简单的java类来查看密钥库。(这有点复杂,我甚至自己尝试格式化密钥……直到我想到尝试
toString()
方法。)@MircoWidmer–谢谢你的帮助。我不知道为什么当你只是在修改一个打字错误时,人们会拒绝它(上面提到的理由肯定是无效的)。我现在修复了它。这很酷,但我无法使用jceks,我知道我可以转换它,只是想知道是否可能。该命令只列出公钥。私钥无法通过keytoolTo访问以获取PEM格式的私钥:openssl pkcs12-in-nocerts-nodes
keytool -list -rfc -alias myCert -storepass 123456 -keystore file.jks
keytool -help