1. 概述
KeyStore,顾名思义,就是一个用于存储证书、公钥和私钥的仓库。JDK 中自带了一个叫 keytool 的命令行工具,专门用来管理 KeyStore。
而证书文件有很多种格式,但我们要清楚一点:**.cer 文件只包含公钥(X.509 格式),只能用于身份验证,不能用于加密通信。**
在这篇文章中,我们来聊聊如何把一个 .cer 证书文件导入到 Java KeyStore 中。
2. 导入证书
话不多说,直接上操作。我们以 Baeldung 的公钥证书为例,把它导入到一个示例 KeyStore 中。
keytool 工具功能很多,但我们这里只关心 importcert
这个选项,顾名思义就是用来导入证书的。
由于一个 KeyStore 中可能包含多个条目,所以我们要用 -alias
参数给这个证书起个唯一的名字:
> keytool -importcert -alias baeldung_public_cert -file baeldung.cer -keystore sample_keystore
> Enter keystore password:
...
> Trust this certificate? [no]: y
> Certificate was added to keystore
✅ 虽然命令行会提示输入密码和确认信任证书,但我们可以通过 -storepass
和 -noprompt
参数跳过这些交互。
这在脚本中特别有用:
> keytool -importcert -alias baeldung_public_cert -file baeldung.cer -keystore sample_keystore -storepass pass123 -noprompt
> Certificate was added to keystore
⚠️ 另外,如果指定的 KeyStore 不存在,keytool 会自动创建一个新的。
这时候我们可以通过 -storetype
参数指定 KeyStore 的格式:
- Java 8 及以前默认是
JKS
- Java 9 及以后默认是
PKCS12
> keytool -importcert -alias baeldung_public_cert -file baeldung.cer -keystore sample_keystore -storetype PKCS12
> Enter keystore password:
> Re-enter new password:
...
> Trust this certificate? [no]: y
> Certificate was added to keystore
📌 这里我们创建的是一个 PKCS12 类型的 KeyStore。JKS 是 Java 特有的格式,而 PKCS12 则是跨平台的标准格式。
🔧 如果需要,我们也可以通过 Java 代码编程方式来完成这些操作。
3. 总结
本文简单介绍了如何使用 keytool 的 importcert
功能将 .cer 证书导入到 Java KeyStore 中。
如果你在配置 HTTPS、客户端认证、或调用第三方安全接口时遇到证书问题,这个操作可以说是基础中的基础,务必掌握。