这个问题涉及到客户端应用程序中使用SSL钉住web api和证书过期的问题。
场景
我拥有example.com,并且有一个子域,其中托管了api,如下所示:
我希望在 SSL 上使用,因此为子域创建了SSL。
在取得证书后,我:
据我了解,我在我的that服务器上安装了这些证书。
然后,我希望我的客户端应用程序能够连接到api。为了减少对中间人的攻击,我希望使用SSL固定,这样客户端将只与我的api通信,而不是有人欺骗它。
为了在客户端应用程序中引脚,我有两个选择,要么是针对公共证书,要么是中间证书。
假设我实现了这个。
当api.example.com上的证书过期时会发生什么?
据我所知,客户端应用程序将不再工作。
是否需要重新生成一套完整的公共/中间/私人项目?然后在应用程序中添加一个新的公共或中级证书?
问题
我仍然希望客户端应用程序能够工作,直到api.example.com上的证书被更新。当然,一个新的证书可以放在客户端应用程序中,但是像推出这样的事情需要时间。
我该怎么处理呢?
我读到谷歌每个月都会更新他们的证书,但是不知怎么的,它还是保持了相同的公钥:如何将证书的公钥钉在iOS上
如果这是可能的话,那么解决方案就是从服务器中提取公钥,并根据本地存储的公共key...but检查它是如何实现的?
谢谢
克里斯
发布于 2016-01-02 16:36:46
注意:我更熟悉浏览器到服务器钉扎(HTTP公钥钉扎- HPKP),而不是应用到服务器钉扎,但我认为主体是相同的。在HPKP中,钉扎策略由服务器作为HTTP头提供,但是要理解这通常是内置到应用程序中的,而不是从HTTP响应中读取。因此,阅读下面的答案,考虑到所有这些:
钉扎通常是对钥匙,而不是证书,可以是多个级别。所以你有几个选择:
最终,因为证书确实需要更新,所以我不太喜欢钉扎。我不认为把是的东西定期更新,半永久是正确的答案。甚至还有一些关于在浏览器中预装钉住策略的讨论,这让我不寒而栗。
钉扎提供了一个无赖CA不会为您的域名颁发证书的保证,但是与钉扎的麻烦相比,这真的有多大的可能性呢?比如证书透明度--甚至报告只有钉扎--可能是解决这个问题的更好的方法,即使他们实际上没有阻止这种攻击。
最后,本地安装的根(例如防病毒扫描器或公司代理),绕过钉扎检查(至少在浏览器上),这再次降低了它在我眼中的有效性。
因此,在使用钉扎之前仔细考虑,并确保您了解所有的后果。
发布于 2017-09-25 06:03:28
mozilla开发者网站建议将签署服务器证书的中间CA的证书固定在一起。
建议将引脚放在颁发服务器证书的CA的中间证书上,以方便证书的更新和轮换。
有关实现和测试公钥钉扎的更多信息,请参考实现和测试HTTP公钥钉扎(HPKP)
发布于 2020-07-29 04:54:44
您的应用程序可以在其引脚列表中存储多个证书。更改证书的程序是:
请记住,用户必须在旧证书到期前更新应用程序。
https://stackoverflow.com/questions/34567550
复制相似问题