本质上,HTTPS是HTTP的安全升级版 ,它们最核心的区别就在于安全性。
我们可以用一个非常贴切的比喻来理解:
-
HTTP :就像寄送明信片。任何人经手(网络运营商、黑客、公共Wi-Fi提供者)都可以看到上面的全部内容,甚至可以篡改内容后再寄出去。
-
HTTPS :就像把明信片放进一个上锁的保险箱。只有发送方和指定的接收方有钥匙。即使中途被人截获,他们也打不开箱子,看不到也改不了里面的内容。
下面我们从多个维度进行详细的对比和讲解。
总结对比
特性 | HTTP | HTPPS |
---|---|---|
全称 | HyperText Transfer Protocol | HyperText Transfer Protocol Secure |
安全性 | 不安全:明文传输,易被窃听和篡改 | 安全:加密传输,防窃听、防篡改 |
协议与端口 | 运行在TCP 之上,默认使用端口80 | 运行在SSL/TLS 之上,再在TCP 之上,默认使用端口443 |
加密方式 | 无加密 | 混合加密(非对称加密+对称加密) |
身份认证 | 无认证,无法确认对方是否是伪装的服务器 | 有强认证 ,通过CA证书验证网站身份,防止钓鱼网站 |
数据完整性 | 无保障,数据在传输中可能被篡改而无法察觉 | 有保障,接收方能验证数据是否完整、未被篡改 |
SEO(搜索引擎优化) | 处于劣势,是排名下调的因素 | 处于优势,是排名提升的因素 |
浏览器显示 | 地址栏显示http://,通常没有特殊标识 | 地址栏显示https://,并有一个锁形图标 |
性能与成本 | 速度快,无额外计算开销 | 速度稍慢(因加密解密),需要购买和维护SSL证书 |
SSL 和TLS 是用于在两个通信应用程序(例如,你的浏览器 和一个网站服务器 )之间提供加密通信 和安全连接的协议。
-
SSL:安全套接字层。由网景公司于1990年代中期开发。
-
TLS :传输层安全。是SSL的标准化和更安全的后续版本,由互联网工程任务组制定。
关键点:
-
我们现在通常所说的"SSL ",实际上指的是TLS ,因为SSL的所有版本都已被发现存在漏洞并被废弃。
-
由于历史原因,"SSL"这个名称被广泛沿用,所以你经常会听到人们说"SSL证书"或"SSL连接",但实际上他们指的是TLS。
-
它们之间的关系可以理解为:TLS是SSL的升级版和现代名称。
核心区别详解
- 安全性(最根本的区别)
HTTP:明文传输的风险
-
窃听:你通过HTTP发送的账号、密码、聊天记录、信用卡号等所有信息,在网络上都是以未加密的文本形式传播。任何一个有机会接触到你网络流量的人(比如在同一公共Wi-Fi下的黑客)都可以轻松窃取这些信息。
-
篡改:攻击者不仅可以窃听,还可以修改你发送或接收的数据。例如,在你下载一个软件时,他可能将软件替换成病毒。
-
冒充:你无法确认你正在访问的网站是不是真正的那个网站。攻击者可以轻易地搭建一个和真网站一模一样的假网站(钓鱼网站)来骗取你的信息。
HTTPS:如何解决安全问题
HTTPS通过引入SSL/TLS协议层来解决上述所有问题。
-
加密:使用混合加密技术。
-
握手阶段使用非对称加密:来安全地交换一个"会话密钥"。
-
通信阶段使用对称加密:使用交换来的"会话密钥"对实际传输的HTTP数据进行加密和解密。这样即使数据被截获,没有密钥也无法解密。
-
-
身份认证:使用数字证书。
-
网站必须向全球公认的证书颁发机构(CA) 申请一个"身份证"(数字证书)。
-
当你的浏览器通过HTTPS连接网站时,网站会出示这个证书。浏览器会验证证书是否由可信的CA签发、证书中的域名是否与你访问的域名一致、证书是否在有效期内。
-
这把"锁"就是证书验证通过的标志。它告诉你:"对方的身份已经确认,你是安全的。"
-
-
完整性校验:使用消息认证码(MAC)。
-
在传输数据时,会附带一个基于密钥和内容计算出的"摘要"。
-
接收方用相同的密钥和算法重新计算摘要,如果与传来的摘要不一致,就说明数据在传输过程中被篡改了,连接会被终止。
-
- 协议与端口
-
HTTP:是应用层协议,直接建立在传输层TCP协议之上。它使用大家熟知的80端口。
-
HTTPS :并不是 一个全新的协议。它是在HTTP和TCP之间加入了一个SSL/TLS加密层。这个安全层负责加密、解密和身份认证。它使用443端口。
所以,它们的结构可以理解为:
-
HTTP = TCP + HTTP
-
HTTPS = TCP + SSL/TLS + HTTP
- 对用户体验和网站运营的影响
-
浏览器标识 :这是最直观的区别。现代浏览器(Chrome, Firefox, Edge等)对于HTTP网站会标记为 "不安全 " ,甚至会隐藏掉网址前的http://,以警示用户。而对于HTTPS网站,则会显示一个锁形图标和 https://,给用户以安全感。
-
SEO排名 :谷歌、百度等主流搜索引擎都已明确表示 ,HTTPS是搜索排名的正面信号。这意味着,在其他条件相同的情况下,使用HTTPS的网站会比使用HTTP的网站在搜索结果中获得更高的排名。
-
现代Web技术要求 :许多新的浏览器API(如地理定位、Service Workers/PWA、摄像头/Microphone访问等)都要求必须在HTTPS环境下才能使用。这意味着如果你想构建一个功能丰富的现代Web应用,HTTPS是必需品。
小结
HTTP是过去的遗物,HTTPS是现在的标准和未来的基石。
在当今这个高度依赖互联网且网络安全威胁无处不在的时代,没有任何理由再使用HTTP来传输任何敏感或非敏感信息。
-
对于普通用户 :养成查看浏览器地址栏的习惯,永远不要在标记为"不安全"的HTTP网站上输入任何密码、个人信息或支付细节。
-
对于网站所有者/开发者 :为你的网站部署HTTPS不再是"可选项" ,而是必须履行的责任。这不仅能保护你的用户,也能提升你的品牌信誉和搜索引擎排名。现在,甚至可以通过 Let's Encrypt 等机构免费获取SSL证书,部署成本已大大降低。
我们来简单了解一下SSL 其中的一个漏洞,例如SSL 3.0 中的POODLE。
POODLE
POODLE 是一个严重的安全漏洞,它的全称是 "Padding Oracle On Downgraded Legacy Encryption"。
-
中文直译:降级遗留加密的填充预言攻击。
-
本质:这是一种利用SSL 3.0协议古老设计缺陷的攻击方式,允许攻击者在特定条件下解密HTTPS通信中的部分加密信息(如Cookie)。
-
发现时间:2014年。
-
CVE编号:CVE-2014-3566
这个名称非常精准地描述了攻击的三个方面:
-
Padding Oracle:攻击利用的是关于"填充字节"的反馈信息。
-
Downgraded:攻击需要迫使客户端和服务器从更安全的协议(如TLS)降级到不安全的SSL 3.0。
-
Legacy Encryption :攻击目标是这个遗留的、过时的加密协议(SSL 3.0)。
POODLE 攻击的原理(简化版)
要理解POODLE,我们需要先了解几个背景知识:
-
SSL 3.0:这是1996年发布的古老协议,非常过时,但为了兼容性,当时很多客户端和服务器仍然支持它。
-
CBC分组加密模式:SSL 3.0使用的一种加密模式。它要求数据在加密前必须被填充到固定长度。这些填充字节的内容没有严格规定。
-
中间人攻击:攻击者能够拦截和修改客户端与服务器之间的通信。
攻击步骤可以简化为:
第一步:强制协议降级
-
当客户端(如浏览器)尝试使用现代协议(如TLS 1.2)连接服务器时,攻击者会拦截并丢弃这个请求。
-
客户端会尝试重新连接,攻击者再次拦截。经过几次失败后,客户端可能会回退到它支持的最旧协议------SSL 3.0。
-
攻击者允许这次SSL 3.0的连接通过。这样,他就成功地让通信双方使用了一个存在漏洞的协议。
第二步:拦截并修改密文
-
攻击者拦截客户端发送给服务器的加密数据(比如一个包含用户Cookie的HTTPS请求)。
-
他像玩扑克牌一样,从之前拦截的密文中抽出一个字节 ,用它来替换目标密文块的最后一个字节。这相当于篡改了加密数据。
第三步:观察服务器的反应("填充预言")
-
被篡改的密文被发送到服务器。
-
服务器收到后,会尝试解密。解密过程包括检查填充字节是否符合规则。
-
SSL 3.0的致命缺陷 :它对填充字节的验证规则极其宽松 。它只检查最后一个字节来确定填充长度,而不验证其他填充字节的内容。
-
因此,根据解密后的填充字节是否"看起来"正确,服务器会返回两种不同的错误信息:
-
如果填充"正确",服务器会尝试处理数据,然后返回一个与MAC(消息认证码)失败相关的错误。
-
如果填充"错误",服务器会直接返回一个解密失败错误。
-
-
攻击者通过观察这两种不同的错误信息,就能知道被他篡改的那个字节解密后是否产生了"正确"的填充。
第四步:利用信息解密
-
通过反复、大量地重复步骤2和3(可能需要对同一个字节进行数百次请求),攻击者可以像一个"预言机"一样,逐步推算出密文中某一个字节解密后的明文是什么。
-
最终,攻击者可以一个字节一个字节地"猜出"或"算出"敏感的明文信息,例如用户的会话Cookie。
POODLE 攻击的影响与危害
-
危害 :攻击者可以窃取到通过SSL 3.0连接传输的敏感信息,尤其是HTTP Cookie。一旦获取到Cookie,攻击者就可以发起会话劫持,冒充用户登录其账户,而无需知道用户的密码。
-
条件:攻击实施起来比较困难,需要是中间人位置,并且目标服务器和客户端必须同时支持SSL 3.0。
-
严重性 :尽管条件苛刻,但由于SSL 3.0在当时仍被广泛支持,且攻击可以直接导致敏感信息泄露,因此它被评定为高危漏洞。
如何防御 POODLE 攻击?
防御措施非常简单直接,因为问题的根源在于SSL 3.0协议本身的设计缺陷。
-
彻底禁用SSL 3.0:
-
服务器端:在Web服务器(如Nginx, Apache, IIS)的配置中完全禁用对SSL 3.0协议的支持。
-
客户端:在现代浏览器和操作系统中,默认已禁用SSL 3.0。
-
-
使用TLS_FALLBACK_SCSV:
-
这是一个TLS扩展,旨在防止协议降级攻击。
-
它允许客户端声明:"我本来想用TLS 1.2,但被迫降级了。"如果服务器支持这个机制,它会检测到这种异常的降级行为并终止连接,从而挫败POODLE攻击。
-
这是防止降级攻击的更优雅的解决方案。
-
POODLE 的遗产与后续
POODLE攻击在网络安全史上是一个里程碑式的事件,它产生了深远的影响:
-
彻底淘汰SSL 3.0 :POODLE是压死SSL 3.0的最后一根稻草。在此之后,整个行业达成共识,必须完全弃用SSL 3.0。现代浏览器和服务器已默认不再支持它。
-
推动了现代加密协议的普及:它加速了向TLS 1.2和更安全的TLS 1.3的过渡。
-
后续变种:后来还出现了 POODLE-TLS,它尝试对TLS的CBC模式进行类似攻击,但由于TLS对填充的验证更加严格(会验证所有填充字节),其攻击难度和实用性远低于原始的POODLE攻击。
小结
POODLE 是一个利用SSL 3.0 协议设计缺陷的降级攻击 。它通过迫使通信双方使用这个过时的协议,并利用其宽松的填充验证机制,像侦探一样逐步破解加密信息。它的主要遗产就是宣告了SSL 3.0的死刑,推动了更安全的TLS协议成为现代互联网的唯一标准。