面试官:为什么说HTTPS比HTTP安全? HTTPS是如何保证安全的?

公众号

小册

这是我整理的学习资料,非常系统和完善,欢迎一起学习

一、安全特性

在前文中,我们已经了解到HTTP在通信过程中存在以下问题:

  • 通信使用明文(未加密),内容可能会被窃听。
  • 不验证通信方的身份,因此容易受到伪装攻击。

而HTTPS的出现旨在解决这些问题,HTTPS建立在SSL(Secure Sockets Layer,安全套接字协议)之上,通过SSL来保障通信的安全性。

一旦采用SSL,HTTP就拥有了HTTPS的加密、证书和完整性保护等功能。

SSL(Secure Sockets Layer,安全套接字协议)及其后继协议传输层安全(Transport Layer Security,TLS)是为网络通信提供安全性和数据完整性的安全协议。

二、实现方法

SSL主要依赖于以下三种手段来实现其功能:

1. 对称加密

对称加密是指使用协商的密钥对数据进行加密和解密,而密钥是相同的。只要密钥的安全性得到保障,整个通信过程就能确保机密性。

2. 非对称加密

非对称加密使用两个不同的密钥,一个是公钥,一个是私钥。公钥可以公开分享,而私钥必须保密。

公钥和私钥都可以用于加密和解密,但使用公钥加密后只能使用私钥解密,反之亦然。

3. 混合加密

在HTTPS通信中,采用混合加密,结合了对称加密和非对称加密。具体做法是发送方使用接收方的公钥对"对称密钥"进行加密,然后接收方使用自己的私钥解密,获取"对称密钥"。

这样可以确保在密钥交换的过程中安全性得到保障,随后可以使用对称加密方式进行通信。

举例说明:

假设网站拥有私钥并将公钥公开发布。当用户想要登录网站时,只需使用公钥加密数据,密文只有私钥持有者才能解密。黑客无法解密密文,因为他们没有私钥。

上述方法解决了数据加密问题,但在网络传输过程中,数据可能被篡改,且黑客可能伪造身份发布公钥。若获取了伪造的公钥,混合加密也无法保障数据的安全性。为此,我们需要摘要算法来确保完整性和身份验证。

4. 摘要算法

摘要算法是保证数据完整性的主要手段,也称为散列函数或哈希函数。它将任意长度的数据压缩成固定长度的唯一摘要字符串,类似于为数据生成数字"指纹"。

摘要算法确保数字"指纹"与原文是完全等价的。因此,只需在原文后附上其摘要,即可确保数据的完整性。

举例来说,若发送一条消息:"转账 1000 元",并附上SHA-2摘要,网站接收后计算消息的摘要,将两个"指纹"进行对比,如果匹配,表明消息是完整可信的,没有被修改。

5. 数字签名

数字签名用于确定消息确实是由发送方签署并发送的,因为没有人能伪造发送方的签名。

其原理很简单,使用私钥加密,公钥解密。

签名和公钥一样完全公开,任何人都可以获取。但只有使用私钥对应的公钥才能解密它,进而验证原文的完整性,就像签署文件一样证明消息确实是发送者发出的。

然而,我们仍需要防止黑客伪造公钥,即如何确定公钥的真实性。这时,需要第三方机构,即证书验证机构(Certificate Authority,CA)。

6. 证书验证机构(CA)

数字证书认证机构位于客户端和服务器双方都可信任的第三方位置。

CA对公钥的签名认证要求包括序列号、用途、颁发者、有效时间等等,将这些信息打包并签名,完整地证明了公钥的各种信息,形成"数字证书"。

流程如

下图:

  • 服务器运营者向数字证书认证机构申请公开密钥。
  • 数字证书认证机构在验证申请者身份后,对已申请的公开密钥进行数字签名。
  • 接着,分发已签名的公开密钥,并将其与公钥证书绑定在一起。
  • 服务器将数字证书发送给客户端,以便使用非对称加密方式通信。

客户端收到证书后,使用数字证书认证机构的公开密钥验证数字签名。一旦验证通过,就可以确认:

  • 服务器的公开密钥是由数字证书认证机构认证的,有效的。
  • 服务器的公开密钥是值得信任的。

三、总结

可以看到,HTTPS与HTTP虽然只差一个SSL,但通信的安全性大幅提高,满足了通信的四大特性:

  • 机密性:通过混合算法实现。
  • 完整性:通过摘要算法实现。
  • 身份认证:通过数字签名实现。
  • 不可否认性:同样通过数字签名实现。

同时引入了第三方证书认证机构,以确保公开密钥的安全性。

参考文献

相关推荐
涉密IT资质笔记几秒前
涉密资质投入产出分析模型:时间成本、四块成本构成与 ROI 决策框架
java·开发语言·算法
Xudde.5 分钟前
Mr-Robot 靶机渗透测试(Vulnhub Writeup)
笔记·学习·安全·web安全
Jack N12 分钟前
【Strapi 系列之二】Collection / Single / Component 怎么选?Strapi 字段大全一篇讲透
前端·javascript·strapi
北风toto14 分钟前
KMP 算法详解:从暴力匹配到 O(n+m) 的字符串搜索
java·开发语言·算法
聚铭网络14 分钟前
你的“三高一弱”排查到位了吗?
安全
william_yangshun15 分钟前
WordCraft 观察:纯 Rust 重写文字处理器,把文档变成可编程对象
开发语言·后端·rust·文档自动化
dtq042418 分钟前
C++ - 变量
开发语言·c++
撸串-研究生20 分钟前
面向景区的综合服务管理平台设计——以稻城亚丁景区为例【附源码】
java·开发语言·vue.js·前后端分离·稻城亚丁景区
wuyk55521 分钟前
样章-第03讲-FreeRTOS在16KB-RAM上的裁剪与陷阱
c语言·开发语言·stm32·单片机·嵌入式硬件·物联网·系统架构
kiros_wang27 分钟前
网络状态监听&WiFi信息获取:弱网提示、断网兜底方案
开发语言·网络·php