我们应该为外部 https 服务处理证书/公钥固定吗?

Posted

技术标签:

【中文标题】我们应该为外部 https 服务处理证书/公钥固定吗?【英文标题】:Should we handle Certificate/Public Key pinning for external https services? 【发布时间】:2016-07-20 19:25:34 【问题描述】:

我正在编写一个 android 应用程序,它将向外部 HTTPS 静态资源发出一些 http 请求 - https://external_server/resources(我无法控制外部服务器)

我正在考虑为 external_server 服务器处理证书/公钥固定。

我想到一个问题:如果 external_server 更改 SSL 证书/公钥怎么办?如果证书/公钥更改。我必须重新部署我的应用程序吗?

有什么想法吗?谢谢!

【问题讨论】:

【参考方案1】:

您不应将证书固定用于您不拥有或控制的服务/证书,因为当服务更新其证书时您的应用程序将很快损坏,您必须*快速*更新您在所有客户端上的应用程序。此外,您不能依赖特定的颁发者,因为所有者可能会选择更改其 SSL 证书提供者。

在您的情况下,您应该依赖此类服务的常规 SSL 证书验证例程。

【讨论】:

谢谢@CryptoGuy。您有任何通用 SSL 证书验证程序的资源吗? 这取决于您使用的平台。许多主要平台都有库来执行证书验证,您应该在连接时使用这些库来验证您是否连接到正确的资源并且您的连接是否安全。

以上是关于我们应该为外部 https 服务处理证书/公钥固定吗?的主要内容,如果未能解决你的问题,请参考以下文章

HTTPS:证书

nginx配置自签名https

如何为公钥固定(SSL 固定)生成 iOS 证书

如何获取颁发者证书的指纹或公钥?

证书固定 - 仅公钥?

HTTPS--握手,证书及秘钥协商