HTTPS的交互流程、数字证书、数字签名

网上看了很多HTTPS的文章,在一些细节方面并没有统一,这一块做java的不管是客户端还是服务端都需要有一定的了解

1.涉及到密码学,对称加密和非对称加密都需要使用,对称加密没啥要说的,最终明文会通过对称加密来发送。

非对称加密有个坑,网上很多人说什么给数据加密的叫私钥,解密的叫公钥,也有反过来说,加密的是公钥,解密的是私钥。

从密码学角度来说,公钥私钥都可以用于加密和解密,只是看具体应用场景而已。私钥加密需要公钥解密,公钥加密需要私钥解密。

2.所有外层都是为了防篡改,最内层才包含防泄露,从这个目的出发,网上很多人视图用各种例子阐述黑客的篡改过程,说真的很生动有趣。

简要文字交互过程如下:

客户端->服务端,发起请求,随机数等

----服务端向客户端发送证书

客户端<-服务端,数字证书(CA颁发,包含CA私钥加密过的服务端公钥,服务端加密算法,DNS域名,数字签名等)

#客户端拿到服务端数字证书

通过内置CA公钥进行数字证书验证(包含CA公钥解密、验证数字签名、验证域名、验证有效期等,若出现不可置信等证书时可对用户作出警告是否继续连接),若验证通过

----约定算法

客户端->服务端,发送可用算法(双向认证时,客户端还将发送客户端数字证书,包含客户端公钥等)

(双向认证时服务端同样校验客户端证书有效性,若校验通过)

客户端<-服务端,加密算法(双向认证时,此算法使用客户端公钥加密)

#客户端拿到加密算法(双向认证时,使用客户端私钥解密获得加密算法)

----生成对称密钥,并完成传输

客户端通过第一步随机数生成随机对称密钥,使用服务端公钥加密对称密钥

客户端->服务端,将加密后的对称密钥给到服务端

客户端<-服务端,服务端先用服务端私钥解开得到对称密钥,用对称密钥加密需要发送对内容后,发给客户端

3.数字证书是CA颁发,代表权威,其以链(树)式存在。

客户端浏览器或操作系统如果被黑,可能导致本地对CA公钥被篡改,这时无解。

数字签名实质是对数字证书内容(服务端公钥、服务端加密算法、域名等)的MD5,防止数字证书被私下篡改

 

posted @ 2019-11-20 16:46  水漾之舞  阅读(664)  评论(0)    收藏  举报