对比HTTP的明文传输,HTTPS采用加密。那么,为什么要加密?
防止信息泄露,加密的数据被截取后,是无法直接阅读的。
对称加密算法
加密和解密都使用同一个密钥。网站向客户端传递秘钥,之后,二者之间通讯使用密钥加密、解密。
对称加密算法的漏洞
客户端向网站索要密钥时,这个密钥可能被别人获得,从而解密出交互的信息。
非对称加密算法
有一组钥匙,公钥和私钥。公钥可以解开私钥的加密,私钥可以解开公钥的加密,算法耗时很长。网站向客户端传递公钥,之后,网站向客户端发送的数据使用私钥加密;客户端使用公钥解密,客户端发送数据使用公钥解密,网站使用私钥解密。
非对称加密算法+对称加密算法
非对称加密很耗时,所以往往采用非对称加密+对称加密来传输数据。
网站向客户端传递自己的公钥,客户端随机生成一个密钥,并使用公钥加密,传给网站,网站使用私钥解密,得到密钥,之后双方使用密钥进行对称加密。
非对称加密算法的漏洞
浏览器向网站索要公钥时,可能被截取,换成第三方的公钥,即客户端并不确定提供公钥的网站是否是自己请求的网站。
CA机构颁发证书
营业执照是企业的标志,想要核对信息,去工商局查一下就能得到结果。
CA机构可以为网站申请数字证书,可以比作营业执照,上面有证书持有者信息,公钥信息,hash算法等。
网站向CA机构申请证书时,CA机构会为其分配一组公钥和私钥。客户端首次请求网站时,网站传递证书,客户端可以根据证书判断是否是目标网站的证书。
当然光有证书还不行,我们需要证书的签名,来确定证书没有被串改。将证书内容hash后,使用网站的私钥进行加密,生成签名。
客户端使用证书中的公钥,解密签名,然后使用证书中的hash算法计算证书内容,如果和解密后的签名一致,证明数据没有被篡改。