HTTP和HTTPS的区别与原理解析

· 阅读约需13分钟

一、HTTP简介

HTTP(HyperText Transfer Protocol,超文本传输协议)是互联网上应用最为广泛的一种网络协议。它是万维网(World Wide Web)的数据通信基础,用于从WWW服务器传输超文本到本地浏览器。

1.1 HTTP的特点

  • 简单快速:客户向服务器请求服务时,只需传送请求方法和路径
  • 灵活:HTTP允许传输任意类型的数据对象,由Content-Type标记
  • 无连接:每次连接只处理一个请求,处理完就断开
  • 无状态:协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态

1.2 HTTP的工作流程

  1. 客户端与服务器建立TCP连接
  2. 客户端向服务器发送HTTP请求报文
  3. 服务器解析请求,返回HTTP响应报文
  4. 释放TCP连接
  5. 客户端解析响应内容并渲染展示

二、HTTPS简介

HTTPS(HyperText Transfer Protocol Secure,超文本传输安全协议)是以安全为目标的HTTP通道,简单讲就是HTTP的安全版。

HTTPS = HTTP + SSL/TLS

它在HTTP的基础上加入了SSL/TLS协议,通过SSL证书来验证服务器的身份,并为浏览器和服务器之间的通信进行加密。

2.1 为什么需要HTTPS?

HTTP协议有一个致命的缺点——明文传输,数据在传输过程中很容易被窃取和篡改:

  1. 窃听风险:第三方可以获知通信内容
  2. 篡改风险:第三方可以修改通信内容
  3. 冒充风险:第三方可以冒充他人身份参与通信

HTTPS就是为了解决这些安全问题而诞生的。

三、HTTP和HTTPS的核心区别

对比项HTTPHTTPS
端口80443
安全性明文传输,不安全SSL/TLS加密,安全
证书不需要需要CA证书
速度较快稍慢(加密解密有开销)
费用免费证书需要花钱(也有免费的)
协议层应用层HTTP + SSL/TLS(传输层加密)
搜索引擎权重较低较高(Google等优先收录HTTPS)

四、HTTPS的工作原理

4.1 SSL/TLS握手过程

HTTPS在传输数据之前,需要先进行SSL/TLS握手,建立安全通道。整个握手过程大致如下:

第一步:客户端发起请求(Client Hello)

  • 客户端向服务器发送支持的SSL/TLS版本列表
  • 发送支持的加密算法列表
  • 发送一个随机数(Client Random)

第二步:服务器回应(Server Hello)

  • 服务器选择一个双方都支持的SSL/TLS版本
  • 选择一个加密算法
  • 发送服务器的数字证书
  • 发送一个随机数(Server Random)

第三步:客户端验证证书

  • 客户端验证服务器证书的合法性(是否由可信CA签发、是否过期、域名是否匹配等)
  • 如果证书有问题,浏览器会弹出警告

第四步:客户端发送预主密钥

  • 客户端生成一个新的随机数(Pre-Master Secret)
  • 用服务器证书里的公钥加密这个预主密钥
  • 发送给服务器

第五步:服务器解密预主密钥

  • 服务器用自己的私钥解密,得到预主密钥
  • 双方都有了三个随机数:Client Random、Server Random、Pre-Master Secret
  • 双方用这三个随机数各自算出会话密钥(Session Key)

第六步:握手完成,开始加密通信

  • 客户端发送”我要开始用会话密钥加密了”
  • 服务器发送”我也开始用会话密钥加密了”
  • 之后所有的HTTP数据都用这个会话密钥对称加密传输

4.2 为什么要用三个随机数?

为什么不直接用预主密钥作为会话密钥,还要加上另外两个随机数?

原因是:确保每次连接的会话密钥都不一样

  • 如果只用预主密钥,那每次连接的密钥都一样,安全性就降低了
  • 加上客户端和服务器各自生成的随机数,就能保证每次连接的密钥都是唯一的
  • 即使某次会话密钥泄露了,也不会影响之前和之后的连接

五、对称加密与非对称加密

HTTPS的加密过程其实结合了两种加密方式:

5.1 非对称加密(公钥加密)

  • 有一对密钥:公钥和私钥
  • 公钥可以公开,私钥只有自己知道
  • 用公钥加密的数据,只能用私钥解密
  • 用私钥加密的数据,只能用公钥解密
  • 特点:安全性高,但速度慢

