我正在寻找在证书固定或替代方案中使用的“最佳实践”。
场景: 我有一个本机移动应用程序,并且我已经固定了证书,以便该应用程序可以针对我的服务器进行验证。
问题:问题出现在证书过期的 1 年内,我需要让我的所有应用程序用户使用新的证书版本更新他们的应用程序,否则应用程序将无法正常工作。
预期结果: 我想更新固定在移动应用程序中的证书,而无需让用户更新到不同版本的应用程序。
我正在寻找在证书固定或替代方案中使用的“最佳实践”。
场景: 我有一个本机移动应用程序,并且我已经固定了证书,以便该应用程序可以针对我的服务器进行验证。
问题:问题出现在证书过期的 1 年内,我需要让我的所有应用程序用户使用新的证书版本更新他们的应用程序,否则应用程序将无法正常工作。
预期结果: 我想更新固定在移动应用程序中的证书,而无需让用户更新到不同版本的应用程序。
对于要固定的内容,您有几个选择。根据您选择的哪一个,您可以做出不同的权衡。以下是一些典型的引脚:
固定证书本身
是的,您需要在证书到期时更改它。如果用户不经常更新,最安全但很快就会导致可用性问题。
固定证书的公钥
只要您的公钥保持不变,这允许您保持 pin 不变。您将相同的公钥与新证书一起使用。虽然理论上它的安全性稍差一些,但我会将其置于与前一个相同的安全级别。如果您丢失了私钥,则两种设置都需要应用程序更新。
固定中间证书
在这里,您再次有两个选择,固定证书本身或公钥。这些证书的有效期大大延长。因为 CA 可以创建您的应用程序信任的新证书,所以您会更加暴露自己。
固定根证书
同样,有两个选项:证书或公钥密码。这会将您绑定到 CA,这仍然会提高安全性;攻击者不能只使用任何受信任的根来欺骗您的应用程序。虽然这是最不安全的选项,但我认为它仍然比根本不固定要好得多。
要考虑的一件事是总是有多个引脚!如果您固定您的证书,请确保至少有两个并固定两个,这样如果您丢失了一个,您可以立即跳到另一个。如果您在信任链上固定其他内容,请确保固定所有 CA 可能的证书。
一般来说,我会选择固定 CA 的根证书的公钥。这平衡了安全性和维护性。考虑您的威胁模型并做出相应选择。