Https在真正请求数据前,先会与服务有几次握手验证,以证明相互的身份,以下图为例
1、客户端发起一个https的请求,把自身支持的一系列密钥算法套件发送给服务端
2、服务端,接收到客户端所有的密钥算法套件后与自身支持的对比,会从中选出一种加密算法,以证书的形式返回给客户端 证书中还包含了 公钥 颁证机构 网址 失效日期等等
3、客户端收到服务端响应后,验证颁发证书的机构是否合法与是否过期,证书中包含的网站地址是否与正在访问的地址一致等
系统中保留了所有受信任的根证书,浏览器可以查看信任的根证书,自然可以验证web服务器的证书,是不是由这些受信任根证书颁发的或者受信任根证书的二级证书机构颁发的
在验证证书的时候,浏览器会调用系统的证书管理器接口对证书路径中的所有证书一级一级的进行验证,只有路径中所有的证书都是受信的,整个验证的结果才是受信
对于自作的证书,比如企业安装包,需要对证书进行信任,这时候也就安装了非ca的根证书,那么以后的https请求的证书也就会被客户端所信任
4、客户端生成一串随机数,然后用证书中的公钥加密发送给服务端
5、服务端拿到客户端传来的密文,用自己的私钥来解密,从而确认新生成的随机数为对称加密密钥
原文:https://www.cnblogs.com/diyigechengxu/p/12639809.html