Maven项目中的罐子签名策略
-
02-10-2019 - |
题
我们有几个Maven项目,这些项目是在构建服务器上构建的。在某些情况下,我们想签署我们的可交付成果。我们用 Maven Jarsigner插件 要做到这一点。
我们面临以下问题:
- 我们应该在哪里存储签名密码?
- 签署Maven项目的好策略是什么?
我们不想将密钥库放在服务器上的某个位置,也不想将其进行硬编码。因此,我们只是将这个密钥库包裹在一个罐子里,然后将其作为工件上传到我们内部的Maven存储库中。当我们想签署一个Maven项目时,我们使用使用 Maven依赖插件 并将签名目标附加到Maven建立生命周期。 这里 是更详细的信息。
为了隐藏密钥库的密码,我们将其放入公司中 pom.xml
文件。我们还考虑将密码存储在 settings.xml
在构建服务器上。
当项目在开发人员机器上构建和签名时,我们将使用自签名证书签名。但是,当项目在构建服务器上构建和签名时,我们将使用“官方”证书签名。
这是一个好策略吗?
解决方案
我使用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-release-plugin 使用 codesigning
轮廓。
实际上可以将密码存储在 settings.xml
只要您的文件是可以读取的。
不隶属于 StackOverflow