HTTP和HTTPS的区别与原理解析
一、HTTP简介
HTTP(HyperText Transfer Protocol,超文本传输协议)是互联网上应用最为广泛的一种网络协议。它是万维网(World Wide Web)的数据通信基础,用于从WWW服务器传输超文本到本地浏览器。
1.1 HTTP的特点
- 简单快速:客户向服务器请求服务时,只需传送请求方法和路径
- 灵活:HTTP允许传输任意类型的数据对象,由Content-Type标记
- 无连接:每次连接只处理一个请求,处理完就断开
- 无状态:协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态
1.2 HTTP的工作流程
- 客户端与服务器建立TCP连接
- 客户端向服务器发送HTTP请求报文
- 服务器解析请求,返回HTTP响应报文
- 释放TCP连接
- 客户端解析响应内容并渲染展示
二、HTTPS简介
HTTPS(HyperText Transfer Protocol Secure,超文本传输安全协议)是以安全为目标的HTTP通道,简单讲就是HTTP的安全版。
HTTPS = HTTP + SSL/TLS
它在HTTP的基础上加入了SSL/TLS协议,通过SSL证书来验证服务器的身份,并为浏览器和服务器之间的通信进行加密。
2.1 为什么需要HTTPS?
HTTP协议有一个致命的缺点——明文传输,数据在传输过程中很容易被窃取和篡改:
- 窃听风险:第三方可以获知通信内容
- 篡改风险:第三方可以修改通信内容
- 冒充风险:第三方可以冒充他人身份参与通信
HTTPS就是为了解决这些安全问题而诞生的。
三、HTTP和HTTPS的核心区别
| 对比项 | HTTP | HTTPS |
|---|---|---|
| 端口 | 80 | 443 |
| 安全性 | 明文传输,不安全 | 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的做法是:
- 用非对称加密安全地传输对称加密的密钥
- 之后的大量数据都用对称加密来传输
这样既保证了安全性,又保证了性能。
六、数字证书与CA
6.1 什么是数字证书?
数字证书就像是网站的”身份证”,由权威的第三方机构(CA)颁发。
证书里包含的信息:
- 网站的域名
- 网站的公钥
- 证书颁发机构(CA)
- 证书的有效期
- 证书的序列号
- 等等…
6.2 什么是CA?
CA(Certificate Authority,证书颁发机构)是负责签发和管理数字证书的权威机构。
常见的CA机构:
- DigiCert
- GlobalSign
- Let’s Encrypt(免费)
- 等等
浏览器和操作系统里会内置这些可信CA的根证书,所以它们签发的证书会被浏览器信任。
6.3 证书的验证过程
当浏览器收到服务器的证书时,会做这些验证:
- 证书是否过期:检查有效期
- 域名是否匹配:证书里的域名和访问的域名是否一致
- 证书是否被吊销:检查CRL或OCSP
- 证书链是否可信:逐级向上验证,直到找到一个可信的根证书
如果任何一步验证不通过,浏览器就会显示”不安全”的警告。
七、HTTPS的性能影响
很多人担心HTTPS会影响性能,确实会有一些开销,但通常影响不大:
7.1 性能开销来自哪里?
- SSL/TLS握手:建立连接时多了几次往返,增加了延迟
- 加密解密:数据传输时需要加密解密,消耗CPU
- 证书验证:客户端需要验证证书链
7.2 如何优化HTTPS性能?
- 会话复用(Session Resumption):复用之前的会话,跳过完整握手
- OCSP Stapling:服务器帮客户端查询证书状态,减少客户端请求
- HTTP/2:HTTPS配合HTTP/2,性能反而可能比HTTP更好
- 选择合适的加密算法:优先选择性能好的算法
- CDN加速:把静态资源放到离用户近的节点
实际上,现在的服务器CPU都很强,加密解密的开销已经很小了。而且Google等搜索引擎还会给HTTPS网站更高的权重,所以总体来说还是利大于弊。
八、常见问题
8.1 HTTPS就绝对安全吗?
不是绝对的,只是相对HTTP安全很多。
仍然可能存在的风险:
- 证书被伪造或泄露
- SSL/TLS协议本身的漏洞(如心脏滴血)
- 客户端被植入了恶意根证书
- 中间人攻击如果用户手动信任了证书
但这些都是比较极端的情况,正常使用下HTTPS已经足够安全了。
8.2 免费证书和付费证书有什么区别?
- 免费证书(如Let’s Encrypt):只有基础的域名验证(DV),适合个人网站和小项目
- 付费证书:有组织验证(OV)和扩展验证(EV),会显示公司名称,更有信任感,适合企业和电商网站
安全性上其实差不多,主要区别在于验证级别和信任程度。
8.3 全站HTTPS需要注意什么?
- 所有资源都要用HTTPS:图片、CSS、JS等都不能用HTTP,否则会出现混合内容警告
- 301重定向:把HTTP的请求都重定向到HTTPS
- HSTS:开启HSTS,强制浏览器使用HTTPS访问
- 更新内部链接:网站内部的链接都改成HTTPS
- 更新sitemap和robots.txt
九、总结
HTTP和HTTPS的核心区别就是安全性:
- HTTP是明文传输,数据容易被窃听和篡改
- HTTPS通过SSL/TLS加密,保证了数据的机密性、完整性和身份认证
虽然HTTPS会有一点点性能开销,还需要证书,但在今天这个网络环境下,HTTPS已经成为网站的标配。无论是从用户安全、SEO还是品牌形象的角度考虑,都应该使用HTTPS。
记住:没有HTTPS的网站,就像是在裸奔。