在docker中让java程序支持https双向认证

对于https稍微详细的一点的流程,在之前的文章《java实现http/https抓包拦截》中有过一些记录,这里不再详细说明。

https双向认证

按照我的个人理解,所谓https的双向认证简单点来说也就是:客户端(client,一般是浏览器)不仅要验证来处服务端(server)的请求是否合法,服务端(server)也还需要验证客户端(client)的合法性。

一般对于安全性要求比较高的情况下才会使用到https的双向验证,要完成双向认证一般需要3个证书来完成:

  1. ca证书
  2. server端证书
  3. client端证书

对于https双向认证时server端和client端所需要做的工作大体相同,这里以开发时常见的client端进行说明

https双向认证开发环境导入证书

一般开发时,server方会将自己生成的ca证书交给客户端方,同时也会将一个由server方预先生成好的客户端证书交给客户端方,那么开发时我们只需要将那两个证书导入到本地环境中即可

https双向认证在开发时直接用命令导入jdk中即可,如果是jdk1.8,那么也就是jdk(jre)/lib/security这个目录,切换到此目录后,执行下面的命令即可:

keytool -import -alias gen  -keystore cacerts -file "D:\myCA.cer"

keytool -import -alias pt2  -keystore cacerts -file "D:\myPt2.cer"

上面导入的过程中会要求输入密码,以及输入yes/no以接受导入证书,完成之后根据代码进行开发即可

在docker环境中https双向认证证书导入

项目开发好后,一般会进行部署,而现在部署时大都用的docker容器来部署的。

此时对于证书的导入和上面大体相同,在打镜像时完成导入操作即可,还是keytool命令:

RUN \
    cd $JAVA_HOME/jre/lib/security \
    && keytool -keystore cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias gen -file /genCA.cer

通过-storepass先指定密码和-noprompt指定不需要确认流程

那么dockerFile大致就可以这样:

FROM adoptopenjdk/openjdk8-openj9:latest
RUN mkdir -p /usr/share/zoneinfo/Asia
VOLUME ["/tmp"]
COPY  my-app-1.0.jar  app.jar
COPY TimeZone /usr/share/zoneinfo/Asia/Shanghai
COPY classes/ca/myCA.cer myCA.cer
COPY classes/ca/myPt2.cer myPt2.cer
RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime && echo Asia/Shanghai > /etc/timezone
RUN \
    cd $JAVA_HOME/jre/lib/security \
    && keytool -keystore cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias gen -file /myCA.cer
RUN \
    cd $JAVA_HOME/jre/lib/security \
    && keytool -keystore cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias pt2 -file /myPt2.cer
CMD ["java", "-Xmx512m", "-XX:+IdleTuningGcOnIdle", "-Xtune:virtualized", "-Xscmx128m", "-Xscmaxaot100m", "-Xshareclasses:cacheDir=/opt/shareclasses", "-jar", "/app.jar"]

再根据项目的实际情况进行修改即可

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水中加点糖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值