1. 基本概念
1.1 HTTP
HTTP(HyperText Transfer Protocol:超文本传输协议)是一种应用层协议。HTTP协议是Web工作的核心,常用于在 Web 浏览器和网站服务器之间传递信息,以 http:// 打头的网站都是标准 HTTP 服务。它建立在TCP协议之上,一般采用TCP的80端口。它是一个请求-响应协议,即客户端发出一个请求,服务器响应这个请求(发起请求的只能是客户端,服务器不能主动联系客户端)。
HTTP协议是无状态的,也就是说,同一个客户端的这次请求和上次请求没有对应关系,对HTTP服务器来说,它并不知道这两个请求是否来自同一个客户端。为了解决这个问题, Web程序引入了Cookie机制来维护连接的可持续状态。此外,HTTP 协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等支付信息。
1.2 HTTPS
HTTPS(HyperText Transfer Protocol Secure:超文本传输安全协议)在HTTP的基础上加入了SSL(安全套接层)协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。HTTPS 的主要目的是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。
补充:
SSL(Secure Socket Layer,安全套接字层):SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层:
- SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。
- SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
TLS(Transport Layer Security,传输层安全协议):用于两个应用程序之间提供保密性和数据完整性。该协议由两层组成:TLS记录协议和TLS握手协议。
TLS是在SSL的基础上标准化的产物,可以说SSL和TLS是同一事物的不同阶段。
2. HTTPS工作原理(请求过程)
HTTPS的请求过程如下图所示:
步骤详解:
- 客户端发起 HTTPS 请求。
- 服务端生成证书:采用 HTTPS 协议的服务器必须要有一套数字证书,这套证书其实就是一对公钥和私钥。这里说明一下“数字证书”,我们可以自己制作,也可以向机构申请,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面。(对于公钥和私钥的理解,以及对称加密和非对称加密,主要参考这篇文章)
- 传送证书:服务端向客户端返回公钥,其中包含了很多的信息,如证书的颁发机构、过期时间等等。
- 客户端解析证书:这部分工作由客户端的TLS来完成,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随机值key,然后使用公钥对这个key进行加密(这个key作为后续对称加密算法的私钥)。
- 客户端向服务器发送对称密钥:客户端向服务端发送上一步中经过加密的key。
- 服务端解密信息:服务端通过私钥解密后,即可得到客户端发过来的对称密钥,然后使用这个密钥对待传输的明文数据进行对称加密。
- 服务器端向客户端传输对称加密后的数据。
- 客户端使用本地保留的密钥key进行对称解密,从而拿到真实的数据。
总的来说,HTTPS 请求的过程就是对称加密与非对称加密相结合的过程。
3. HTTP与HTTPS的区别
- HTTP 是明文传输,数据都是未加密的,安全性较差;HTTPS(即HTTP+SSL) 的数据传输过程是加密的,安全性较好;
- 使用 HTTPS 需要使用 CA 证书(Certificate Authority,数字证书认证机构)。证书有免费的(免费的证书较少);也有付费的,证书颁发机构有如:Symantec、Comodo、GoDaddy 和 GlobalSign 等。
- 使用 HTTP 协议的响应速度更快,而HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议。HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包;而 HTTPS 除了 TCP 的三个包,还要加上 SSL 握手需要的 9 个包,所以一共是 12 个包。
- 两者默认使用的端口不一样,HTTP 使用80端口,而 HTTPS 使用443端口。
(全文完)
参考: