Http缺点
- 直接明文传输,容易被窃听
- 不校验身份,容易被伪装
- 内容可能不完整,容易被篡改
HTTPS简介
HTTPS协议= HTTP协议+SSL/TSL协议
在https传输过程中,需要用ssl/tls对数据加密和解密,可以看出,https只是在 http通信接口部分使用了 SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议来实现。
请求默认443端口。首先了解下什么是对称加密和非对称解密。
所谓对称,就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密。对称加密算法的缺点是在数据传送前,发送方和接收方必须商定好秘钥,然后使双方都能保存好秘钥。对称加密
对称加密算法在加密和解密时使用的是同一个秘钥;而非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。非对称加密
HTTPS在传输过程中会涉及到三个密钥:
- 服务端的公钥和私钥,来进行非对称加密
- 客户端生成随机密钥,用来进行对称加密
证书是怎么来的?
我们可以看到,客户端希望拿到服务端的公钥,来给自己的私钥加密,并传输给服务端,那么首先需要拿到网站的证书,证书是由网站的管理员需要向CA机构进行申请,将自己的网站(服务器)的公钥提交给CA机构。CA机构则会使用我们提交的公钥,再加上一系列其他的信息,如网站域名、有效时长等,来制作证书。那么证书有了之后,怎么安全到达客户端的呢?CA证书也是通过非对称加密传输的,即CA机构通过机构的私钥加密后,在客户端收到证书后,再通过机构的公钥进行解密数据,为了最终拿到我们服务器的公钥。
客户端获取证书如何解析?
这部分工作由客户端的TLS来完成,首先是验证证书是否有效,通过第三方权威机构的公钥,对数字签名进行解密,得到真正的签名,根据签名规则对网站的信息进行签名生成,之后签名对比,如果成功,则说明拿到的服务器的公钥是正确的。之后客户端生成随机秘钥,使用服务器的公钥对客户端生成的秘钥加密,加密后发送给服务端,服务端通过私钥解密,拿到客户端发来的对称密钥,加密密文进行传输。那么,如果CA机构的证书被劫持篡改,客户端不能收到正确的证书,是不是会很危险? 一方面很多权威CA机构基本可以内置到浏览器中,直接在客户端可以查询遍历,另一方面,即便证书在传输过程中,被篡改成钓鱼网站,但是客户端再收到证书的校验过程,不仅仅是校验公钥,还有其他辅助信息,比喻域名等等,这样被篡改的证书是不能通过校验的。
总之,Https就是使用TLS/SSL协议进行加密传输,让客户端拿到服务器的公钥(获得证书是通过第三方),然后客户端随机生成一个对称的加密的秘钥,即客户端的私钥,传输给服务器,服务端通过私钥解密,获得客户端传来的私钥,后续通讯通过对称加密解密,完成整个HTTPS流程。
参考
https://www.wosign.com/news/httpsjiami_20180817.htm