龙空技术网

Java应用无侵入添加私有自签Https信任证书的方法

清风明月eagle 80

前言:

当前兄弟们对“java相关证书”大体比较关注,咱们都想要了解一些“java相关证书”的相关文章。那么小编也在网摘上网罗了一些有关“java相关证书””的相关内容,希望朋友们能喜欢,咱们一起来学习一下吧!

时光闹钟app开发者,请关注我,后续分享更精彩!

坚持原创,共同进步!

背景

实际项目中为保证数据传输的安全性和项目要求,有时会用到https自签私有证书:

公有证书收费,涉及域名申请和备案一堆麻烦的事情,不想花钱和注册公有域名应用部署环境不能连外网,如政务专网,公司内网临时测试域名等,无法进行公网域名的CA验证

基于以上场景,使用自签的https私有证书是一个很好的选择。

自签证书

自签证书有域名和ip两种方式。使用哪种,请根据具体项目要求灵活选择。私有证书的自签本文不做赘述,网上有很多资料,请自行检索。

自签私有证书有个不好之处,浏览器访问一个自签证书加密的站点,会出现一个警告的小图标,有些浏览器会有不安全的提示。如下图的这个测试站点地址,有些首次访问,需要添加网站信任后,才能跳转到网站页面访问。

以上是浏览器访问的场景,同理,如果应用程序接口访问带自签的https服务也会报错,必须先把自签证书添加信任后,才能正常访问私有的https服务接口。网上有很多应用程序组件集成方面的介绍,如httpclient添加https访问,很麻烦,对业务代码侵入性高。经过不断实践,本文将向大家介绍一种应用启动,通过参数注入方式,实现无代码侵入的证书信任添加。

应用集成

整个过程分两步。提前准备好需要添加的信任证书。这里假设私有证书为test.crt。

1.转换自签证书为java识别的证书格式

在装有java运行环境的机器上,用命令行执行以下指令,生成java程序支持的信任证书格式

# 将证书导入为java keystore信任证书# 命令行执行以下指令,根据提示操作,设置相应密码# 参数说明: -file https证书文件路径,-alias 信任证书别名,-keystore 信任证书文件名keytool -import -file D:\\test.crt -alias test -keystore myTrustStore

上面指令执行成功后,在执行目录会生成一个myTrustStore信任证书文件,保存好,后面有用。

2.java应用启动时,动态注入证书

java应用启动时,通过-D参数动态注入myTrustStore证书

# -Djavax.net.ssl.trustStore 添加信任证书# -Djavax.net.ssl.trustStorePassword 信任证书的密码(生成keystore输入的密码),可以不要java -Djavax.net.ssl.trustStore=D:\\rootTrustStore -Djavax.net.ssl.trustStorePassword=123456 -jar xxx.jar

应用启动成功,测试https自签的服务接口,一切如丝般顺滑。应用程序内部的接口访问方式不做任何修改,还是同样的配方,熟悉的味道,真好!

总结

本文介绍了自签私有证书在java应用程序中的集成方式,包含私有证书的应用场景。对私有证书,如何在不侵入业务代码的情况下,通过jvm添加私有证书信任,以实现现有程序的无感知平滑https证书安全性提升。

最后,行文匆忙,存在不完善之处,若有疑问,欢迎留言讨论。希望本文对大家有所帮助和启发。

标签: #java相关证书