Maven 正在尝试在settings.xml中加密gpg密码
我有一个maven构建,它试图利用maven gpg插件。如果我在settings.xml中有一个明文密码,那么一切正常。如果粘贴加密密码,则会出现“坏密码”错误。下面是我的详细步骤,但你知道我做错了什么吗?另外,作为一个附带问题,我很惊讶多次运行“mvn-ep”会得到不同的结果。我本以为能够解密,同样的结果应该会被返回。我很想得到一个解释 首先,我生成并分发了我的密钥对,如下所示。接下来,我用密码更新了~/.m2/settings.xml文件,如下所示。最后,我建立了。它工作得很好。是时候加密了 接下来,我创建了一个(maven)主密码,将其放入settings-security.xml中,对gpg密码进行加密,然后将其放入settings.xml中。(我以各种方式尝试过,包括在每个阶段都使用相同的密码。)现在,当我尝试构建时,会出现以下错误:Maven 正在尝试在settings.xml中加密gpg密码,maven,gnupg,password-encryption,Maven,Gnupg,Password Encryption,我有一个maven构建,它试图利用maven gpg插件。如果我在settings.xml中有一个明文密码,那么一切正常。如果粘贴加密密码,则会出现“坏密码”错误。下面是我的详细步骤,但你知道我做错了什么吗?另外,作为一个附带问题,我很惊讶多次运行“mvn-ep”会得到不同的结果。我本以为能够解密,同样的结果应该会被返回。我很想得到一个解释 首先,我生成并分发了我的密钥对,如下所示。接下来,我用密码更新了~/.m2/settings.xml文件,如下所示。最后,我建立了。它工作得很好。是时候加密
gpg: no default secret key: Bad passphrase
gpg: signing failed: Bad passphrase
如果我将settings.xml中的密码改回明文,事情就会重新开始。如果我在maven构建中添加“-X”,我会看到它正在查找settings-security.xml。(实际上,如果我删除文件,我只能在它找不到的时候才能看到。)
gpg--gen键
gpg——密钥服务器hkp://pool.sks-keyservers.net --发送密钥
mvn清洁gpg:标志
mvn-emp
mvn-ep
mvn清洁gpg:标志
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>
4.0.0
例子
例如:测试
开发快照
聚甲醛
org.apache.maven.plugins
maven gpg插件
1.6
签名
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>
ossrh
真的
gpg
{pQ…lV}
settings-security.xml:
<settingsSecurity>
<master>{KC...jm}</master>
</settingsSecurity>
{KC…jm}
我很惊讶多次运行mvn-ep
会得到不同的结果。我本以为能够解密,同样的结果应该会被返回。我很想得到一个解释
加密方案添加了一个随机和,从而产生非确定性加密文本<代码>解密(加密(纯文本))还是确定性的,因为省略了填充和初始化向量
IV和填充可以防止若干选定的和已知的纯文本攻击。仔细阅读,似乎只有settings.xml中的“servers”部分可以使用加密密码。然而,使用来自的信息,我能够让我的上述用例工作。我所做的大部分是正确的,我只需要做以下修改 1) 我将pom.xml执行部分改为:
<executions>
<execution>
<goals>
<goal>sign</goal>
</goals>
<configuration>
<keyname>${gpg.keyname}</keyname>
<passphraseServerId>${gpg.keyname}</passphraseServerId>
</configuration>
</execution>
</executions>
签名
${gpg.keyname}
${gpg.keyname}
2) 我得到了我的公共gpg密钥(“gpg——列表密钥| grep^pub”,8个十六进制数字的值)。我将在下一步中将其列为A1234567
3) 我更新了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.keyname>A1234567</gpg.keyname>
</properties>
</profile>
</profiles>
<servers>
<server>
<id>A1234567</id>
<passphrase>{pQ...lV}</passphrase>
</server>
</servers>
</settings>
ossrh
真的
gpg
A1234567
A1234567
{pQ…lV}
4) “mvn clean gpg:sign”不起作用,但“mvn clean install”起作用。我真正的用例是让“mvn干净安装”工作,所以我没有费心去弄清楚这一点。(我敢打赌这与生命周期阶段有关。)要在Maven
settings.xml
中使用加密的GPG密码,您必须将其放入服务器块中,并将GPG.passphrase
作为服务器ID。这很奇怪,但实际上是文档中隐藏的方法:
例如,一旦您拥有加密密码,即{asdf1234}
,请按如下方式进行设置:
<server>
<id>gpg.passphrase</id>
<passphrase>{asdf1234}</passphrase>
</server>
gpg.passphrase
{asdf1234}
然后,当您运行调用Maven gpg插件的Maven命令时,它将自动从那里获取密码短语
<server>
<id>gpg.passphrase</id>
<passphrase>{asdf1234}</passphrase>
</server>