尝试在settings.xml中加密gpg密码

use*_*496 2 gnupg password-encryption maven

我有一个maven构建,试图利用maven-gpg-plugin.如果我在settings.xml中有明文密码,那么事情就可以了.如果我粘贴加密密码,我会收到"密码错误"错误.我的步骤的详细信息如下,但任何关于我做错的想法?另外,作为一个附带问题,我很惊讶多次运行的"mvn -ep"给出了不同的结果.我本以为能够解密,应该返回相同的结果.我很好奇为此做出解释.

首先,我按照sonotype的这些说明生成并分发了我的密钥对.接下来,我使用我的密码更新了〜/ .m2/settings.xml文件,如apache所述.最后,我建立了.它很棒.加密时间.

根据apache加密建议,我创建了一个(maven)主密码,将其放入settings-security.xml,加密gpg密码,并将其放入settings.xml.(我已经尝试过各种方式,包括在每个阶段使用相同的密码.)现在,当我尝试构建时,我得到错误:

gpg: no default secret key: Bad passphrase
gpg: signing failed: Bad passphrase
Run Code Online (Sandbox Code Playgroud)

如果我在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
Run Code Online (Sandbox Code Playgroud)

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

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

设置-security.xml文件:

<settingsSecurity>
<master>{KC...jm}</master>
</settingsSecurity>
Run Code Online (Sandbox Code Playgroud)

use*_*496 6

从更近的阅读,似乎只有settings.xml中的"服务器"部分可以具有加密密码.但是,使用来自另一个apache网页的信息,我能够使用上面的用例.我做的大部分内容都是正确的,我只需进行以下修改即可.

1)我将我的pom.xml执行部分更改为现在读取:

    <executions>
      <execution>
        <goals>
          <goal>sign</goal>
        </goals>
        <configuration>
          <keyname>${gpg.keyname}</keyname>
          <passphraseServerId>${gpg.keyname}</passphraseServerId>
        </configuration>
      </execution>
    </executions>
Run Code Online (Sandbox Code Playgroud)

2)我得到了我的公共gpg密钥("gpg --list-key | grep ^ pub",8个HEX数字值).我将在下一步中将其列为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>
Run Code Online (Sandbox Code Playgroud)

4)"mvn clean gpg:sign"不起作用,但"mvn clean install"确实有效.我真正的用例是让"mvn clean install"工作,所以我没有费心去解决这个问题.(我敢打赌它与生命周期阶段有关.)


Jen*_*rat 5

我很惊讶多次运行mvn -ep给出不同的结果。我原以为能够解密,应该返回相同的结果。我很好奇对此的解释。

加密方案添加了随机初始化向量填充,导致非确定性密文。decryption(encryption(plain text))再次是确定性的,因为省略了填充和初始化向量。

IV 和填充可以防止几种选择的和已知的纯文本攻击。