HTTPS双向认证不仅要求服务器向客户端证明其身份,还要求客户端向服务器证明其身份。在这种认证方式中,服务器和客户端都需要提供证书。服务器会验证客户端的证书,确认其身份,同时客户端也会验证服务器的证书。这种认证方式通常用于需要高安全性的场景,如银行和其他金融服务。
- 客户端发起建立HTTPS连接请求,将SSL协议版本的信息发送给服务端。
- 服务器端将本机的公钥证书(server.crt)发送给客户端。
- 客户端读取公钥证书(server.crt),取出了服务端公钥。
- 客户端将客户端公钥证书(client.crt)发送给服务器端。
- 服务器端使用根证书(root.crt)解密客户端公钥证书,拿到客户端公钥。
- 客户端发送自己支持的加密方案给服务器端。
- 服务器端根据自己和客户端的能力,选择一个双方都能接受的加密方案,使用客户端的公钥加密后发送给客户端。
- 客户端使用自己的私钥解密加密方案,生成一个随机数R,使用服务器公钥加密后传给服务器端。
- 服务端用自己的私钥去解密这个密文,得到了密钥R。
- 服务端和客户端在后续通讯过程中就使用这个密钥R进行通信了。
客户端发送请求到服务器。
服务器发送自己的SSL证书给客户端。
客户端验证服务器的证书。
客户端发送自己的证书给服务器。
服务器验证客户端的证书。
双方协商加密算法和生成对称密钥进行通信