写在前面
在生成公钥私钥,配置https时经常需要用到keytool,openssl工具,本文就一起看下其是如何使用的。
keytool是jdk自带的工具,不需要额外下载,但openssl需要额外下载 。
1:使用keytool生成jks私钥文件
C:\Windows\system32>D:\\programs\\javas\\java1.8\\bin\\keytool -genkeypair -alias changgou -keyalg RSA -keypass changgou -keystore d:\test\\changgou22.jks -storepass changgou
您的名字与姓氏是什么?
[Unknown]: d
您的组织单位名称是什么?
[Unknown]: d
您的组织名称是什么?
[Unknown]: e
您所在的城市或区域名称是什么?
[Unknown]: t
您所在的省/市/自治区名称是什么?
[Unknown]: t
该单位的双字母国家/地区代码是什么?
[Unknown]: cn
CN=d, OU=d, O=e, L=t, ST=t, C=cn是否正确?
[否]: y
Warning:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore d:\test\\changgou22.jks -destkeystore d:\test\\changgou22.jks -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。
提示你录入的信息,测试的话随便录就行,正式使用的话最好录入真实的,不过都无所谓,最后选择y代表统一让你核对的信息,就生成jks文件了:
这就是我们加密时候使用的私钥文件。
2:使用keytool查看生成的jks私钥文件
C:\Windows\system32>D:\\programs\\javas\\java1.8\\bin\\keytool -list -v -keystore d:\\test\\changgou22.jks -storepass changgou
密钥库类型: jks
密钥库提供方: SUN
您的密钥库包含 1 个条目
别名: changgou
创建日期: 2024-4-26
条目类型: PrivateKeyEntry
证书链长度: 1
证书[1]:
所有者: CN=d, OU=d, O=e, L=t, ST=t, C=cn
发布者: CN=d, OU=d, O=e, L=t, ST=t, C=cn
序列号: 44c900bc
有效期为 Fri Apr 26 13:31:03 CST 2024 至 Thu Jul 25 13:31:03 CST 2024
证书指纹:
MD5: B0:C7:50:41:C1:A5:D7:0C:C0:7D:2D:0C:B9:F2:E6:80
SHA1: CC:3C:58:FA:4C:7B:FD:DE:E0:BF:FC:3B:A6:05:5D:5E:8C:15:86:33
SHA256: A6:3A:BC:AE:58:75:C0:E8:5A:9A:AB:16:4D:B4:2D:BE:55:F6:DC:F6:D4:AC:C1:43:4D:E5:8A:D5:0A:BC:4B:B8
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3
扩展:
#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 7E 14 12 F9 51 A8 8A 80 05 51 9E 93 72 9C EF E8 ....Q....Q..r...
0010: D4 8C E5 1B ....
]
]
*******************************************
*******************************************
Warning:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore d:\\test\\changgou22.jks -destkeystore d:\\test\\changgou22.jks -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。
3:使用keytool导出二进制的公钥证书
这种公钥证书可以直接安装到操作系统中。
C:\Windows\system32>D:\\programs\\javas\\java1.8\\bin\\keytool -export -alias changgou -keystore d:\\test\\changgou22.jks -file D:\\test\\changgou22.cer -storepass changgou
存储在文件 <D:\\test\\changgou22.cer> 中的证书
Warning:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore d:\\test\\changgou22.jks -destkeystore d:\\test\\changgou22.jks -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。
直接双击是可以安装到操作系统的:
3:使用keytool导出明文的公钥
一般是程序使用。
C:\Windows\system32>D:\\programs\\javas\\java1.8\\bin\\keytool -list -rfc --keystore d:\\test\\changgou22.jks | D:\\programs\\OpenSSL-Win64\\bin\\openssl x509 -inform pem -pubkey
输入密钥库口令: Warning: Reading certificate from stdin since no -in or -new option is given
changgou
Warning:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore d:\\test\\changgou22.jks -destkeystore d:\\test\\changgou22.jks -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmLXt1bG3uUneO/JnKkp6
uXf/7/qK5wgnrWttk9yCryutzzGQOYLfZbu3E9HnpJ6DHL04In9tk3s04+NfUS7z
yricpRjoPfnppZHI/DEqTQioKmg90j8hdASZIrqsn6dwYy/hK7LxMf+WCeLw8gFL
T3f2R3ZMYo6szcdFkNp5mIvigalVV4+OUe268DxJW4X1mAwEdS2ry561kTkqiBvo
djnID7KA/qVsURkiqb7wRHVCgWdL6dMO0wdL/aacTyM7toXxASgw1yLSJJjUIaG2
aydmlLAQEproSFbx90p13ponVWRuh+8yIQwDO+zvq/itwuc8dGHHnPaQ5TWvicQ9
SwIDAQAB
-----END PUBLIC KEY-----
-----BEGIN CERTIFICATE-----
MIIDMTCCAhmgAwIBAgIERMkAvDANBgkqhkiG9w0BAQsFADBJMQswCQYDVQQGEwJj
bjEKMAgGA1UECBMBdDEKMAgGA1UEBxMBdDEKMAgGA1UEChMBZTEKMAgGA1UECxMB
ZDEKMAgGA1UEAxMBZDAeFw0yNDA0MjYwNTMxMDNaFw0yNDA3MjUwNTMxMDNaMEkx
CzAJBgNVBAYTAmNuMQowCAYDVQQIEwF0MQowCAYDVQQHEwF0MQowCAYDVQQKEwFl
MQowCAYDVQQLEwFkMQowCAYDVQQDEwFkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
MIIBCgKCAQEAmLXt1bG3uUneO/JnKkp6uXf/7/qK5wgnrWttk9yCryutzzGQOYLf
Zbu3E9HnpJ6DHL04In9tk3s04+NfUS7zyricpRjoPfnppZHI/DEqTQioKmg90j8h
dASZIrqsn6dwYy/hK7LxMf+WCeLw8gFLT3f2R3ZMYo6szcdFkNp5mIvigalVV4+O
Ue268DxJW4X1mAwEdS2ry561kTkqiBvodjnID7KA/qVsURkiqb7wRHVCgWdL6dMO
0wdL/aacTyM7toXxASgw1yLSJJjUIaG2aydmlLAQEproSFbx90p13ponVWRuh+8y
IQwDO+zvq/itwuc8dGHHnPaQ5TWvicQ9SwIDAQABoyEwHzAdBgNVHQ4EFgQUfhQS
+VGoioAFUZ6Tcpzv6NSM5RswDQYJKoZIhvcNAQELBQADggEBAGNTxcFQtRofy6Nm
Mo78mkj/fXcEDm4qKij3sYTKDhsmDzKhOU9f3eqNAeaCZsENiEJsXhXInIlIsqVV
P8lRnc/BX8oViuSynVe+QQ6/yAL3238Jkiz6k3aA6VOvY+wGrCRmH0dND3Rn8XmI
pYf+fyyNjXnqvG+jdMK/3/cyvTGjmyB9C6132E8wAo31L6KyZ3wjMggq1v9gvXdi
05KY0Ys3zR6F9Pbr9gSofWXELFH3s2v3Oysi3dW1dtObC6ECNdEnW7QybzKr9bo3
ccCY2jZpfRCoukuj3DVTfdXuu30bXgE/1CCeTXdPpewdq37zW2dLK43sLvsuDh6r
aL8nbvI=
-----END CERTIFICATE-----
C:\Windows\system32>
将红框中的文件复制到文件中并命名为.cert
即可用来作为公钥来解密。
写在后面
参考文章列表
SpringSecurityOauth2授权模式与使用RSA非对称加密方式生成公钥私钥 。
使用JDK的 keytool 生成JKS、使用openssl查看公钥、导出公钥publickey.cer证书 。