2015-07-03 3 views
1

У меня есть сборка maven, которая пытается использовать maven-gpg-plugin. Если у меня есть пароль открытого текста в settings.xml, все работает. Если я вставляю зашифрованный пароль, я получаю ошибку «плохой пароль». Подробности моих шагов ниже, но любые идеи о том, что я делаю неправильно? Кроме того, как побочный вопрос, я удивлен, что несколько запусков «mvn -ep» дают разные результаты. Я бы подумал, что способен расшифровать, тот же результат должен быть возвращен. Мне было бы любопытно объяснить это.Пытается зашифровать пароль gpg в settings.xml

Во-первых, я сгенерировал и распределил мою пару ключей, следуя 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> 

ответ

3

Я удивлен, что несколько прогонов mvn -ep дают разные результаты. Я бы подумал, что способен расшифровать, тот же результат должен быть возвращен. Мне было бы любопытно объяснить это.

Случайный initialization vector и padding добавляют схему шифрования, в результате чего недетерминированного cryptotexts. decryption(encryption(plain text)) снова детерминирован, так как пробег и вектор инициализации опущены.

IV и прокладка предотвращают несколько выбранных и известных атак обычного текста.

5

Из более близкого чтения выясняется, что только в разделе «servers» в settings.xml могут быть зашифрованы пароли. Однако, используя информацию от yet another apache webpage, мне удалось заставить мое приложение работать. Большинство из того, что я сделал, было правильным, и мне просто пришлось внести следующие изменения.

1) Я изменил свое pom.xml казни раздел теперь прочитать:

<executions> 
     <execution> 
     <goals> 
      <goal>sign</goal> 
     </goals> 
     <configuration> 
      <keyname>${gpg.keyname}</keyname> 
      <passphraseServerId>${gpg.keyname}</passphraseServerId> 
     </configuration> 
     </execution> 
    </executions> 

2) я получил свой открытый ключ GPG ("GPG --list-ключ | Grep^Pub", 8 HEX значное значение). Я перечислил это как A1234567 на следующем шаге.

3) Я обновил настройки.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> 

4) "МВН чистый GPG: знак" не работает, но "МВН чистой установки" делает. Мой реальный случай использования - заставить «mvn clean install» работать, поэтому я не стал это понимать. (Я бы поспорил, что это имеет какое-то отношение к этапам жизненного цикла.)

Смежные вопросы