网络安全配置文件中的固定公钥是不是受信任,即使颁发它的 CA 不是?

Posted

技术标签:

【中文标题】网络安全配置文件中的固定公钥是不是受信任,即使颁发它的 CA 不是?【英文标题】:Are pinned public keys in the Network Security Configuration file trusted even if the CA that issued it is not?网络安全配置文件中的固定公钥是否受信任,即使颁发它的 CA 不是? 【发布时间】:2019-04-25 18:24:53 【问题描述】:

假设我有一个应用程序将一些敏感信息传输到我的服务器。我想降低对我的用户进行中间人攻击的风险,因此我将我的服务器使用的密钥固定在Network Security Configuration file 中。

但是,假设我的应用程序的用户不信任颁发我们证书的 CA,并将其从受信任的 CA 列表中删除,或者操作系统更新删除了 CA,因为它被发现表现不佳.

理想情况下,在这种情况下,我希望我的应用拒绝连接到服务器。如果服务器提供的证书使用 pinset AND 中的密钥签名,我只希望它建立连接,该密钥来自操作系统/用户信任的 CA。在网络安全配置文件中固定密钥是否可以实现这一点?或者,无论如何,固定的密钥都值得信任吗?

【问题讨论】:

【参考方案1】:

HPKP 指示浏览器在您指定的时间段内存储服务器证书的签名。使用 HPKP 并不能代替标准的证书验证。

在您的方案中,浏览器中固定的 PK 对于您的服务器提供的服务器证书有效,但由于 CA 不受信任,实际证书验证将失败。

【讨论】:

我想澄清一下 - 这不是浏览器(根据典型定义),而是一个移动应用程序,与网络相比,密钥/证书固定机制存在一些差异开发人员可能习惯了。您的知识是否专门针对 android 应用程序?如果是这样,你能指出一些关于它的文档吗? @duggulous 你是对的,标准网络浏览器和移动应用程序之间存在一些差异。我有标准 Web 开发和 android 应用程序开发的经验。我在 android 开发方面的经验已经有几年了,但是将 HPKP 与不受信任的自签名证书一起使用,就像您不受信任的 CA 示例一样,不起作用。不幸的是,我找不到很多关于这个主题的文档。

以上是关于网络安全配置文件中的固定公钥是不是受信任,即使颁发它的 CA 不是?的主要内容,如果未能解决你的问题,请参考以下文章

AFNetworking 受信任证书的 pin 公钥

使用组策略推送exchange自签名证书

如何将浏览器中不受信任的证书手动设置为信任

导入证书网站添加信任,vsphere上传文件失败

当颁发者不是 X509Store 受信任的根时使用证书,以使用 Microsoft .NET 框架进行客户端身份验证

将新的受信任 CA 添加到 Azure 上的证书颁发机构证书存储区