https并不是应用层的一种新协议。
https协议是指:http协议+加密处理+身份认证+完整性保护(http协议+SSL协议/TLS协议)
通常,http协议会直接和TCP通信,而使用https,则变成了http先和SSL通信,再由SSL和TCP通信。一般,将SSL统称SSL+TLS。
网络环境是错综复杂的,你的信息要经过许多层才能到达目的地,比如光缆,各级路由,代理服务器等,任何一个步骤被劫持都会导致你的信息内容暴露。
你总不想把你的隐私内容数据暴露在公众眼中吧。
由于http不会验证对方身份,攻击者可以伪造你的身份与服务端通信。造成用户的损失。
除此之外,攻击者也可以根据此特性,不断对服务器发起请求占用服务器资源,造成 DOS 攻击。(Denial of Service,拒绝服务攻击)
由于http无法验证报文的完整性,可能导致我们的数据被篡改。(中间人攻击)
流行的加密方式:
共享密钥:服务端将公钥传给客户端,客户端使用该公钥加密,服务端使用该公钥解密。
公开密钥:将公钥传给客户端,客户端接收到公钥,使用该公钥对数据加密,服务端使用私钥解密。
公开密钥的公钥谁都能获取,但由公钥加密的内容,只有服务端的私钥可以解密。
遗憾的是无论共享密钥还是公开密钥,都存在相应的问题。
共享密钥 存在怎么把密钥安全发送给对方的窘境。因为http协议是明文传输的,密钥由服务端发送给客户端的时候,存在密钥暴露的风险,无法判断从而导致加密失去意义。
公开密钥 无法判断公开的公钥本身是否是货真价实公钥。因为公钥在传输过程中有可能会被篡改。
https使用混合加密方式,因为共享密钥比公开密钥效率要快。在保证公钥能安全到达对方的时候,使用共享密钥,否则使用公开密钥。
PreMasterSecret
(包含RSA加密算法,DH密钥交换算法等) 的随机密码串。PreMasterSecret
密钥加密。PreMasterSecret
密钥加密的内容。接下来,通信的内容将会收到SSL的保护。
我们统称的SSL包含SSL协议与TLS协议。
SSL最初由网景通信公司倡导,开发了SSL3.0之前的版本,之后主导权交给IETF的手中。
后来,IETF在SSL3.0版本的基础上制定了TLS协议。所以我们通常统一称之为SSL。
注意:这里的加密指的是将报文主体(内容)加密,报文首部(通用首部,自定义首部,请求行等)并不会加密。
通过验证对方证书来判断对方身份。
证书是由值得信赖的第三方机构颁发。
因此要产生一定额外的费用交给颁发证书的第三方机构。
通过加密及身份验证。
首先,我们需要向第三方CA机构申请一张证书。
此外,浏览器或操作系统会内置一些可靠的第三方机构的公钥。
CA机构使用自己的私钥(不公开)对证书数据进行加密,生成签名:abcdefg
浏览器使用内置的公钥解密证书的签名,如果解密出来的信息与证书信息明文相同,则证明证书没有被篡改。
需要注意的是,CA机构生成的证书签名,是根据机构自己私钥生成的,在没有使用正确的私钥生成的签名,就会出现浏览器公钥解密签名解析出来的明文与实际明文不同的问题,然后浏览器就可以提醒用户。
可以看出,浏览器厂商的角色也很重要,前提也需要你信任浏览器厂商。
SSL 虽然能保证通信的安全,但对服务器的内存和流量的消耗都会增大。
对于非敏感的信息,我们可以依旧使用 http 协议。
涉及个人信息等隐私以及重要数据的时候可以选择 https。
SSL 不仅可以用于http协议,其他应用层像 SMTP 和 Telnet 等协议均可配合 SSL协议使用。