代码签名证书的分发——最佳实践?
注意:在代码签名和软件证书方面,我绝对是新手。我尝试搜索和阅读有关如何解决我们特定问题的信息,但在网上找不到任何类似的东西。
到目前为止,代码签名对我们来说不是问题,因为我们在基于 Windows 的嵌入式系统上工作,但我们提供交钥匙解决方案。然后我们的防病毒软件(这是强制性的!)不喜欢我们的几个二进制文件(在所有项目中),而且它不喜欢的东西似乎没有真正的规律。经过数周与防病毒软件供应商的交谈,我们发现我们的解决方案是,我们的开发人员有一个文件夹排除在扫描之外(用于构建软件),并且我们实施代码签名,同时将我们的证书列入防病毒应用程序的白名单(用于有限的内部分发和测试我们的软件)。
因此,现在我们将使用代码签名,不是为了安全,而只是为了允许我们工作。防病毒供应商告诉我们,自签名证书不能列入白名单 - 尽管我们认为这是有道理的。
我们的开发人员遍布全球五个地方,我们正在寻找最简单的解决方案,以确保他们都能执行代码签名(否则他们将无法测试他们构建的代码)。
我们希望某种形式的证书分发是可能的,甚至可以通过使用 Active Directory?
在不久的将来,我们将需要进行代码签名来实际验证我们的软件安全性,因此如果我们使用分布式证书,那么它是否仍然可以“安全”地用于验证?我想不是 - 这让我想知道我们是否可以拥有两个证书,并使用两者进行签名?然后分发一个证书,并允许我们构建和测试,然后使用另一个证书进行实际发布。
我们可能会采用 Microsoft Authenticode 证书 - 除非有充分的理由不这样做。
然而,据我所知,微软自 2017 年 2 月 1 日起就要求在代码签名过程中使用硬件安全模块 (HSM) - 我们希望这并不意味着每个开发人员都需要在他们的计算机中安装自己的 HSM!
总结一下我的问题:
- 对于 Windows 二进制文件的代码签名,是否需要 HSM 证书,或者是否有其他更好的替代方案(在这种情况下)。
- 有哪些选项可以在开发人员之间分发证书?使用 AD 会很好,因为它已经在全球范围内实施。
- 在分布式设置中,是否可以将签名证书保密?
- 双重签名是否可以提高安全性?(一次签名是为了在测试时击败防病毒软件,另一次签名是为了发布软件的实际安全性)
- 您是否有更好的解决方案供我们考虑?
提前致谢。
答案1
对于 Windows 二进制文件的代码签名,是否需要 HSM 证书,或者是否有其他更好的替代方案(在这种情况下)。
硬件安全模块 (HSM) 只是用于执行密钥管理、密钥交换、加密、验证和保管等加密操作的硬件工具。没有所谓的 HSM 证书,但有由 HSM 生成的证书。
我自己没有使用过 HSM,但我对由此类硬件生成的密钥持谨慎态度。它们可能适合内部使用,但对于外部使用,您必须使用由知名证书颁发机构 (CA) 创建的证书。
让我们加密是广泛使用的免费 CA。在我的组织中,我们倾向于付费使用知名 CA 来分发我们的软件。
有哪些选项可以在开发人员之间分发证书?使用 AD 会很好,因为它已经在全球范围内实施。
您可以使用 AD,但对于少数程序员来说,这可能有点过头了。我只会将其用于开发证书,同时确保发布证书非常安全,也许它本身位于加密容器中,并且仅由一个受信任的人(可能还有一名备份人员)进行完全且非共享的控制。
更多信息请参阅:
在分布式设置中,是否可以将签名证书保密?
不,秘密一旦分享,就不再是秘密了。请像上面一样确保分发证书的安全。
一旦发生泄露,您的证书将被所有浏览器和防病毒产品列入黑名单,您的所有分布式软件将无法使用。请像保护您的生命一样保护证书安全(至少是您的商业生命)。
双重签名是否可以提高安全性?(一次签名是为了在测试时击败防病毒软件,另一次签名是为了发布软件的实际安全性)
当然,我认为这是你唯一的可能。开发证书可能会泄露,但你不会在意,因为泄露证书的人也是能够泄露未签名模块的人。
您是否有更好的解决方案供我们考虑?
看来你对这个问题思考得很深入。如果你是我,我也会选择这种双证书解决方案。