java - 如何使用 Maven 签署多个 JNLP 应用程序

标签 java maven jnlp

我们在我的业务中使用 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/

相关文章:

Maven 插件 java.library.path

java - JNLP 错误,显示的代码与我的 JNLP 中的不同

java web start 应用程序无法在 java7u45 上启动

java - 为什么我的maven模块在项目中找不到另一个模块?

java - 配置 Maven 以创建包含 POM XML 中定义的所有依赖项的存档文件

java - Jersey Inject Weld managed bean into ConstraintValidator

在 Google App Engine 标准上运行 Spring Boot 应用程序时出现 javax.el.E​​xpressionFactory 错误

java - 安全异常 : MalformedURLException: unknown protocol: socket during opening JNLP file

使用特定对象引用的 Java 同步块(synchronized block)

java - 访客模式解决方案 : few visitors have same interface but should work with different objects