基本概念
- HTTP:超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议[1]。HTTP是万维网的数据通信的基础。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。通过HTTP或者HTTPS协议请求的资源由统一资源标识符(Uniform Resource Identifiers,URI)来标识。
- 超文本传输安全协议(英语:Hypertext Transfer Protocol Secure,缩写:HTTPS,常称为HTTP over TLS,HTTP over SSL或HTTP Secure)是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。这个协议由网景公司(Netscape)在1994年首次提出,随后扩展到互联网上。历史上,HTTPS连接经常用于万维网上的交易支付和企业信息系统中敏感信息的传输,现在HTTPS开始广泛使用于保护所有类型网站上的网页真实性,保护账户和保持用户通信,身份和网络浏览的私密性。
HTTP 工作流程
- 地址解析,从url中解析协议名称,主机名,端口号和对应的页面地址。
- 封装http的请求数据包:这一步主要是封装自己的信息,比如在post请求时,我们会塞进一个data数据。
- 封装tcp包,建立连接:因为是基于tcp的协议,网络连接是tcp来完成的,必然要封装成tcp包,然后tcp再做自己工作,比如封装ip包,一层层往下传。
- 发送请求:数据整好了,连接也完事了,那就发送action了。
- 服务端响应:接受到请求,然后给出响应。
- 服务端关闭tcp的连接:一次通信完成之后,若conection的设置不是keep-live的话,服务端会自动关闭tcp的连接。
HTTP 的不足
- http协议的所有传输内容都是明文,即便是自己加密了,但是加密的内容也依旧是明文,这就避免不了被窃听!
- http协议传输的过程中没有身份验证这一说,这样就不免半路杀出一个不明身份就行身份冒充!
- http协议传输的过程中也并没有进行数据完整性的校验,不免有些人在中途进行内容篡改!
HTTPS 原理
针对 HTTP 以上的几个问题,HTTPS 应运而生,在 HTTPS 中增加了两种技术:加密技术和身份验证。
加密技术
加密技术主要用到以DES为代表的对称加密算法和以RSA为代表的非对称加密算法。
对称加密算法一般很难破解,但是不太好保管,安全性也不是很高,为啥呢?因为客户端和服务端拿到的密钥是一样的,不可能每次都把key给改了,而不改的话,一直用同一个key的话也会存在安全隐患。
因此https的加密的方式采取的是混合方式。交换密钥的时候采取非对称的,建立通信交换报文的时候采取对称加密的方法。
身份验证技术
所谓身份验证就是用公钥生成可信赖的证书。因为非对称加密存在一个问题就是没法验证拿到的公钥就是服务端公开的公钥。
为了解决以上问题,CA应用而生(Certifity Authority),数字证书认证机构。在网上找到一张图,一看就明白了
HTTPS 工作流程
- client 发出请求
- server 收到请求,并自己生成一对密钥,即 公钥S 和 私钥S
- server 把生成的 公钥S 传递给 client (除了 公钥S ,还有很多额外信息)
- client 收到 公钥S 后进行判断,若无效,弹出警告,否则生成一串随机数,我们称之为 私钥C ,然后 client 用 server 传过来的 公钥S 对该随机数加密,形成加密后的私钥C
- client 把加密的私钥C 传递给 server
- server 收到加密的私钥C,用 私钥S 把加密的私钥C 解密成 私钥C,然后把需要传递的数据用 私钥C 进行加密
- server 把加密后的数据传递给 client
- client 收到加密的数据,用 私钥C 解密,完成一次通信过程
上面的流程涉及到了对称加密和非对称加密相关的知识
- 对称加密是指加密和解密用一致的密钥,特点是快。典型的对称加密算法有DES、AES等
- 非对称加密是指密钥区分公钥和私钥,公钥加密,私钥解密(私钥好比唯一一把钥匙,公钥好比锁,钥匙只有一把,但锁可以有很多,被锁头锁上的数据全天下只有一把私钥才能打开),特点是安全,但是慢。典型的非对称加密算法有RSA、DSA等
HTTPS 的流程综合了对称加密和非对称加密的优点,利用非对称加密的安全性来加密那一串随机数–私钥C,利用对称加密的快捷性来加密报文,总体来说就是把真正加密解密的密钥(私钥C)用公钥S和私钥S来加密,这就是 HTTPS 的工作流程,
HTTPS 的优缺点
优点
- 使用HTTPS 协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;
- HTTPS 协议是由 SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比 http 协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。
- HTTPS 是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。
缺点
- HTTPS 比HTTP耗费更多服务器资源(https其实就是建构在SSL/TLS之上的 http协议,所以要比较https比http多用多少服务器资源,主要看SSL/TLS本身消耗多少服务器资源。)
- 耗费的资源多,过程也复杂,想当然访问不如HTTP高效。大流量网站非必要也不会采用,流量成本太高。
- HTTPS 并不能防止站点被网络蜘蛛抓取。在某些情形中,被加密资源的URL可仅通过截获请求和响应的大小推得,这就可使攻击者同时知道明文(公开的静态内容)和密文(被加密过的明文),从而使选择密文攻击成为可能。
- SSL 证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用。
- SSL 证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗。
HTTP和HTTPS的差异
- 从上面概念也可以看出来HTTP是不安全的,且攻击者通过监听和中间人攻击等手段,可以获取网站帐户和敏感信息等。HTTPS被设计为可防止前述攻击,并在正确配置时被认为是安全的。
- HTTP的URL由“http://”起始且默认使用端口80,而HTTPS的URL由“https://”起始且默认使用端口443。
- HTTP协议运行在TCP之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。HTTPS是运行在SSL/TLS之上的HTTP协议,SSL/TLS运行在TCP之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。
总结
以上就是我整理的 HTTP 和 HTTPS 的相关知识。另外提一下,就在不久前,Google 已经宣布 Chrome 很快将不再支持 HTTP 的网站,所以如果自家的网站还不是 HTTPS 的话,赶紧行动吧,时间不多了。
参考资料:
https://juejin.im/post/5a030e326fb9a0450a66c8ea
https://www.jianshu.com/p/b5db358a0444
https://www.jianshu.com/p/a68ca86183d7