一、导入证书到JDK

1.1 导出证书

openssl s_client -connect 目标域名:443 </dev/null | openssl x509 -out server.crt

1.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

标签: none

添加新评论