https其实是有两部分组成:http + SSL / TLS加密数据包,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据。
https比http要占用更多的资源,http使用TCP 三次握手建立连接,客户端和服务器需要交换3个包,https除了 TCP 的三个包,还要加上 ssl握手需要的9个包,所以一共是12个包。
SSL的全称是Secure Sockets Layer,即安全套接层协议,是为网络通信提供安全及数据完整性的一种安全协议。SSL最新的版本是3.0。TLS的全称是Transport Layer Security,即安全传输层协议,是建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本。
SSL/TLS = 非对称加密(如RSA、ECC) + 对称加密(如AES、DES) + 散列算法(如MD5)
1.对数据加密 2.验证网站服务器身份
流程解析
客户端发起HTTPS请求
用户在浏览器里输入一个https网址,然后连接到server的443端口。
服务端的配置
采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面(startssl就是个不错的选择,有1年的免费服务)。这套证书其实就是一对公钥和私钥。如果对公钥和私钥不太理解,可以想象成一把钥匙和一个锁头,只是全世界只有你一个人有这把钥匙,你可以把锁头给别人,别人可以用这个锁把重要的东西锁起来,然后发给你,因为只有你一个人有这把钥匙,所以只有你才能看到被这把锁锁起来的东西。
传送证书
这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等等。
传送加密信息
这部分工作是有客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随机值。然后用证书对该随机值进行加密。就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,不然看不到被锁住的内容。
服务端解密信息
服务端用私钥解密后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密。所谓对称加密就是,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全。
传输加密后的信息
这部分信息是服务段用私钥加密后的信息,可以在客户端被还原。
客户端解密信息
客户端用之前生成的私钥解密服务段传过来的信息,于是获取了解密后的内容。整个过程第三方即使监听到了数据,也束手无策。
GET / HEAD / OPTIONS方法
只从服务端获取资源 并不对服务器进行修改 因此相对安全。 对于客户端来说是不安全的 请求参数会显示在URL中。TRACE方法(两端安全) 用于诊断诊断服务器 仅记录路径信息 是安全的。
POST方法 会影响服务器端的资源。
说一下http和https
https的ssl加密是在传输层实现的。
http 超文本传输协议,是一个客户端和服务端请求应答的标准。用于从www服务器传输超文本到本地浏览器的传输协议。它可以使浏览器更加高效,使网络传输减少。
以安全为目标的http通道,简单讲就是http的安全版。即在http下加入ssl层,https的安全基础就是ssl,因此加密的详细内容就需要ssl。
为什么要用HTTPS?
因为HTTP在“裸奔”(明文传输,不安全)。
- 对数据进行加密,并建立一个信息安全通道,来保证传输过程中的数据安全
- 对网站服务器进行真实身份认证
http和https的区别?
http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议,需要CA证书。
链接方式不同,对应的默认端口也不同,http 80,http 443端口。
http无状态,https协议是由ssl+http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
https协议的工作原理(双向加密建立)
客户端和服务端都有公钥和私钥。
客户端使用https url访问服务器,则要求web服务器建立ssl链接
服务端发送公钥
客户端发送’验证串+服务端公钥’ && 客户端公钥
服务端使用私钥取得验证串与客户端公钥一起发送给客户端
客户端使用客户端私钥来获取验证串是否匹配
协议解析
多了一个 upgrade-insecure-requests 的字段。该字段让页面打开后的请求自动变为 https。
缺点
https握手阶段比较费时,会使页面加载时间延长,耗电增加
https缓存不如http高效,会增加数据的开销
ssl证书也需要花钱,功能越强大的证书费用越高
ssl证书需要绑定IP,不能再同一个ip上绑定多个域名,Ipv4资源支持不了这样的消耗