JKS 密钥库生成及使用指南
一. 概述
JKS全名Java Key Store,是Java平台中用于存储密钥和证书的标准格式,主要用于安全地管理加密密钥、证书及相关安全凭证,本文旨在指导运维为Spring Gateway+OAuth2的微服务生成、更新和管理JWT认证所需的密钥对,通过为不同项目创建独立的密钥对,提升系统安全性
二. 环境准备
采用JDK自带的keytool工具作为主要方案,无需额外依赖,操作简单,适合企业级应用,要确保已安装JDK8+,并配置好环境变量,验证keytool工具命令:
keytool -help
生产环境,可以直接使用认证微服务的JDK容器环境
三、生成私钥+公钥
- 生成JKS私钥文件
执行以下命令生成 RSA 密钥对并存储在my.jks文件中:
keytool -genkeypair \
-keyalg RSA \
-keysize 2048 \
-storetype JKS \
-keystore my.jks \
-validity 3650 \
-dname "CN=hushow, OU=hushow, O=hushow, L=hushow, ST=cs, C=cn" \
-alias test \
-storepass test@8888 \
-keypass test@8888
私钥用于认证服务颁发jwt token
参数说明
参数 | 描述 |
---|---|
-genkeypair |
生成密钥对 |
-alias test |
密钥条目的别名,用于后续引用该密钥对 |
-keyalg RSA |
使用 RSA 算法生成密钥对 |
-keysize 2048 |
密钥长度,推荐使用 2048 位或更高 |
-storetype JKS |
指定密钥库类型为 JKS (Java Key Store) |
-keystore my.jks |
生成的密钥库文件名,存储密钥对和证书信息 |
-validity 3650 |
证书有效期(天),此处设置为 10 年 |
- 生成公钥文件
基于已生成的my.jks私钥导出对应的公钥文件:
keytool -exportcert -alias xmgl -keystore dm.jks -rfc > pubkey.txt
公钥用于网关等服务进行JWT token的验签
四、密钥对部署流程
配置文件建议通过nacos共用配置文件(common.yml)统一配置和覆盖
-
认证服务(uaa-server)更新秘钥+配置
1.将生成的dm.jks文件部署到服务的classpath 下,并更新配置文件的secret和alias参数:encrypt: key-store: location: file:./dm-test.jks #外部配置文件覆盖 secret: test@8888 alias: test
重要
:通过location路径覆盖jar中的默认秘钥,否则不会生效,密钥文件按项目命名 -
网关服务(gateway)更新秘钥+配置
1.将生成的dm.jks文件部署到服务的classpath 下,并更新配置文件的secret和alias参数:encrypt: key-store: location: file:./dm-test.jks #外部配置文件覆盖 secret: test@8888 alias: test
重要
:通过location路径覆盖jar中的默认秘钥,否则不会生效,建议密钥文件按项目命名 -
报表服务(metadata-report-app)更新秘钥+配置
1.将生成的dm.jks文件部署到服务的classpath 下,并更新配置文件的secret和alias参数:encrypt: key-store: location: file:./dm-test.jks #外部配置文件覆盖 secret: test@8888 alias: test
重要
:通过location路径覆盖jar中的默认秘钥,否则不会生效,密钥文件按项目命名
五. 安全注意事项
- 妥善保管生成的 dm.jks 文件和相关密码
- 定期轮换密钥(建议每年更换一次)
- 不同项目应使用独立的密钥对
- 避免将密钥文件提交到版本控制系统
六. 常见问题
-
忘记密钥库密码
无法直接恢复密码,需重新生成密钥库 -
证书过期
使用相同别名重新生成密钥对将覆盖原有条目 -
密钥库损坏
尝试使用备份恢复,或重新生成密钥库
七. 附录:常用 keytool 命令
- 查看 JKS 证书信息
keytool -list -v -keystore dm.jks -storepass your\_password
查看证书有效期
keytool -list -v -keystore dm.jks -storepass your\_password | grep "Valid from"
导出证书为DER格式
keytool -export -alias dd -keystore dm.jks -file certificate.der -storepass your\_password
将DER格式证书转换为PEM格式
openssl x509 -inform der -in certificate.der -out certificate.pem
删除JKS中的密钥条目
keytool -delete -alias dd -keystore dm.jks -storepass your\_password
更新密钥库密码
keytool -storepasswd -keystore dm.jks -storepass old\_password -new new\_password