最近有朋友问我什么是”证书绑定”(Certificate Pinning), 简单的来说,证书绑定是防止攻击者使用假证书进行中间人攻击(MITM)的一种安全机制.
那要如何做到证书绑定呢?以下是Google官网所提供的Android代码范例供参考,便可顺利完成。
dfdK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6V1k6i4k6W2L8r3!0H3k6i4u0Q4x3X3g2S2L8X3c8J5L8$3W2V1i4K6u0W2j5$3!0E0i4K6u0r3N6s2u0S2K9h3&6A6L8X3N6Q4x3V1k6S2M7Y4c8A6j5$3I4W2M7#2)9J5c8Y4y4W2j5%4g2J5K9i4c8&6i4K6u0V1M7%4y4D9i4K6u0W2K9s2c8E0L8l9`.`.
没想到她又问道:”若App照官方范例写好证书绑定,是不是就没有可能再被有心人士以中间人攻击手法拦到传输的敏感数据了呢?”
这是个好问题,但千万别犯了逻辑上的谬误.首先,App的代码处理好证书绑定,不等同于”无法再被以任何手法拦到敏感数据”,这是两码子事,别混为一谈,不然就诒笑大方了.
原因为何呢?因为若我能把该行动装置纳于自己的掌控之中,只要加装Xposed框架,以及JustTrustMe模块,再以Burp进行拦截,即便该App确有做到证书绑定,依然会被我强行绕过,而拦到敏感数据.

或许还是有人感到不解,不懂什么是”强行绕过”,很简单,因为JustTrustMe就是用来强制禁止App进行SSL验证的hook模块罢了.不过各位不用瞎操心,至少你有顾好你的行动装置,不要被人拿去装些有的没的就还好.
反过来说,若某App明明有写好代码做到证书绑定,但仍被我以上述手法强行绕过,而拦得敏感数据,即便如此,我们也不能据此说该App”未做好证书绑定”. 秉持一样的合理逻辑,这样相信各位理解了才是. 若不讲道理,一味把罪责归到程序猿身上,那可真是比窦娥还冤呢~
[培训]科锐逆向工程师培训第53期2025年7月8日开班!