Maven项目中的Jar签名策略

时间:2010-08-30 06:50:51

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

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

我们面临以下问题:

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

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

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

在开发人员计算机上构建并签署项目时,我们使用自签名证书对其进行签名。但是当在构建服务器上构建和签署项目时,我们使用“官方”证书对其进行签名。

这是一个好策略吗?

1 个答案:

答案 0 :(得分:30)

我使用2个密钥库:

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

开发密钥库密码位于pom.xml。以下是我的pom.xml

的摘要
  <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中,只要该文件除了您之外没有人可读。