用途: 用来加密传输预主密钥,以及数字签名。

5.2 对称加密(会话密钥)

  • 只有一个密钥,加密和解密都用它
  • 特点:速度快,适合加密大量数据
  • 缺点:密钥如何安全传输是个问题

用途: 用来加密实际传输的HTTP数据。

5.3 为什么不直接用非对称加密所有数据?

因为非对称加密的速度太慢了。如果每一条数据都用非对称加密,性能会非常差。

所以HTTPS的做法是:

  1. 用非对称加密安全地传输对称加密的密钥
  2. 之后的大量数据都用对称加密来传输

这样既保证了安全性,又保证了性能。

六、数字证书与CA

6.1 什么是数字证书?

数字证书就像是网站的”身份证”,由权威的第三方机构(CA)颁发。

证书里包含的信息:

  • 网站的域名
  • 网站的公钥
  • 证书颁发机构(CA)
  • 证书的有效期
  • 证书的序列号
  • 等等…

6.2 什么是CA?

CA(Certificate Authority,证书颁发机构)是负责签发和管理数字证书的权威机构。

常见的CA机构:

  • DigiCert
  • GlobalSign
  • Let’s Encrypt(免费)
  • 等等

浏览器和操作系统里会内置这些可信CA的根证书,所以它们签发的证书会被浏览器信任。

6.3 证书的验证过程

当浏览器收到服务器的证书时,会做这些验证:

  1. 证书是否过期:检查有效期
  2. 域名是否匹配:证书里的域名和访问的域名是否一致
  3. 证书是否被吊销:检查CRL或OCSP
  4. 证书链是否可信:逐级向上验证,直到找到一个可信的根证书

如果任何一步验证不通过,浏览器就会显示”不安全”的警告。

七、HTTPS的性能影响

很多人担心HTTPS会影响性能,确实会有一些开销,但通常影响不大:

7.1 性能开销来自哪里?

  1. SSL/TLS握手:建立连接时多了几次往返,增加了延迟
  2. 加密解密:数据传输时需要加密解密,消耗CPU
  3. 证书验证:客户端需要验证证书链

7.2 如何优化HTTPS性能?

  1. 会话复用(Session Resumption):复用之前的会话,跳过完整握手
  2. OCSP Stapling:服务器帮客户端查询证书状态,减少客户端请求
  3. HTTP/2:HTTPS配合HTTP/2,性能反而可能比HTTP更好
  4. 选择合适的加密算法:优先选择性能好的算法
  5. CDN加速:把静态资源放到离用户近的节点

实际上,现在的服务器CPU都很强,加密解密的开销已经很小了。而且Google等搜索引擎还会给HTTPS网站更高的权重,所以总体来说还是利大于弊。

八、常见问题

8.1 HTTPS就绝对安全吗?

不是绝对的,只是相对HTTP安全很多。

仍然可能存在的风险:

  • 证书被伪造或泄露
  • SSL/TLS协议本身的漏洞(如心脏滴血)
  • 客户端被植入了恶意根证书
  • 中间人攻击如果用户手动信任了证书

但这些都是比较极端的情况,正常使用下HTTPS已经足够安全了。

8.2 免费证书和付费证书有什么区别?

  • 免费证书(如Let’s Encrypt):只有基础的域名验证(DV),适合个人网站和小项目
  • 付费证书:有组织验证(OV)和扩展验证(EV),会显示公司名称,更有信任感,适合企业和电商网站

安全性上其实差不多,主要区别在于验证级别和信任程度。

8.3 全站HTTPS需要注意什么?

  1. 所有资源都要用HTTPS:图片、CSS、JS等都不能用HTTP,否则会出现混合内容警告
  2. 301重定向:把HTTP的请求都重定向到HTTPS
  3. HSTS:开启HSTS,强制浏览器使用HTTPS访问
  4. 更新内部链接:网站内部的链接都改成HTTPS
  5. 更新sitemap和robots.txt

九、总结

HTTP和HTTPS的核心区别就是安全性

  • HTTP是明文传输,数据容易被窃听和篡改
  • HTTPS通过SSL/TLS加密,保证了数据的机密性、完整性和身份认证

虽然HTTPS会有一点点性能开销,还需要证书,但在今天这个网络环境下,HTTPS已经成为网站的标配。无论是从用户安全、SEO还是品牌形象的角度考虑,都应该使用HTTPS。

记住:没有HTTPS的网站,就像是在裸奔。