私钥,公钥和证书关系以及从密钥库访问特定证书的最佳方式

时间:2017-11-23 12:29:54

标签: java keytool

我使用了以下keytool命令:

keytool -genkey -alias <alias name> -keypass <keypassword> -keystore <keystore file name with location> -keyalg "RSA" -sigalg SHA1WITHRSA

然后我使用以下命令查看了密钥库内容:

keytool -list -v -keystore <keystore file name with location>

显示以下内容:

Keystore type: JKS
Keystore provider: SUN

Your keystore contains 1 entry

Alias name: keyalias
Creation date: Nov 23, 2017
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=XXXXX, OU=SDG, O=XXXXX, L=XXXXX, ST=XX, C=IN
Issuer: CN=XXXXX, OU=SDG, O=XXXXX, L=XXXXX, ST=XX, C=IN
Serial number: 6c6ec57a
Valid from: Thu Nov 23 14:30:35 IST 2017 until: Wed Feb 21 14:30:35 IST 2018
Certificate fingerprints:
MD5:  85:08:01:27:BF:CA:88:17:88:11:9D:E4:DF:DC:70:AD
SHA1: 6D:14:08:BD:F6:4E:51:C2:A0:58:46:89:CC:85:06:BC:26:DA:23:4E
SHA256: D6:94:A8:31:2F:5D:29:FA:29:5F:8C:5D:24:D0:8E:47:D4:17:4C:B8:8A:
D8:A2:37:3F:18:24:5A:06:C1:E4:CB
Signature algorithm name: SHA1withRSA
Version: 3

Extensions:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
    KeyIdentifier [
        0000: 50 AD ED B0 1D 3D 12 AE   D4 C0 C7 EE 9F EE 43 11  P....=........C.
        0010: F4 71 02 93                                        .q..
    ]
]

*******************************************
*******************************************

正如我在密钥库中只能看到一个条目。希望得到以下答案:

  1. 公钥在哪里?

  2. 我也可以看到证书,而我没有创建相同的证书。如果我需要在java代码中访问此证书,那么我是否需要使用密钥别名,还是可以设置任何单独的别名来访问此证书?

  3. 如果有人可以解释如何在密钥库中链接私钥,公钥和证书以及如何从密钥库访问特定证书(假设密钥库具有多个证书),将会很有帮助。

2 个答案:

答案 0 :(得分:2)

  

keytool -genkey -alias

很好,你刚刚创建了一个KeyPair。

keytool 命令使用自签名证书创建密钥对。实际上,在同一个别名中你有一个PrivateKey和X509证书(PublicKey +一些属性)

  

公钥在哪里?

在这种情况下,公钥包含在证书中。

  

如果我需要在java代码中访问此证书,那么我是否需要使用密钥别名,还是可以设置任何单独的别名来访问此证书?

以下代码从密钥对中重新获得证书和公钥

KeyStore.PrivateKeyEntry privKeyEntry = (KeyStore.PrivateKeyEntry)keystore.getEntry(KEYSTORE_ALIAS, new KeyStore.PasswordProtection(KEYSTORE_KEY_PASSWORD.toCharArray()));

PublicKey pubKey = privKeyEntry.getCertificate().getPublicKey();
  

如果有人可以解释私钥,公钥和证书如何在密钥库中链接,那将会很有帮助

显然你已经发现了:)

答案 1 :(得分:1)

回答自己的问题,也可能对别人有所帮助。

私钥包含一系列数字。其中两个数字构成“公钥”,其他数字则是“私钥”的一部分。 “公钥”位也嵌入在证书中。要检查证书中的公钥是否与私钥的公共部分匹配,您需要查看证书和密钥并比较这些编号。

要从私钥访问证书,您需要使用在列出密钥库内容时可以公开找到的私钥别名。