1. 背景
开发环境或者测试环境,有的时候需要用到 HTTPS
,在时间和成本上考虑,我们利用 Java
密码体系结构(JCA
, Java Cryptography Architecture
) 完成建设可用的加密通信库。
利用 Java
自带 keytool.exe
生成证书, Keytool
是一个 Java
数据证书的管理工具,在命令行方式下,生成服务器证书申请文 CSR
,然后到 CA
签发服务器证书。
2. 演示环境
- Windows 10
- Jdk 1.8.0.131
3. 命令
- genkey:定义将要创建一个新的密钥
- alias:别名,
alias
,不区分大小写 - keyalg:指定加密的算法,这里是
RSA
- keystore:指定密钥保存路径,在 D:盘目录下的 Code 文件中
- dname:表示密钥的
Distinguished Names
- keypass:私钥的密码
- storepass:密钥库密码
- validity:创建的证书有效期,单位为 天
- list:列出证书
- rfc:可编码方式打印证书
- v:显示详细信息
- import:将已签名数字证书导入密钥库
- export:将别名指定的证书导出到文件
- keysize:指定密钥长度
- delete:删除密钥库中某条目
- file:参数指定导出到文件的文件名
- keypasswd:修改密钥库中指定条目的密码
- storepasswd:修改密钥库的密码
4. 创建证书
keytool -genkey -alias eviltop -keyalg RSA -keystore D:\Code\eviltop.keystore -dname "CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN" -keypass 123456 -storepass 123456 -validity 180
当不指定 keypass
和 storepass
,创建密钥过程中需要手工输入。
5. 查看证书
5.1. 显示详细
~~
keytool -list -v -keystore eviltop.keystore -storepass 123456
$ keytool -list -v -keystore eviltop.keystore -storepass 123456
密钥库类型: PKCS12
密钥库提供方: SUN
您的密钥库包含 1 个条目
别名: eviltop
创建日期: 2022年8月13日
条目类型: PrivateKeyEntry
证书链长度: 1
证书[1]:
所有者: CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN
发布者: CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN
序列号: 2bce8e3
生效时间: Sat Aug 13 22:38:02 CST 2022, 失效时间: Thu Feb 09 22:38:02 CST 2023
证书指纹:
SHA1: 76:60:92:F3:44:22:39:4F:66:B8:F1:B2:7B:11:BF:C6:66:AE:56:1F
SHA256: 19:FD:21:B9:C9:51:BA:D9:82:3F:F6:C3:69:59:2D:99:E8:19:32:2C:05:46:7F:64:76:AB:A0:89:9E:38:20:8D
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3
扩展:
### 5.2. 编码打印
keytool -list -rfc -keystore eviltop.keystore -storepass 123456
$ keytool -list -rfc -keystore eviltop.keystore -storepass 123456
密钥库类型: PKCS12
密钥库提供方: SUN
您的密钥库包含 1 个条目
别名: eviltop
创建日期: 2022年8月13日
条目类型: PrivateKeyEntry
证书链长度: 1
证书[1]:
-----BEGIN CERTIFICATE-----
MIIDZTCCAk2gAwIBAgIEArzo4zANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJD
TjELMAkGA1UECBMCU0gxCzAJBgNVBAcTAlNIMRIwEAYDVQQKEwlsb2NhbGhvc3Qx
EjAQBgNVBAsTCWxvY2FsaG9zdDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTIyMDgx
MzE0MzgwMloXDTIzMDIwOTE0MzgwMlowYzELMAkGA1UEBhMCQ04xCzAJBgNVBAgT
AlNIMQswCQYDVQQHEwJTSDESMBAGA1UEChMJbG9jYWxob3N0MRIwEAYDVQQLEwls
b2NhbGhvc3QxEjAQBgNVBAMTCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQAD
ggEPADCCAQoCggEBAIXMJuibBSyK60r+QMt9aqbrcSH/Esja31cbujh7DRJdjRgv
6c6d93JGQhzBe0mvWUnshi3KhmRCr44S2ZRtGk+UIEK+/cJWRgQzT3GFkNUe6pUh
dSe31g740409iu96/NihI2GjbsYJHsgsRktXBS8Wk7AjJlp2tFEb88d2wK/Ul3wW
Z/cuZnbed4x51htKOosyrLhtGM8QOXZfhNgAoVGY61eVhp5SB/TL4o9XnSaZsKfM
L/UV6QXmgrqsbyH7MLQCT6E/Hr7wW3lnwsSpiNg/49ETxYlS4Fj6N/O7rH4HFnWx
RXHKgFuKGsj7cZ0cELbTaydG8CqdptGybVkA3dECAwEAAaMhMB8wHQYDVR0OBBYE
FJlqY0G6hbf1+D9Q3vg18Z+2mI51MA0GCSqGSIb3DQEBCwUAA4IBAQAoskcTy9Kl
5iOMiQTyu71TEY48wx94ajqdRrdLm5frKawh115lGUhDEz+w+NAO+dGirNHuoyXf
Bl2G7qUVF6rbNVGHrwUlCdVFLD02l2nLVvqjQEnicxU6P5IBwxBHhbQfKEdFOETI
jr8gQKshDNgO+C6ugktnLfSNkiMs6UYeySWcZQDetZJbmts7N6mbpZW/h1Looku5
IJRkfwL5xEStRcOM1aEjIrATKveZQfbDPFQCpJmTfktoa1K4pob22/FeOPkSz35W
EJEp4eOFY/0kir4oacwyada1PUocklCJ+iiTLwLtzrue5upzBaFikyyhmtGiuT2p
NApthnwtHmuv
-----END CERTIFICATE-----
## 6. 导入导出证书
### 6.1. 导出
keytool -export -alias eviltop -file ./eviltop.crt -keystore ./eviltop.keystore -storepass 123456
![20220813224758](https://abram.oss-cn-shanghai.aliyuncs.com/blog/cia/20220813224758.png)
### 6.2. 导入
keytool -import -alias eviltop -file ./eviltop.crt -keystore ./eviltop.keystore -storepass 123456
## 7. 修改密码
### 7.1. 修改密钥库
keytool -storepasswd -keystore ./eviltop.keystore -storepass 123456 -new 567890
### 7.2. 修改密钥库指定条目
keytool -keypasswd -alias eviltop -keypass 123456 -new 654321 -storepass 567890 -keystore ./eviltop.keystore
## 8. 删除密码
keytool -delete -alias eviltop -keystore "D:\Environment\JDK\1.8.0_301\jre\lib\security\cacerts" -storepass changeit