首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SSL钉扎和证书到期

SSL钉扎和证书到期
EN

Stack Overflow用户
提问于 2016-01-02 15:32:38
回答 3查看 15.5K关注 0票数 30

这个问题涉及到客户端应用程序中使用SSL钉住web api和证书过期的问题。

场景

我拥有example.com,并且有一个子域,其中托管了api,如下所示:

我希望在 SSL 上使用,因此为子域创建了SSL。

在取得证书后,我:

  • 公共证书
  • 中级证书
  • 私钥

据我了解,我在我的that服务器上安装了这些证书。

然后,我希望我的客户端应用程序能够连接到api。为了减少对中间人的攻击,我希望使用SSL固定,这样客户端将只与我的api通信,而不是有人欺骗它。

为了在客户端应用程序中引脚,我有两个选择,要么是针对公共证书,要么是中间证书。

假设我实现了这个。

api.example.com上的证书过期时会发生什么?

据我所知,客户端应用程序将不再工作。

是否需要重新生成一套完整的公共/中间/私人项目?然后在应用程序中添加一个新的公共或中级证书?

问题

我仍然希望客户端应用程序能够工作,直到api.example.com上的证书被更新。当然,一个新的证书可以放在客户端应用程序中,但是像推出这样的事情需要时间。

我该怎么处理呢?

我读到谷歌每个月都会更新他们的证书,但是不知怎么的,它还是保持了相同的公钥:如何将证书的公钥钉在iOS上

如果这是可能的话,那么解决方案就是从服务器中提取公钥,并根据本地存储的公共key...but检查它是如何实现的?

谢谢

克里斯

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-01-02 16:36:46

注意:我更熟悉浏览器到服务器钉扎(HTTP公钥钉扎- HPKP),而不是应用到服务器钉扎,但我认为主体是相同的。在HPKP中,钉扎策略由服务器作为HTTP头提供,但是要理解这通常是内置到应用程序中的,而不是从HTTP响应中读取。因此,阅读下面的答案,考虑到所有这些:

钉扎通常是对钥匙,而不是证书,可以是多个级别。所以你有几个选择:

  1. 重用相同的密钥/crt来生成新的证书。一些(在我看来是正确的!)建议每次更新证书时生成一个新密钥,但使用钉扎时这很复杂。那么钉扎会不会助长诸如密钥重用这样的不良安全习惯呢?
  2. 在您的固定策略中有几个备份键,并在证书更新时旋转它们,丢弃您最老的钥匙,并添加一个新的键,有足够的时间和更新,永远不会短。就我个人而言,我更喜欢在证书更新的时候生成密钥,而不是有一些备份,这些备份可能或者可能已经被破坏,所以我也不是这个的一个特别的粉丝。你应该有多少备份?例如,如果你需要重新颁发证书,因为在更新方面的妥协,而且还搞砸了?所以2? 3? 100?
  3. 再往上钉。例如第一个中间或根CA证书。因此,任何新颁发的证书仍然是可信的(如果它是通过相同的证书路径发布的),其缺点是四倍:( i)您仍然容易错过由固定证书颁发的证书( IMHO并不是一个大规模的交易,因为您仍然大幅减少了攻击面,但仍然是一些人关心的问题);( ii)您不能保证客户端使用该中间证书,因为有时存在多个有效的路径。第二笔交易要大得多。您可能会认为,提供中间证书将保证这将被使用,但事实并非如此(大量的沙-1的例子)。(3)不能保证新证书将由相同的中间或根(特别是当技术发生变化,比如引入sha2)颁发,因此对我来说,这整个选择是不可能的,iv)它将您绑定到使用同一个证书提供商(也许不是什么大问题,但我喜欢行动的自由)。不确定应用程序是否支持这一特性,但浏览器当然支持。
  4. 提前更新,在策略缓存过期之前不要使用新密钥。例如,如果您有一年证书和30天固定策略,那么您可以在11个月后续订,将新密钥添加到策略中,然后等待30天,这样您就可以确保每个人都获得了新策略,或者至少旧策略已经过期,然后切换密钥和证书。依赖于短期策略,并且可能会浪费其中的一部分(在本例中至少30天),除非证书提供程序在旧策略过期后的第二天提前提供证书。对于应用程序来说,如果将策略硬编码到应用程序中,那么这可能涉及到推送更新所需的时间长度。

最终,因为证书确实需要更新,所以我不太喜欢钉扎。我不认为把的东西定期更新,半永久是正确的答案。甚至还有一些关于在浏览器中预装钉住策略的讨论,这让我不寒而栗。

钉扎提供了一个无赖CA不会为您的域名颁发证书的保证,但是与钉扎的麻烦相比,这真的有多大的可能性呢?比如证书透明度--甚至报告只有钉扎--可能是解决这个问题的更好的方法,即使他们实际上没有阻止这种攻击。

最后,本地安装的根(例如防病毒扫描器或公司代理),绕过钉扎检查(至少在浏览器上),这再次降低了它在我眼中的有效性。

因此,在使用钉扎之前仔细考虑,并确保您了解所有的后果。

票数 28
EN

Stack Overflow用户

发布于 2017-09-25 06:03:28

mozilla开发者网站建议将签署服务器证书的中间CA的证书固定在一起。

建议将引脚放在颁发服务器证书的CA的中间证书上,以方便证书的更新和轮换。

有关实现和测试公钥钉扎的更多信息,请参考实现和测试HTTP公钥钉扎(HPKP)

票数 4
EN

Stack Overflow用户

发布于 2020-07-29 04:54:44

您的应用程序可以在其引脚列表中存储多个证书。更改证书的程序是:

  • 在证书到期前的一段时间内,发布一个新版本的应用程序,在密码列表中添加替换证书,以及原始证书。
  • 当旧证书过期时,请在服务器上替换它--然后应用程序仍然可以工作,因为新证书已经在密码列表中了。
  • 在cert过期一段时间后,发布一个新版本的应用程序,删除旧的cert。

请记住,用户必须在旧证书到期前更新应用程序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34567550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档