当前位置: 首页 > 面试题库 >

keytool-查看公钥和私钥

翁烨霖
2023-03-14
问题内容

我以编程方式创建了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以了解要查找的别名,然后使用密码和参数调用该程序。在输入私钥的情况下,它以可读形式显示密钥本身以及包含公钥的自签名证书。在“受信任的证书”的情况下,它仅显示公共密钥。



 类似资料:
  • 我想在Java中通过SSL/TLS建立一个客户机服务器通信。服务器是多线程的。使用openssl,我充当自己的CA(为权威创建私钥和自签名证书)。现在我要为我的服务器和客户端创建密钥和证书,这些密钥和证书是从我创建的CA签名的。 1)我必须根据提示为每个客户创建证书和密钥吗?还是另一种“自动”方式,例如使用脚本? 2)我已经看到用于设置密钥库的代码 问题是我如何单独创建这些jks文件?public

  • 我有以下代码。 当我使用rsacyncrypt方法时,它采用参数“RSAKeyInfo”(用于加密的公钥和用于解密的私钥)。 如何获取此方法用于加密和解密的私钥和公钥的值。 谢谢

  • 我一直在阅读一些RSA文献和堆栈溢出问题,但我没有得到明确的答案。 仅给定一个RSA私钥模和私钥指数,这是我所拥有的全部(也足够用于所有密码相关操作),我能得到相关的公钥模和公钥指数吗? 另外,我是否可以仅用这两个参数获得私钥的编码形式?我在java中尝试了以下方法(java不是实际的请求),但是支持它的OpenSSL引擎失败,错误为:04000090:RSA例程:openSSL_internal

  • 本文向大家介绍公钥和私钥有什么区别?相关面试题,主要包含被问及公钥和私钥有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 回答:在区块链中,需要使用公钥进行标识,而使用私钥进行加密和身份验证。发送方可以使用接收方的公钥发送消息,而接收方可以使用私钥对消息或交易进行解密。通过同时使用两个密钥,可以确保通信或交易的安全和防篡改。

  • 本文向大家介绍私钥和公钥之间的区别,包括了私钥和公钥之间的区别的使用技巧和注意事项,需要的朋友参考一下 私钥和公钥术语用于加密和解密。这些键用于加密/解密敏感信息。 私钥 私钥用于加密和解密数据。此键在加密的敏感信息的发送者和接收者之间共享。私钥也被称为对称的,对双方都是通用的。私钥加密比公钥加密机制更快。 公钥 公共键用于加密,私有键用于解密数据。私钥在加密的敏感信息的发送者和接收者之间共享。公

  • 我明白JWT规范没有涵盖这一点:但我很想知道在实际的JWT使用中有哪些常见的做法。 当然,这个问题与HTTPS中涉及的证书无关:我只是在讨论JWT签名和加密中使用的密钥。