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