我有一个maven构建试图使用maven-gpg-plugin。如果我在settings.xml中有明文密码,那么事情就可以了。如果我粘贴加密密码,我会收到“密码错误”错误。我的步骤的详细信息如下,但任何关于我做错的想法?另外,作为一个附带问题,我很惊讶多次运行的“mvn -ep”给出了不同的结果。我本以为能够解密,应该返回相同的结果。我很想解释这个。
首先,我按照these instructions from sonotype生成并分发了我的密钥对。接下来,我使用我的密码更新了〜/ .m2 / settings.xml文件,explained by apache。最后,我建立了。它很棒。加密的时间。
在encryption advice from apache之后,我创建了一个(maven)主密码,将其放入settings-security.xml,加密gpg密码,并将其放入settings.xml中。 (我已经尝试过各种方式,包括在每个阶段使用相同的密码。)现在,当我尝试构建时,我得到错误:
gpg: no default secret key: Bad passphrase
gpg: signing failed: Bad passphrase
如果我在settings.xml中将密码更改回明文,那么事情就会重新开始。如果我将“-X”添加到我的maven构建中,我发现它正在查找settings-security.xml。 (实际上,如果我删除文件,我只能看到它找不到它。)
gpg --gen-key
<choose defaults of RSA/RSA, 2048, and no expiration. Enter in values for name and email.>
gpg --keyserver hkp://pool.sks-keyservers.net --send-keys <key>
mvn clean gpg:sign
mvn -emp <password>
<put encrypted password into ~/.m2/settings-security.xml>
mvn -ep <password>
<put encrypted password into ~/.m2/settings.xml>
mvn clean gpg:sign
的pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>example</groupId>
<artifactId>example.test</artifactId>
<version>develop-SNAPSHOT</version>
<packaging>pom</packaging>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
的settings.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<settings>
<profiles>
<profile>
<id>ossrh</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<gpg.executable>gpg</gpg.executable>
<gpg.passphrase>{pQ...lV}</gpg.passphrase>
</properties>
</profile>
</profiles>
</settings>
设置-security.xml文件:
<settingsSecurity>
<master>{KC...jm}</master>
</settingsSecurity>
答案 0 :(得分:6)
从仔细阅读开始,似乎只有settings.xml中的“servers”部分才能有加密密码。但是,使用来自yet another apache webpage的信息,我能够使用上述用例。我做的大部分内容都是正确的,我只需做出以下修改。
1)我将我的pom.xml执行部分改为现在读取:
<p>
2)我得到了我的公共gpg密钥(“gpg --list-key | grep ^ pub”,8个HEX数字值)。我将在下一步中将其列为A1234567。
3)我更新了settings.xml,如下所示:
<executions>
<execution>
<goals>
<goal>sign</goal>
</goals>
<configuration>
<keyname>${gpg.keyname}</keyname>
<passphraseServerId>${gpg.keyname}</passphraseServerId>
</configuration>
</execution>
</executions>
4)“mvn clean gpg:sign”不起作用,但“mvn clean install”确实有效。我真正的用例是让“mvn clean install”工作,所以我没有费心去解决这个问题。 (我敢打赌它与生命周期阶段有关。)
答案 1 :(得分:4)
我很惊讶多次运行
mvn -ep
给出了不同的结果。我本以为能够解密,应该返回相同的结果。我很想解释这个。
加密方案添加了随机initialization vector和padding,从而产生了非确定性的cryptotexts。 decryption(encryption(plain text))
再次是确定性的,因为省略了填充和初始化向量。
IV和padding阻止了几种选择和已知的纯文本攻击。
答案 2 :(得分:0)
要在Maven settings.xml
中使用加密的GPG密码,必须将其放入server
作为服务器ID的gpg.passphrase
块中。这很奇怪,但实际上是文档化的方法,埋藏在这里的文档中:https://maven.apache.org/plugins/maven-gpg-plugin/usage.html
例如,一旦您获得了加密密码,即{asdf1234}
,就可以像这样设置它:
<server>
<id>gpg.passphrase</id>
<passphrase>{asdf1234}</passphrase>
</server>
然后,当您运行调用maven-gpg-plugin
的Maven命令时,它将自动从那里获取密码。