一、HTTP 协议
1、HTTP 协议介绍
HTTP 协议,全称超文本传输协议(Hypertext Transfer Protocol)。
- HTTP 协议就是用来规范超文本的传输。超文本,也就是网络上的包括文本在内的各式各样的消息。具体来说,主要是来规范浏览器和服务器端的行为的。
- HTTP 是一个无状态(stateless)协议,也就是说服务器不维护任何有关客户端过去所发请求的消息。
- 有状态协议会更加复杂,需要维护状态(历史信息),而且如果客户或服务器失效,会产生状态的不一致,解决这种不一致的代价更高。
2、HTTP 协议通信过程
HTTP 是应用层协议,它以 TCP(传输层)作为底层协议,默认端口为 80. 通信过程主要如下:
- 服务器在 80 端口等待客户的请求。
- 浏览器发起到服务器的 TCP 连接(创建套接字 Socket)。
- 服务器接收来自浏览器的 TCP 连接。
- 浏览器(HTTP 客户端)与 Web 服务器(HTTP 服务器)交换 HTTP 消息。
- 关闭 TCP 连接。
3、HTTP 协议优点
扩展性强、速度快、跨平台支持性好。
二、HTTPS 协议
1、HTTPS 协议介绍
- HTTPS 协议(Hyper Text Transfer Protocol Secure),是 HTTP 的加强安全版本。
- HTTPS 是基于 HTTP 的,也是用 TCP 作为底层协议,并额外使用 SSL/TLS 协议用作加密和安全认证。
- 默认端口号是 443.
2、HTTPS 协议优点
保密性好、信任度高。
三、HTTPS 的核心—SSL/TLS协议
HTTPS 之所以能达到较高的安全性要求,就是结合了 SSL/TLS 和 TCP 协议,对通信数据进行加密,解决了 HTTP 数据透明的问题。
1、SSL 和 TLS 的区别?
SSL 和 TLS 没有太大的区别。
- SSL 指安全套接字协议(Secure Sockets Layer),首次发布与 1996 年。
- 很快,在 1999 年,SSL 3.0 进一步升级,新版本被命名为 TLS 1.0。
- TLS 是基于 SSL 之上的,但由于习惯叫法,通常把 HTTPS 中的核心加密协议混成为 SSL/TLS。
2、SSL/TLS 的工作原理
非对称加密
SSL/TLS 的核心要素是非对称加密。非对称加密采用两个密钥——一个公钥,一个私钥。在通信时,私钥仅由解密者保存,公钥由任何一个想与解密者通信的发送者(加密者)所知。
公钥只能加锁,并不能解锁。解锁只能由邮箱的所有者——因为只有他保存着私钥。这样,通信信息就不会被其他人截获了,这依赖于私钥的保密性。
非对称加密的公钥和私钥需要采用一种复杂的数学机制生成(密码学认为,为了较高的安全性,尽量不要自己创造加密方案)。公私钥对的生成算法依赖于单向陷门函数。
单向函数:已知单向函数 f,给定任意一个输入 x,易计算输出 y=f(x);而给定一个输出 y,假设存在 f(x)=y,很难根据 f 来计算出 x。
单向陷门函数:一个较弱的单向函数。已知单向陷门函数 f,陷门 h,给定任意一个输入 x,易计算出输出 y=f(x;h);而给定一个输出 y,假设存在 f(x;h)=y,很难根据 f 来计算出 x,但可以根据 f 和 h 来推导出 x。
函数 f 的计算方法相当于公钥,陷门 h 相当于私钥。公钥 f 是公开的,任何人对已有输入,都可以用 f 加密,而要想根据加密信息还原出原信息,必须要有私钥才行。
对称加密
使用 SSL/TLS 进行通信的双方需要使用非对称加密方案来通信,但是非对称加密设计了较为复杂的数学算法,在实际通信过程中,计算的代价较高,效率太低,因此,SSL/TLS 实际对消息的加密使用的是对称加密。
对称加密:通信双方共享唯一密钥 k,加解密算法已知,加密方利用密钥 k 加密,解密方利用密钥 k 解密,保密性依赖于密钥 k 的保密性。
对称加密的密钥生成代价比公私钥对的生成代价低得多,为什么 SSL/TLS 还需要使用非对称加密呢?
因为对称加密的保密性完全依赖于密钥的保密性。在双方通信之前,需要商量一个用于对称加密的密钥。我们知道网络通信的信道是不安全的,传输报文对任何人是可见的,密钥的交换肯定不能直接在网络信道中传输。
因此,使用非对称加密,对对称加密的密钥进行加密,保护该密钥不在网络信道中被窃听。这样,通信双方只需要一次非对称加密,交换对称加密的密钥,在之后的信息通信中,使用绝对安全的密钥,对信息进行对称加密,即可保证传输消息的保密性。
公钥传输的信赖性
客户端 C 和服务器 S 想要使用 SSL/TLS 通信,S 公钥在网络信道中传输。要注意网络信道通信中有几个前提:
- 任何人都可以捕获通信包
- 通信包的保密性由发送者设计
- 保密算法设计方案默认为公开,而(解密)密钥默认是安全的
因此,假设 S 公钥不做加密,在信道中传输,那么很有可能存在一个攻击者 A,发送给 C 一个诈包,假装是 S 公钥,其实是诱饵服务器 AS 的公钥。当 C 收获了 AS 的公钥(却以为是 S 的公钥),C 后续就会使用 AS 公钥对数据进行加密,并在公开信道传输,那么 A 将捕获这些加密包,用 AS 的私钥解密,就截获了 C 本要给 S 发送的内容,而 C 和 S 二人全然不知。
同样的,S 公钥即使做加密,也难以避免这种信任性问题,C 被 AS 拐跑了!
为了公钥传输的信赖性问题,第三方机构应运而生——证书颁发机构(CA,Certificate Authority)。CA 默认是受信任的第三方。CA 会给各个服务器颁发证书,证书存储在服务器上,并附有 CA 的电子签名(见下节)。
当客户端(浏览器)向服务器发送 HTTPS 请求时,一定要先获取目标服务器的证书,并根据证书上的信息,检验证书的合法性。
数字签名
数字签名,是 CA 在给服务器颁发证书时,使用散列+加密的组合技术,在证书上盖个章,以此来提供验伪的功能。具体行为如下:
- CA 知道服务器的公钥,对该公钥采用散列技术生成一个摘要。CA 使用 CA 私钥对该摘要进行加密,并附在证书下方,发送给服务器。
- 现在服务器将该证书发送给客户端,客户端找到第三方机构 CA,获知 CA 的公钥,并用 CA 公钥对证书的签名进行解密,获得了 CA 生成的摘要。
- 客户端对证书数据(也就是服务器的公钥)做相同的散列处理,得到摘要,并将该摘要与之前从签名中解码出的摘要做对比,如果相同,则身份验证成功;否则验证失败。
总结来说,带有证书的公钥传输机制如下:
- 设有服务器 S,客户端 C,和第三方信赖机构 CA。
- S 信任 CA,CA 是知道 S 公钥的,CA 向 S 颁发证书。并附上 CA 私钥对消息摘要的加密签名。
- S 获得 CA 颁发的证书,将该证书传递给 C。
- C 获得 S 的证书,信任 CA 并知晓 CA 公钥,使用 CA 公钥对 S 证书山的签名解密,同时对消息进行散列处理,得到摘要。比较摘要,验证 S 证书的真实性。
- 如果 C 验证 S 证书是真实的,则信任 S 的公钥(在 S 证书中)。
四、总结
- 端口号 :HTTP 默认是 80,HTTPS 默认是 443。
- URL 前缀 :HTTP 的 URL 前缀是 http://,HTTPS 的 URL 前缀是 https://。
- 安全性和资源消耗 :
- HTTP 协议运行在 TCP 之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。
- HTTPS 是运行在 SSL/TLS 之上的 HTTP 协议,SSL/TLS 运行在 TCP 之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。所以说,HTTP 安全性没有 HTTPS 高,但是 HTTPS 比 HTTP 耗费更多服务器资源。