首先,说下java的cacerts证书库: JAVA_HOME目录下的jre的cacerts
主要的步骤有4个:
- 生成证书
- 导出证书
- 导入证书
生成证书(此处CN的值为localhost或者你想设置的域名,而 cas.example.org 是我想通过https访问的域名)
keytool -genkey -alias cas -keyalg RSA -keysize -keypass changeit -storepass changeit -keystore /etc/cas/thekeystore -dname "CN=cas.example.org,OU=duodian.com,O=duodian,L=Beijing,ST=BeiJing,C=CN" Warning:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore /etc/cas/thekeystore -destkeystore /etc/cas/thekeystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。
解释: 在 /etc/cas 目录下,生成名为 thekeystore 的密钥库, changeit 分别为密钥口令和密钥库口令, 别名为 cas .
han@ubuntu:/etc/cas$ ls
cas.cer config logs services-repo thekeystore
我们发现,在 /etc/cas 目录下已经生成 名为的 thekeystore 的证书.接下来我们导出证书
han@ubuntu:/etc/cas$ keytool -exportcert -alias cas -keystore ./thekeystore -file ./cas.cer -storepass changeit
存储在文件 </etc/cas/cas.cer> 中的证书 Warning:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore /etc/cas/thekeystore -destkeystore /etc/cas/thekeystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。
解释: 将 thekeystore 导出为 cas.cer, 路径就是当前路径 /etc/cas
导入证书 cas.cer 到java的证书库中
han@ubuntu:/usr/lib/jvm/java--openjdk-amd64/jre/lib/security$ sudo keytool -import -alias cas -keystore ./cacerts -file /etc/cas/cas.cer
[sudo] han 的密码:
输入密钥库口令:
所有者: CN=cas.example.org, OU=duodian.com, O=duodian, L=Beijing, ST=BeiJing, C=CN
发布者: CN=cas.example.org, OU=duodian.com, O=duodian, L=Beijing, ST=BeiJing, C=CN
序列号: 41739b25
有效期为 Mon Sep :: CST 至 Sun Dec :: CST
证书指纹:
MD5: F1::::AF:2F:1C::8D:0F:E9:::DD:F8:B7
SHA1: D0:3D::A9::E8:FA:9D::DD::0E:E5:4A:::7D:1A:C9:AC
SHA256: :::7C::1D:DA::FA::DF:D9::CF:B9:B6:6C::4E::FA:CC:A4:CC:AE:D3:B7:F4:3E:6D:F9:7A
签名算法名称: SHA256withRSA
主体公共密钥算法: 位 RSA 密钥
版本: 扩展: #: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
: D4 8C E9 3B 1D 4D CF 7D 4C 0E F7 B3 6D ...;.M..DLF...m!
: 0C E3 C8 F2 ....
]
] 是否信任此证书? [否]: 是
证书已添加到密钥库中
解释:将上一步导出的cas.cer导入到java的证书库(即下图的 cascerts )中
han@ubuntu:/usr/lib/jvm/java--openjdk-amd64/jre/lib/security$ ls
blacklisted.certs cacerts java.policy java.security nss.cfg policy
到此为止,将证书导入到java证书库的流程就算走完了...下边说下流程之外相关的东西:
注意, cascerts 不是个文件夹:
han@ubuntu:/usr/lib/jvm/java--openjdk-amd64/jre/lib/security$ cd cacerts
bash: cd: cacerts: 不是目录
查看你导入java证书库的证书(通过别名 alias )
han@ubuntu:/usr/lib/jvm/java--openjdk-amd64/jre/lib/security$ keytool -list -keystore ./cacerts -alias cas
输入密钥库口令:
cas, --, trustedCertEntry,
证书指纹 (SHA1): D0:3D::A9::E8:FA:9D::DD::0E:E5:4A:::7D:1A:C9:AC
删除你导入java证书库的证书(通过别名 alias ),我项目中
han@ubuntu:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security$ sudo keytool -delete -alias cas -keystore ./cacerts
[sudo] han 的密码:
输入密钥库口令:
查看是否删除成功(提示别名 cas 不存在,说明删除删除成功)
han@ubuntu:/usr/lib/jvm/java--openjdk-amd64/jre/lib/security$ keytool -list -keystore cacerts -alias cas
输入密钥库口令:
keytool 错误: java.lang.Exception: 别名 <cas> 不存在