什么是Http?
超文本传输协议(HTTP)是一个用于传输超媒体文档(例如 HTML)的应用层协议。它是为 Web 浏览器与 Web 服务器之间的通信而设计的,但也可以用于其他目的。HTTP 遵循经典的客户端-服务端模型,客户端打开一个连接以发出请求,然后等待它收到服务器端响应。HTTP 是无状态协议,这意味着服务器不会在两个请求之间保留任何数据(状态)。该协议虽然通常基于 TCP/IP 层,但可以在任何可靠的传输层上使用。
Https解决了什么痛点?
最直白的答案就是HTTP它不安全。
- 由于
HTTP天生明文传输的特性,在HTTP的传输过程中,任何人都有可能从中截获、修改或者伪造请求发送。 - 在
HTTP的传输过程中不会验证通信方的身份,因此HTTP信息交换的双方可能会遭到伪装,也就是没有用户验证。 - 在
HTTP的传输过程中,接收方和发送方并不会验证报文的完整性, 因此,由于HTTP的不安全性,HTTPS应运而生。
什么是Https?
HTTPS 的全称是 Hypertext Transfer Protocol Secure, HTTPS 是 HTTP 协议的一种扩展,是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。使用传输层安全性(TLS)或安全套接字层(SSL)对通信协议进行加密。也就是 HTTP + SSL(TLS) = HTTPS。
什么是SSL/TLS
TLS(Transport Layer Security) 是 SSL(Secure Socket Layer) 的后续版本,它们是用于在互联网两台计算机之间用于身份验证和加密的一种协议。SSL/TLS协议的基本思路是采用公钥加密法,也就是说,客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。
衍生出的问题
- 如何保证公钥不被篡改?
- 将公钥放在数字证书中。只要证书是可信的,公钥就是可信的。
- 公钥加密计算量太大,如何减少耗用的时间?
- 每一次对话(session),客户端和服务器端都生成一个"对话密钥"(session key),用它来加密信息。由于"对话密钥"是对称加密,所以运算速度非常快,而服务器公钥只用于加密"对话密钥"本身,这样就减少了加密运算的消耗时间。
SSL的运行思路
- 客户端向服务器端索要并验证公钥。
- 双方协商生成"对话密钥"。
- 双方采用"对话密钥"进行加密通信。
Https可以做什么?
- 加密(Encryption), HTTPS 通过对数据加密来使其免受窃听者对数据的监听,这就意味着当用户在浏览网站时,没有人能够监听他和网站之间的信息交换,或者跟踪用户的活动,访问记录等,从而窃取用户信息。
- 保证数据一致性(Data integrity),数据在传输的过程中不会被窃听者所修改,用户发送的数据会完整的传输到服务端,保证用户发的是什么,服务器接收的就是什么。
- 身份认证(Authentication),是指确认对方的真实身份,也就是证明你是你,它可以防止中间人攻击并建立用户信任。
Http和Https的区别
HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
主要区别:
- http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
- https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
- http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议。
HTTPS的工作原理
-
服务端配置好SSL证书 采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面。这套证书其实就是一对公钥和私钥,如果对公钥和私钥不太理解,可以想象成一把钥匙和一个锁头,只是全世界只有你一个人有这把钥匙,你可以把锁头给别人,别人可以用这个锁把重要的东西锁起来,然后发给你,因为只有你一个人有这把钥匙,所以只有你才能看到被这把锁锁起来的东西。
-
客户端发起HTTPS请求 用户在浏览器里输入一个https网址,然后发送请求到server的443端口。
(向服务器传递第一个随机数) -
服务端返回证书 公钥包含了很多信息,如证书的颁发机构,过期时间等等。
(向客户端传递第二个随机数) -
客户端解析证书 客户端的TLS首先会验证证书是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,就从证书中取出
公钥并产生一个随机值,然后用证书(公钥)对该随机值进行加密。 -
传送加密信息 客户端传送的是用证书(公钥)加密后的随机值,目的就是让服务端得到这个随机值。
(向服务器传递第三个随机数) -
服务端解密信息 服务端用证书内公钥对应的私钥解密后,得到了客户端传过来的随机值,然后通过三个随机值生成一个对称密钥,然后把内容通过密钥进行对称加密,所谓对称加密就是,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个对话密钥,所以只要加密算法够彪悍,对话密钥够复杂,数据就够安全。
-
传输加密后的信息 这部分信息是服务段用对话密钥加密后的信息,可以在客户端被还原。
-
客户端解密信息 客户端用之前生成的对话密钥解密服务端传过来的信息,获取了解密后的内容,整个过程第三方即使监听到了数据,也束手无策。
HTTPS的优点
正是由于HTTPS非常的安全,攻击者无法从中找到下手的地方,从站长的角度来说,HTTPS的优点有以下2点:
- SEO方面
- 搜索引擎已经全面支持HTTPS抓取、收录,并且会优先展示HTTPS结果;
- 安全性
- HTTPS绿锁表示可以提升用户对网站信任程度
- 使用HTTPS协议可认证用户和服务器,可以有效防止山寨、镜像网站,确保数据发送到正确的客户机和服务器;
- HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。
- HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。
HTTPS的缺点
虽然说HTTPS有很大的优势,但其相对来说,还是有些不足之处的,具体来说,有以下2点:
- 繁重的计算和多次交互天然的影响了访问速度
- HTTPS涉及到的安全算法会消耗 CPU 资源,需要增加服务器资源(https访问过程需要加解密),HTTPS连接服务器端资源占用高很多,支持访客稍多的网站需要投入更大的成本,如果全部采用HTTPS,基于大部分计算资源闲置的假设的VPS的平均成本会上去。