我们有几个maven项目,它们构建在构建服务器上。在某些情况下,我们希望签署我们的可交付成果。我们使用Maven Jarsigner Plugin来做到这一点。
我们面临以下问题:
我们不希望将我们的密钥库放在我们服务器上的某个位置并对其进行硬编码。所以我们只是将这个密钥库包装在一个jar中,并将其作为工件上传到我们的内部maven存储库。当我们想要签署maven项目时,我们使用Maven Dependency Plugin下载密钥库工件并将签名目标附加到maven构建生命周期。 Here是更详细的信息。
为了隐藏密钥库的密码,我们将它们放入公司的pom.xml
文件中。我们还考虑将密码存储在构建服务器上的settings.xml
中。
在开发人员计算机上构建并签署项目时,我们使用自签名证书对其进行签名。但是当在构建服务器上构建和签署项目时,我们使用“官方”证书对其进行签名。
这是一个好策略吗?
答案 0 :(得分:30)
我使用2个密钥库:
开发密钥库密码位于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
中,只要该文件除了您之外没有人可读。