我使用了以下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..
]
]
*******************************************
*******************************************
正如我在密钥库中只能看到一个条目。希望得到以下答案:
公钥在哪里?
我也可以看到证书,而我没有创建相同的证书。如果我需要在java代码中访问此证书,那么我是否需要使用密钥别名,还是可以设置任何单独的别名来访问此证书?
如果有人可以解释如何在密钥库中链接私钥,公钥和证书以及如何从密钥库访问特定证书(假设密钥库具有多个证书),将会很有帮助。
答案 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)
回答自己的问题,也可能对别人有所帮助。
私钥包含一系列数字。其中两个数字构成“公钥”,其他数字则是“私钥”的一部分。 “公钥”位也嵌入在证书中。要检查证书中的公钥是否与私钥的公共部分匹配,您需要查看证书和密钥并比较这些编号。
要从私钥访问证书,您需要使用在列出密钥库内容时可以公开找到的私钥别名。