【问题标题】:Jar Signing Strategy in Maven ProjectsMaven 项目中的 Jar 签名策略
【发布时间】:2011-04-05 15:12:50
【问题描述】:

我们有几个构建在构建服务器上的 maven 项目。在某些情况下,我们希望签署我们的可交付成果。我们使用Maven Jarsigner Plugin 来做到这一点。

我们面临以下问题:

  • 我们应该将签名密码存储在哪里?
  • 什么是签署 maven 项目的好策略?

我们不想将我们的密钥库放在我们的服务器上的某个地方并硬编码到它的路径。所以我们只是将这个密钥库包装在一个 jar 中,并将它作为一个工件上传到我们内部的 maven 存储库。当我们想要签署一个 maven 项目时,我们使用 Maven Dependency Plugin 下载密钥库工件并将签名目标附加到 maven 构建生命周期。 Here 是更详细的信息。

为了隐藏密钥库的密码,我们将它们放入我们公司的pom.xml 文件中。我们还考虑将密码存储在构建服务器上的settings.xml 中。

当一个项目在开发者机器上构建和签名时,我们使用自签名证书对其进行签名。但是,当项目在构建服务器上构建和签名时,我们会使用我们的“官方”证书对其进行签名。

这是一个好策略吗?

【问题讨论】:

    标签: maven maven-2 continuous-integration signing jarsigner


    【解决方案1】:

    我使用 2 个密钥库:

    • 存储在 SCM 中的开发密钥库。 CI 服务器因此可以对快照进行签名。
    • 具有由受信任的证书颁发机构颁发的真实生产证书的生产密钥库。

    开发密钥库密码在pom.xml 中。这是我的pom.xmlsn-p:

      <plugin>
        <artifactId>maven-jarsigner-plugin</artifactId>
        <version>1.2</version>
        <configuration>
          <storetype>${keystore.type}</storetype>
          <keystore>${keystore.path}</keystore>
          <alias>${keystore.alias}</alias>
          <storepass>${keystore.store.password}</storepass>
          <keypass>${keystore.key.password}</keypass>
        </configuration>
      </plugin>
      <!-- 
          ... rest of the pom.xml ...
      -->
      <properties>
        <keystore.path>cert/temp.keystore</keystore.path>
        <keystore.type>JKS</keystore.type>
        <keystore.alias>dev</keystore.alias>
        <keystore.password>dev_password</keystore.password>
        <keystore.store.password>${keystore.password}</keystore.store.password>
        <keystore.key.password>${keystore.password}</keystore.key.password>
      </properties>
    

    ~/.m2/settings.xml 中我定义了一个codesgining 配置文件:

    <settings>
      <profiles>
        <profile>
          <id>codesigning</id>
          <properties>
            <keystore.path>/opt/prod/prod.keystore</keystore.path> 
            <keystore.alias>prod</keystore.alias>
            <keystore.type>JKS</keystore.type>
            <keystore.store.password>${keystore.password}</keystore.store.password>
            <keystore.key.password>${keystore.password}</keystore.key.password>
          </properties>
        </profile>
      </profiles>
    </settings>
    

    当我想签署真正的证书时,我使用 -Pcodesigning -Dkeystore.password=strongPassword 参数调用 maven。我还将maven-release-plugin 配置为使用codesigning 配置文件。

    实际上可以将密码存储在settings.xml 中,只要文件可供除您以外的任何人读取。

    【讨论】:

    • 我们走了同样的路。除了生产密钥库密码存储在配置文件 settings.xml 中。构建服务器会自动调用该配置文件。
    • 另外请注意,由于此错误,您的别名不能包含单引号字符:jira.codehaus.org/browse/MJARSIGNER-11
    • 从 1.3 版开始,jar 签名插件支持 maven 加密。这使得将密码存储在 settings.xml 中相对安全。详情请查看maven.apache.org/guides/mini/guide-encryption.html
    • 结束设置标签缺少正斜杠。
    猜你喜欢
    • 2020-04-16
    • 1970-01-01
    • 1970-01-01
    • 2014-11-08
    • 2022-06-24
    • 2014-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多