注意要点


  • 名字和姓氏输入项:访问的域名地址
  • alias:别名可以随便写,一般要有意义,后续操作别名要一致,我这里保持和域名统一了

证书生成与导入

1. 使用java自带keytool创建本地密钥库


  • 密码:changeit
  • 别名:abc.fxbin123.com


语法: keytool -genkey -alias abc.fxbin123.com -keyalg RSA -keystore abc.keystore


➜  keytool -genkey -alias abc.fxbin123.com -keyalg RSA -keystore abc.keystore
输入密钥库口令:
再次输入新口令:
您的名字与姓氏是什么?
[Unknown]: abc.fxbin123.com
您的组织单位名称是什么?
[Unknown]: fxbin123
您的组织名称是什么?
[Unknown]: abc
您所在的城市或区域名称是什么?
[Unknown]: beijing
您所在的省/市/自治区名称是什么?
[Unknown]: beijing
该单位的双字母国家/地区代码是什么?
[Unknown]: cn
CN=abc.fxbin123.com, OU=fxbin123, O=abc, L=beijing, ST=beijing, C=cn是否正确?
[否]: y

输入 <abc.fxbin123.com> 的密钥口令
(如果和密钥库口令相同, 按回车):
再次输入新口令:

Warning:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore abc.keystore -destkeystore abc.keystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。

2. 把密钥库导出成证书文件


语法: keytool -export -alias abc.fxbin123.com -keystore abc.keystore -file abc.crt -storepass changeit


➜  keytool -export -alias abc.fxbin123.com -keystore abc.keystore -file abc.crt -storepass changeit
存储在文件 <abc.crt> 中的证书

Warning:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore abc.keystore -destkeystore abc.keystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。

3. 查看证书


语法: keytool -printcert -file abc.crt


➜ keytool -printcert -file abc.crt
所有者: CN=abc.fxbin123.com, OU=fxbin123, O=abc, L=beijing, ST=beijing, C=cn
发布者: CN=abc.fxbin123.com, OU=fxbin123, O=abc, L=beijing, ST=beijing, C=cn
序列号: af49cba
有效期为 Sun May 13 22:02:59 CST 2018 至 Sat Aug 11 22:02:59 CST 2018
证书指纹:
MD5: XXXXXXXXXXXXXXXXXX
SHA1: XXXXXXXXXXXXXXXXXX
SHA256: XXXXXXXXXXXXXXXXXX
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3

扩展:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: E3 5F 26 2B B7 15 C9 4A 16 15 10 AF FB 95 1E 3D ._&+...J.......=
0010: 8D 97 28 25 ..(%
]
]

4. 将创建过的证书导入到java证书库


语法: keytool -import -keystore “${JAVA_HOME}/jre/lib/security/cacerts” -file “/Users/abc/Desktop/abc.crt” -alias abc.fxbin123.com


这里建议把进入caserts目录再操作,不然容易出现如下错误,大概是无法识别,另外需要加上root权限。

keytool 错误: java.io.FileNotFoundException: ${JAVA_HOME}/jre/lib/security/cacerts (No such file or directory)

实例

➜ keytool -import -keystore cacerts -file "/Users/abc/Desktop/abc.crt" -alias abc.fxbin123.com
Password:
输入密钥库口令:
所有者: CN=abc.fxbin123.com, OU=fxbin123, O=abc, L=beijing, ST=beijing, C=cn
发布者: CN=abc.fxbin123.com, OU=fxbin123, O=abc, L=beijing, ST=beijing, C=cn
序列号: 1e2220da
有效期为 Sun May 13 22:02:59 CST 2018 至 Sat Aug 11 22:02:59 CST 2018
证书指纹:
MD5: XXXXXXXXXXXXXXXXXX
SHA1: XXXXXXXXXXXXXXXXXX
SHA256: XXXXXXXXXXXXXXXXXX
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3

扩展:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: E3 5F 26 2B B7 15 C9 4A 16 15 10 AF FB 95 1E 3D ._&+...J.......=
0010: 8D 97 28 25 ..(%
]
]

是否信任此证书? [否]: y
证书已添加到密钥库中
➜ security

5. 查看JDK证书内容


语法: keytool -list -v -keystore cacerts -alias abc.fxbin123.com


导入成功之后,jdk证书文件会有对应的如下内容

➜  keytool -list -v -keystore cacerts -alias abc.fxbin123.com
输入密钥库口令:
别名: abc.fxbin123.com
创建日期: 2018-5-23
条目类型: trustedCertEntry

所有者: CN=abc.fxbin123.com, OU=fxbin123, O=abc, L=beijing, ST=beijing, C=cn
发布者: CN=abc.fxbin123.com, OU=fxbin123, O=abc, L=beijing, ST=beijing, C=cn
序列号: af49cba
有效期为 Sun May 13 22:02:59 CST 2018 至 Sat Aug 11 22:02:59 CST 2018
证书指纹:
MD5: XXXXXXXXXXXXXXXXXX
SHA1: XXXXXXXXXXXXXXXXXX
SHA256: XXXXXXXXXXXXXXXXXX
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3

扩展:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: E3 5F 26 2B B7 15 C9 4A 16 15 10 AF FB 95 1E 3D ._&+...J.......=
0010: 8D 97 28 25 ..(%
]
]

➜ security

6. 根据 alias 别名删除 JDK 证书


语法: keytool -delete -alias abc.fxbin123.com -keystore cacerts


➜ keytool -delete -alias abc.fxbin123.com -keystore cacerts
Password:
输入密钥库口令: