JDK信任https证书库
一、导入证书到JDK
1.1 导出证书
openssl s_client -connect 目标域名:443 </dev/null | openssl x509 -out server.crt1.2 信任证书
导入证书到JDK的信任库:使用以下命令将证书导入到JDK的信任库中
keytool -import -v -alias my_server -file server.crt -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit输入信任库口令:默认的信任库口令为changeit。
二、使用tomcat的情况
使用tomcat的情况需要区分两个场景:
| 场景 | 证书作用 | 是否需要配置 |
|---|---|---|
| Tomcat 作为服务端(对外提供 HTTPS) | 需要 Tomcat 配置自己的服务器证书 | 在 server.xml 中配置 keystoreFile |
| Tomcat 作为客户端(调用外部 HTTPS API) | 使用 JDK 信任库验证对方证书 | JDK 导入证书即可,无需额外配置 |
在 Tomcat 里部署的 Java 应用需要调用外部自签 HTTPS API,属于第二种场景。
用户浏览器 ──HTTP──► Tomcat ──HTTPS──► 外部自签 API
│
▼
验证对方证书时查 JDK 的 cacerts
│
导入的证书在这里 ◄── 信任通过Tomcat 调用外部 HTTPS API → 走 JDK 信任库,导入证书有效
Tomcat 自己对外提供 HTTPS → 走 Tomcat 配置,需要单独配 keystore
三、docker容器
容器中需要在build的时候把下载到的证书封装进镜像。
这里提供简单通用形式示例:
把所有需要信任的证书放在特定目录中,然后执行批量导入。
FROM eclipse-temurin:17-jdk-alpine
# 拷贝所有证书到统一目录
COPY certs/*.pem /tmp/certs/
# 批量导入
RUN for cert in /tmp/certs/*.pem; do \
alias=$(basename "$cert" .pem); \
keytool -import -alias "$alias" -file "$cert" \
-keystore $JAVA_HOME/lib/security/cacerts \
-storepass changeit -noprompt; \
done && \
rm -rf /tmp/certs