相信你看过 HTTPS 协议的议何定义,知道它是防中一个安全的通讯协议,可以防止中间人窃听
,间人但是窃听你也知道很多代理都可以对 HTTPS 协议抓包
,那 HTTPS 协议是议何如何防中间人窃听的呢?还有,HTTPS 也可以双向验证 ,防中也就是间人服务器端可以验证客户端证书
,这一点和防止中间人窃听有没有关系呢
?窃听本文就来回答这个问题,如果有不同意见 ,议何可以直接发消息与我交流。源码下载防中 HTTPS 协议的间人基本概念:HTTPS 协议是在 HTTP 协议的基础上
,通过添加 SSL/TLS 加密协议而成的窃听。SSL/TLS 协议是议何一种用于网络通信安全的加密协议,可以将数据在传输过程中进行加密,防中保证数据的间人机密性和完整性。 要回答这个问题,我们先看看 HTTPS 协议双方
,也就是客户端和服务器的香港云服务器通信过程。 当用户在浏览器中输入一个 HTTPS 网址时 ,浏览器会向服务器发送一个请求,请求建立一个HTTPS 连接 。请求中包含有客户端支持的加密算法列表,当然也包括客户端自己的公钥
。 服务器会回应客户端的请求,并从中选择一种加密算法。服务器会使用该算法生成一组密钥,并将该密钥用客户端的公钥加密
,并将加密后的密钥及数字证书发送给客户端。服务器租用 客户端收到服务器的回应后 ,会验证服务器的数字证书是否合法。数字证书是由数字证书认证机构(CA)颁发的,用于证明服务器的身份。客户端会根据自己的信任列表,验证数字证书的合法性
。 验证数字证书的过程如下: 如果数字证书验证通过,客户端会使用自己的源码库私钥解密服务器发送过来的密钥。然后客户端会使用该密钥生成一对对称密钥,一份用于加密,一份用于解密 。 客户端使用服务器的公钥加密刚刚生成的对称密钥,并将加密后的密钥发送给服务器
。 服务器收到客户端发送的加密后的对称密钥后,会使用自己的私钥解密该密钥 。 经过以上的验证和加密,HTTPS 通信就建立了起来 。此时,客户端和服务器之间的数据传输都是通过对称密钥进行加密的。为什么用对称密钥?因为对称加密的开销小,且其密钥采用非对称加密算法传输 ,通信过程非常安全
。 理解了以上过程
,你就会明白
,防止中间人最重要最重要的过程是验证证书,只要证书是合法的,服务器就是合法的
,不会是冒充的。证书是专业的机构 CA 颁发和管理
,所以是可信的 。 假如 ,客户端和服务器直接有一个中间人,比如你用了代理,那么这个代理就是中间人
。中间人要想监听客户端和服务器,就需要获取客户端和服务器的通信用的密钥。服务器的密钥
,中间人可以作为客户端的身份进行获取 ,但是要想获取客户端的密钥 ,中间人需要伪装服务器的身份 ,从而发布自己的证书
,中间人的证书可以是自签名证书
,也可以是向 CA 申请的证书 ,无论是哪个证书
,对应的域名一定 不是服务器的域名
,这样
,客户端在验证证书时一定不会通过 ,我们就会收到浏览器的提醒
:证书不被信任
。 如果,客户端(你)选择信任并继续
,那么你的通信将毫无安全可言
。除非
,这个代理(中间人)是你自己部署的,基于测试或抓包分析等其他原因,你可以信任并继续 。 回想一下,很多代理之所以可以抓取 HTTPS 包,是因为我们提前导入并信任它们的 CA 证书
,然后就可以通过替换证书的方式进行密钥交换,以 charles 为例,具体过程如下: 图片来源:https://ost.51cto.com/posts/19810 因此
,HTTPS 协议是借助于证书防中间人窃听的
,请注意
,如果自己从没有做过什么代理设置
,不要相信任何不受信任的证书,推而广之
,IOS 不要相信任何描述文件
,不要安装不明来源的 APP ,不要赋予任何 APP 不需要的权限
,这是保障自己信息安全的根本
。 HTTPS 也可以双向验证 ,也就是服务器端可以验证客户端证书 ,那么什么场景需要这样? 之前的过程
,只能说明服务器是合法的
,如果服务器想让客户端也是合法的 ,那么就需要验证客户端的证书,因此
,如果服务端需要限定的客户端才能访问服务,那么可以采取 HTTPS 的双向验证[1]
。因此 即使 HTTPS 不开启双向验证,也可以防止中间人攻击 。 HTTPS 的双向验证 nginx 的配置示范如下 : # 开启 HTTPS 协议 # 指定 SSL 证书文件和私钥文件 # 开启证书校验 # 指定 CA 证书文件 # 指定校验方式为深度校验 HTTPS 协议通过使用 SSL/TLS 加密技术 ,通过证书检验,可以有效防止中间人窃听、篡改和伪造等安全问题。 最后,请注意 ,当浏览器或手机出现安全提醒时,一定不要添加信任并继续,因为 ,诈骗犯/黑客正在暗处等着你,除非你真的知道你在做什么。如何防止中间人窃听


HTTPS 的双向验证
最后的话