为什么我们需要证书固定?

为什么 HTTPS 不足以在移动应用程序和 API 服务器之间的通信通道中提供机密性、完整性和真实性?

虽然 HTTPS 在移动应用程序和 API 服务器之间的通信渠道中提供机密性、完整性和真实性,但证书固定有助于保护这些保证不被损害。

为进一步增强基于信任的安全性假设

根证书和中间证书颁发机构(CAs)发放未经验证的证书可能允许攻击者截获前往该域的任何TLS加密流量,如果他们能够拦截通道或欺骗DNS的话。

这是可能的,因为移动设备预装有根证书的信任存储。如果有到其中一个根CA证书的信任链,则TLS连接将被视为是可信的。这意味着如果任何一个 CA 被破坏或错误地颁发证书,则信任就被破坏和污染了,就像DigiNotar、GlobalSign 和 Comodo 等著名案例一样。换句话说,未固定的TLS安全性仅如包含在设备信任存储中的最弱的 CA 那么强。

为进一步增强应用程序安全性以防止逆向工程

攻击者可以控制他们的网络访问和安装应用程序的设备。如果应用程序不使用固定,那么将其他证书安装在设备的系统信任存储中则相对容易,从而允许使用代理工具截取API流量。这使他们可以从通道中提取任何应用程序机密(例如API密钥)和API调用的结构,并将其用于构建一个脚本来冒充应用程序。即使应用程序代码经过混淆或加固,仍然可以使用这种反向工程方法。

固定可以使这种逆向工程方法更加困难,从而成为提高应用程序安全姿态的重要步骤。然而,在攻击者控制根设备或越狱设备的情况下,则固定仍然可以被破解,如《是否可能绕过证书固定》中所讨论的那样。