Docker化连接SAP HANA的应用时如何添加SSL证书完成校验?
注:DigiCert Global Root CA为操作系统、标准JDK发行版默认信任的根CA,若你使用的是官方标准JDK基础镜像且未修改默认信任库,通常无需手动导入证书即可直接连接。若测试时出现SSL证书校验错误,再执行以下操作。
方案1:将HANA服务端根证书集成到Docker容器
你可以根据自己的场景选择以下两种实现方式:
方式一:导入证书到JDK默认信任库
- 先提前导出DigiCert Global Root CA根证书为PEM格式,命名为
DigiCertGlobalRootCA.crt,放到Docker构建上下文目录(和Dockerfile同级) - 编写Dockerfile,在构建阶段完成证书导入,示例如下:
# 替换为你实际使用的JDK基础镜像 FROM openjdk:11-jre-slim WORKDIR /app # 复制根证书到容器系统证书目录 COPY DigiCertGlobalRootCA.crt /usr/local/share/ca-certificates/ # 可选:更新系统级CA信任,满足容器内其他程序的HTTPS请求需求 RUN update-ca-certificates # 导入证书到JDK默认信任库cacerts,默认密码为changeit RUN keytool -importcert -file /usr/local/share/ca-certificates/DigiCertGlobalRootCA.crt \ -cacerts -alias digicert_global_root_ca -storepass changeit -noprompt # 复制应用包并配置启动命令 COPY your-app.jar /app/ ENTRYPOINT ["java", "-jar", "your-app.jar"]
方式二:使用自定义独立信任库(适合多证书管理场景)
- 先在本地环境生成自定义信任库,执行命令:
keytool -importcert -file DigiCertGlobalRootCA.crt -keystore custom-truststore.jks -alias digicert_global_root_ca -storepass 自定义密码 -noprompt - 编写Dockerfile,启动时通过JVM参数指定信任库:
FROM openjdk:11-jre-slim WORKDIR /app COPY custom-truststore.jks /app/ COPY your-app.jar /app/ ENTRYPOINT ["java", "-Djavax.net.ssl.trustStore=/app/custom-truststore.jks", "-Djavax.net.ssl.trustStorePassword=自定义密码", "-jar", "your-app.jar"]
你也可以直接把信任库配置加到JDBC URL参数中,不用全局配置JVM参数,示例:jdbc:sap://localhost:30013/?encrypt=true&validateCertificate=true&trustStore=/app/custom-truststore.jks&trustStorePassword=自定义密码
方案2:证书到期无业务影响更新方法
- 提前操作:在旧证书到期前,将新的根证书/服务端证书导入信任库,同一个信任库可同时存储新旧两个证书(设置不同别名即可),JVM会自动匹配合法证书,不会影响现有连接
- 滚动更新:
- 若使用K8S、Docker Swarm等编排工具:将更新后的信任库做成ConfigMap/Secret,滚动更新容器实例,更新过程中旧实例持续提供服务,无业务中断
- 若为单机Docker部署:先启动加载新信任库的新容器,验证连接正常后将流量切到新容器,再下线旧容器即可
- 优化建议:可将信任库文件挂载到宿主机目录,不用每次更新证书都重新构建镜像,替换宿主机文件后重启容器即可生效;若应用支持SSL信任库热加载,可实现完全无重启更新。
内容的提问来源于stack exchange,提问作者Ritesh Singh
相关产品推荐
相关产品推荐

