我们将JNLP应用程序用于我的业务。实际使用需要为每个版本手动签名罐子。这肯定会导致拥有不同的证书,过期的证书等等。
我们POC让maven自动使用Maven Jarsigner插件签署一个应用程序。
现在,将这种流程工业化的最佳方法是什么?我希望在所有应用程序之间共享证书,而不是每次都重新创建一个。
特别是:
拥有一堆企业应用程序的证书是正确的,还是我认为每个应用程序都有一个证书?
我们可以设想将证书存储为依赖关系(在业务回购下)并且在构建时获取开发和发布证书吗?说dev版本用于本地构建和发布证书以供发布。
这种用途的缺点是什么?
还有其他/更好的解决方案吗?
感谢您的回答。
答案 0 :(得分:0)
有很多方法可以解决这个问题,所以我只能分享我对这个问题的想法。
a)我会假设不同的版本会在不同的分支上,所以本质上我们一次只处理一个版本
b)然后我假设每个版本,每个环境都有不同的证书。可以使用maven配置文件(http://maven.apache.org/guides/introduction/introduction-to-profiles.html)处理每个环境部分,所以......
是否拥有多个证书或单个证书是首选问题。由于它提供了任何给定用户与给定应用程序之间的信任级别,因此它本质上是对风险与可维护性的判断。 风险,因为具有相同证书的多个应用程序可以提供更高的曝光率,也可以提供恶意曝光,任何违反一个的应用程序都是违反所有规定的。因此,证书保护可能很重要。所有应用程序遵循相同的更新周期的可维护性,并且更改为1意味着对所有应用程序进行更改。
因此,耦合度更高,风险更高,维护更简单。如果您是全球企业,Acme Inc的风险可能高于您是本地企业Icme Inc.的风险,是否会是其他人的数据或金钱这可能会邀请最安全的选择。
我认为没有理由不能存储证书。无论是在存储库还是其他一些安全的回购中,或只是躺在周围。更有趣的可能是私钥,您可以将其指定为属性,并将dev命令绑定到dev配置文件并释放释放的配置文件,因此您必须在命令行上提供它们。
假设你使用maven jarsigner插件,你可以拥有$ {my.keypass}和$ {my.keystore},然后设置两个属性的dev配置文件,以及只设置keystore的发布配置文件。
上次我以类似的方式使用证书: - 一组单独的组件 - 在单个存储库中 - 可以构建为一个完整的实体。
因此,分享证书很容易。除最终产品之外的所有证书都在源代码存储库中。发布的证书位于安全的服务器上,我们有一个只有少数人可以访问的批处理。
至于安全妥协..我认为我们没有遇到过,但我们已做好准备:)