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、客户端认证、或调用第三方安全接口时遇到证书问题,这个操作可以说是基础中的基础,务必掌握。


原始标题:How to Import a .cer Certificate Into a Java KeyStore | Baeldung