Maven项目中的Jar签名策略

Mak*_*kin 23 continuous-integration maven-2 signing jarsigner maven

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

我们面临以下问题:

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

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

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

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

这是一个好策略吗?

Jcs*_*Jcs 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>
Run Code Online (Sandbox Code Playgroud)

~/.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>
Run Code Online (Sandbox Code Playgroud)

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

实际上settings.xml,只要文件除了你之外没有人可读,就可以存储密码.

  • 结束设置标记缺少正斜杠. (3认同)