背景
有不少分析HTTPS原理的文章,在提到中间人攻击问题时,都以中间人证书是自己签发生成的,不被系统信任,当验证时是通过不了的,HTTPS连接断开。这让人下意识认为:只要不信任非公认证书,中间人攻击就不存在了。
然而,实际上一个邪恶组织是可以通过申请合法证书,并且利用这个合法证书达到中间人攻击目的。那么它的原理是什么呢?请往下看。
HTTPS基础
HTTPS组成
HTTPS = HTTP + SSL/TLS
实际上,现在绝大部分都是采用TLS,所以:HTTPS = HTTP + TLS
HTTPS背后的基础技术
对称加密与非对称加密技术,比如AES和RSA。
消息摘要算法,MD5。
HTTPS原理说明
一句话说明:HTTPS就是通过RSA技术确认对方,并商议后续通信加密的过程。
在互联网上,如何确认对方?技术的基础就是RSA。
通过RSA生成一对秘钥(公钥与私钥),通过私钥与MD5对一段信息加密,那么,就可以通过公钥解密并确认这段信息是否由此私钥加密,是否中间被修改,也就是做到了信任的数字化以及信任链的数字化。
通过商业化,即成立一个组织,这个组织是全球公认的。那么由这个组织私钥加密的所有文件,潜在来讲都是可以被信任的。
那么,当我们向一个公认组织申请证书认证时,产生的证书,就表明我们自身已经是可以被大众信任的。
当确认对方之后,客户端通过发送随机数等信息给服务端,然后通过这段数据生成对称加密秘钥,并测试一次数据加密传输过程。后续的所有正文都是通过生成的秘钥加密解密传输的。
公认组织证书签发存在问题
任何一个组织机构,都可以申请证书。那么,如果有一个邪恶的组织,同样申请的一个证书,此时该怎么办呢?这也是许多文章没有去深入追究的问题。
如果某个客户端,仅仅做“basic X.509 certificate trust evaluation”,那么就刚好可以被这个邪恶组织利用。因为它可以变成一个中间人,并且客户端与服务端是毫无知晓的。
为什么呢?简单来讲,就是基础的X.509证书验证规则,就是验证证书是否是合法的以及是否过期。刚刚好,这个邪恶组织证书完全符合要求。
此时,这个组织就可以利用自己的私钥,解密客户端内容,并且用解密后的内容模拟客户端再次去服务端请求信息,同时模拟服务端回复信息给客户端,而它们对此毫无知觉。
那么,如何破解呢?当然是添加基础X.509验证之外的规则,比如DNS-Name验证,或者更严谨的是客户端添加服务器的公钥。不考虑其他因素,那么,中间攻击者将毫无立足之地。
以iOS-AFNetworking3.0为例
对证书验证处理是在AFSecurityPolicy类。我们可以看到,默认处理方式是包括DomainName验证的,也就是默认情况下,任何一个邪恶组织都无法通过这道门槛。