我正在研究一种客户端架构,我们计划将客户端固定在服务器上。我的服务器叶证书可能会在产品的整个生命周期中发生变化,这就是为什么我们需要一种刷新机制来支持具有嵌入式证书的较早发行的客户端的原因。
这是我计划的两种方法:
计划使用一组备份的公钥/私钥对,私钥与我们一起保存在HSM中。公钥嵌入在客户端中。
方法1:
即将到期
发布叶子证书密码集,该密码集可以在公共互联网上下载。
在客户端上,下载带有固定的根证书的叶子插针集。
如果下载成功,请使用此新叶子引脚集并将其固定到所有后续HTTP调用中。
如果叶子+根已过期
如果出于某些原因,root用户也已过期,或者root用户已更改为新的提供程序。
在客户端上,下载带有根证书的叶针->由于根已过期而失败。
刷新根目录,下载由备份私钥签名的新的根目录密码集。这是未固定的呼叫。
使用客户端嵌入式备份公钥下载验证签名后。
如果成功,请使用此根引脚集,将其固定以下载叶子。 使用下载的叶子并将其固定在以后的http调用中。
方法2:
使上述方法更加合理,并完全避免根针设置。
使用备份专用密钥对叶子密码集进行签名,并保留可以在公共Internet上下载的密码集。
在刷新后将其下载到客户端上,然后使用未固定的呼叫进行下载。
下载成功后,使用备份发布密钥进行验证,并将其用于所有http调用。
我对上述2种方法的疑问是,方法2 是否留有安全漏洞利用的空间,总的来说,我觉得必须处理较少数量的人工制品是可行的方法,但是我无论如何都不想破坏安全性。