【无标题】Java 基于文件双向认证的 HTTPS 请求,支持 CICD

本文介绍了Java基于文件的HTTPS双向认证原理,包括单向和双向认证流程,并详细讲解了cert、key和pem文件的区别。在实际应用中,通过Java代码展示了如何在Jar外部和内部实现HTTPS双向绑定请求,以及如何在CICD环境中通过命令行指定文件和在JVM中添加密钥。
摘要由CSDN通过智能技术生成

. 原理

双向验证即: 客户端与服务端在进行数据传输的时候双方都需要验证对方的身份。

在建立 Https 连接的工程中,握手的流程比单向认证多了几步。

  • 单向认证的过程

    客户端从服务器端下载服务器公钥证书进行验证,然后才建立安全通信通道

  • 双向认证的过程

    客户端出了需要从服务器端下葬服务器的公钥证书进行验证外,还需要把客户端的公钥证书上传到服务器给服务器端进行验证,等双方认证都认证通过之后,才会开始进行安全通信通道

1.1 单向认证流程

单向认证流程中,服务器端保存着公钥证书和私钥两个文件,整个握手过程如下:

  1. 客户端发青建立 HTTPS 连接请求,将 SSL 版本协议的信息发送给服务器端

  2. 服务器端将本机的公钥证书 ( server.crt ) 发送给客户端

  3. 客户端读取公钥证书 ( server.crt ) , 获取服务器端的公钥

  4. 客户端生成一个随机数(密钥R),用刚才得到的服务器公钥去加密这个随机数形成密文,发送给服务端;

  5. 服务端用自己的私钥(server.key)去解密这个密文,得到了密钥R

  6. 服务端和客户端在后续通讯过程中就使用这个密钥R进行通信了。

1.2 双向认证流程

  1. 客户端发起建立HTTPS连接请求,将SSL协议版本的信息发送给服务端;

  2. 服务器端将本机的公钥证书(server.crt)发送给客户端;

  3. 客户端读取公钥证书(server.crt),取出了服务端公钥;

  4. 客户端将客户端公钥证书(client.crt)发送给服务器端;

  5. 服务器端使用根证书(root.crt)解密客户端公钥证书,拿到客户端公钥;

  6. 客户端发送自己支持的加密方案给服务器端;

  7. 服务器端根据自己和客户端的能力,选择一个双方都能接受的加密方案,使用客户端的公钥加密后发送给客户端;

  8. 客户端使用自己的私钥解密加密方案,生成一个随机数R,使用服务器公钥加密后传给服务器端;

  9. 服务端用自己的私钥去解密这个密文,得到了密钥R

  10. 服务端和客户端在后续通讯过程中就使用这个密钥R进行通信了。

2. cert 、 key 和 pem 文件区别

推荐阅读:常见证书格式和转换_justinjing的专栏-CSDN博客

我们当前获取有3个文件,分别是

  • ca-server.cert.pem

    我们请求到的服务器给颁布的公钥

  • vendor.my.cert.pem

    我们本地发送客户端的公钥 ( 需要发送到服务器端)

  • vendor.my.key.pem

    我们本地客户端的密钥

我们可以转换为我们自己想要的格式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值