当前位置:首页 >数据库 >HTTPS协议是如何防中间人窃听的 正文

HTTPS协议是如何防中间人窃听的

来源:开发者社区   作者:人工智能   时间:2025-11-26 21:20:00

​相信你看过 HTTPS 协议的议何定义,知道它是防中一个安全的通讯协议,可以防止中间人窃听,间人但是窃听你也知道很多代理都可以对 HTTPS 协议抓包 ,那 HTTPS 协议是议何如何防中间人窃听的呢?还有,HTTPS 也可以双向验证 ,防中也就是间人服务器端可以验证客户端证书,这一点和防止中间人窃听有没有关系呢?窃听本文就来回答这个问题,如果有不同意见 ,议何可以直接发消息与我交流 。云计算防中

HTTPS 协议的间人基本概念:HTTPS 协议是在 HTTP 协议的基础上 ,通过添加 SSL/TLS 加密协议而成的窃听。SSL/TLS 协议是议何一种用于网络通信安全的加密协议,可以将数据在传输过程中进行加密  ,防中保证数据的间人机密性和完整性。

如何防止中间人窃听

要回答这个问题,我们先看看 HTTPS 协议双方,也就是客户端和服务器的源码下载通信过程。

客户端发送请求

当用户在浏览器中输入一个 HTTPS 网址时,浏览器会向服务器发送一个请求 ,请求建立一个HTTPS 连接。请求中包含有客户端支持的加密算法列表 ,当然也包括客户端自己的公钥。

服务器回应

服务器会回应客户端的请求,并从中选择一种加密算法 。服务器会使用该算法生成一组密钥 ,并将该密钥用客户端的公钥加密,并将加密后的密钥及数字证书发送给客户端 。香港云服务器

客户端验证证书

客户端收到服务器的回应后,会验证服务器的数字证书是否合法。数字证书是由数字证书认证机构(CA)颁发的 ,用于证明服务器的身份。客户端会根据自己的信任列表,验证数字证书的合法性 。

验证数字证书的过程如下:

客户端(浏览器或 APP)读取证书中的源码库证书对应的域名、所有者、有效期等信息进行一一校验;客户端开始查找操作系统中已内置的受信任的证书发布机构 CA,与服务器发来的证书中的颁发者 CA 比对 ,用于校验证书是否为合法机构颁发;如果找不到 ,客户端就会报错 ,说明服务器发来的证书是不可信任的;如果找到 ,模板下载那么客户端就会从操作系统中取出 颁发者 CA 的公钥,然后对服务器发来的证书里面的签名进行解密;客户端使用相同的 hash 算法计算出服务器发来的证书的 hash 值,将这个计算的 hash 值与证书中签名做对比;对比结果一致 ,则证明服务器发来的证书合法,没有被冒充;此时客户端就可以读取证书中的公钥,用于后续加密了;客户端生成密钥

如果数字证书验证通过 ,客户端会使用自己的免费模板私钥解密服务器发送过来的密钥 。然后客户端会使用该密钥生成一对对称密钥  ,一份用于加密,一份用于解密。

客户端发送密钥

客户端使用服务器的公钥加密刚刚生成的对称密钥 ,并将加密后的密钥发送给服务器。

服务器解密密钥

服务器收到客户端发送的加密后的对称密钥后,会使用自己的私钥解密该密钥。

开始数据传输

经过以上的验证和加密 ,HTTPS 通信就建立了起来 。此时 ,客户端和服务器之间的数据传输都是通过对称密钥进行加密的 。为什么用对称密钥 ?因为对称加密的开销小 ,且其密钥采用非对称加密算法传输,通信过程非常安全。

理解了以上过程 ,你就会明白  ,防止中间人最重要最重要的过程是验证证书,只要证书是合法的 ,服务器就是合法的,不会是冒充的。证书是专业的机构 CA 颁发和管理 ,所以是可信的。

假如 ,客户端和服务器直接有一个中间人 ,比如你用了代理,那么这个代理就是中间人 。中间人要想监听客户端和服务器 ,就需要获取客户端和服务器的通信用的密钥 。服务器的密钥,中间人可以作为客户端的身份进行获取 ,但是要想获取客户端的密钥  ,中间人需要伪装服务器的身份 ,从而发布自己的证书 ,中间人的证书可以是自签名证书 ,也可以是向 CA 申请的证书,无论是哪个证书 ,对应的域名一定 不是服务器的域名 ,这样,客户端在验证证书时一定不会通过 ,我们就会收到浏览器的提醒:证书不被信任 。

如果 ,客户端(你)选择信任并继续,那么你的通信将毫无安全可言。除非,这个代理(中间人)是你自己部署的,基于测试或抓包分析等其他原因 ,你可以信任并继续 。

回想一下  ,很多代理之所以可以抓取 HTTPS 包,是因为我们提前导入并信任它们的 CA 证书 ,然后就可以通过替换证书的方式进行密钥交换 ,以 charles 为例,具体过程如下:

图片来源:https://ost.51cto.com/posts/19810

因此,HTTPS 协议是借助于证书防中间人窃听的 ,请注意 ,如果自己从没有做过什么代理设置,不要相信任何不受信任的证书 ,推而广之,IOS 不要相信任何描述文件 ,不要安装不明来源的 APP,不要赋予任何 APP 不需要的权限,这是保障自己信息安全的根本。

HTTPS 的双向验证

HTTPS 也可以双向验证,也就是服务器端可以验证客户端证书 ,那么什么场景需要这样 ?

之前的过程 ,只能说明服务器是合法的,如果服务器想让客户端也是合法的  ,那么就需要验证客户端的证书 ,因此 ,如果服务端需要限定的客户端才能访问服务,那么可以采取 HTTPS 的双向验证[1] 。因此 即使 HTTPS 不开启双向验证 ,也可以防止中间人攻击。

HTTPS 的双向验证 nginx 的配置示范如下:

复制location / {

# 开启 HTTPS 协议

listen 443 ssl;

# 指定 SSL 证书文件和私钥文件

ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem;

# 开启证书校验

ssl_verify_client on;

# 指定 CA 证书文件

ssl_client_certificate /path/to/ca.pem;

# 指定校验方式为深度校验

ssl_verify_depth 2;}1.2.3.4.5.6.7.8.9.10.11.12.13.

最后的话

HTTPS 协议通过使用 SSL/TLS 加密技术 ,通过证书检验,可以有效防止中间人窃听 、篡改和伪造等安全问题 。

最后  ,请注意 ,当浏览器或手机出现安全提醒时 ,一定不要添加信任并继续,因为 ,诈骗犯/黑客正在暗处等着你 ,除非你真的知道你在做什么。

标签:

责任编辑:数据库