https的粗略流程:
1、非对称加密。
非对称加密是https的基础,区别于对称加密,对称加密需要两端同时持有一个密钥,适用于一个产品自己的客户端和服务端的交互。
而在一个任意的浏览器客户端,想要访问服务器端,这个时候浏览器端是不会预先持有服务端密钥的,也就无法使用对称加密的方式来传输信息。
非对称加密则是一个公钥加密的内容,可以用一个对应的私钥来解密。
这样我们对于任意一个客户端,服务器端会下发给出一个公钥,客户端使用公钥将数据加密,服务端能够使用另外一个私钥解密数据。这样没有私钥的情况下,拦截内容了也拿不到真实数据。
缺点是性能消耗非常大,如果所有的请求内容都用非对称加密来进行,则无法满足性能要求。
2、握手。
需要进行握手是因为非对称加密消耗非常大,如果对整个请求内容都进行非对称加密,性能要求会超出我们的预想。所以,我们用非对称加密来传输一个密钥,最后客户端和服务端再用这个密钥对后续的传输内容进行对称加密解密。
3、证书。
如果客户端的请求被一台伪装服务器拦截了,这个时候握手的过程中,伪装服务器可以下发一个伪装公钥,客户端用该伪装公钥加密数据,那么伪装服务器就可以通过自己的伪装私钥来解密,从而拿到客户端发送的真实数据。
所以需要解决的是,怎么保证这个公钥一定是来自我们想要访问的网站。
这就有了证书的概念:
证书机构将公钥还有域名、签发机构、有效期、签名等等信息一起制作成一个证书,签名是用证书机构的私钥将各种信息加密制作而成。而操作系统,会内置各大证书机构的根证书,其中包含了证书机构的公钥。用该公钥解开证书的签名获得了证书的各项信息,如果签名解开的各项信息和证书自带的各项信息的完全一致(比如他们的hash都一致)。那么说明该证书是一个合法证书。
而中途拦截者想要破解,那么除非他们能申请一个真的证书,或者能够拥有证书机构的私钥。而证书的发放都是非常严格的,除非能证明对域名的拥有权,否则是申请不到证书的。而证书机构的私钥更是不可能被其他人拿到的。