Стратегия подписи Jar в проектах Maven

У нас есть несколько проектов maven, которые построены на сервере сборки. В некоторых случаях мы хотим подписать наши результаты. Для этого мы используем подключаемый модуль Maven Jarsigner.

Перед нами встают следующие вопросы:

  • Где хранить пароли для подписи?
  • Какова хорошая стратегия для подписания проектов maven?

Мы не хотим размещать хранилище ключей где-нибудь на наших серверах и жестко указывать путь к нему. Поэтому мы просто завернули это хранилище ключей в банку и загрузили его как артефакт в наш внутренний репозиторий maven. Когда мы хотим подписать проект maven, мы загружаем артефакт хранилища ключей с помощью подключаемого модуля зависимостей Maven и прикрепите цель подписания к жизненному циклу сборки maven. Подробнее здесь Информация.

Чтобы скрыть пароли от хранилища ключей, мы помещаем их в наш корпоративный pom.xml файл. Мы также думаем о хранении паролей в settings.xml на сервере сборки.

Когда проект создается и подписывается на машине разработчика, мы подписываем его самозаверяющим сертификатом. Но когда проект собран и подписан на сервере сборки, мы подписываем его нашим «официальным» сертификатом.

Это хорошая стратегия?


person Maksim Sorokin    schedule 30.08.2010    source источник


Ответы (1)


Я использую 2 хранилища ключей:

  • хранилище ключей разработки, которое хранится в SCM. Таким образом, CI-сервер может подписывать снимки.
  • производственное хранилище ключей с настоящим производственным сертификатом, выданным доверенным центром сертификации.

Пароль хранилища ключей разработки находится в 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>

когда я хочу подписать настоящий сертификат, я вызываю maven с параметрами -Pcodesigning -Dkeystore.password=strongPassword. Я также настроил maven-release-plugin для использования codesigning профиль.

На самом деле, можно сохранить пароль в settings.xml, пока файл не читается никем, кроме вас.

person Jcs    schedule 01.09.2010
comment
Мы пошли тем же путем. За исключением того, что пароли к производственному хранилищу ключей хранятся в файле settings.xml профиля. И этот профиль автоматически вызывается сервером сборки. - person Maksim Sorokin; 03.09.2010
comment
Также обратите внимание, что ваш псевдоним не может содержать символ одинарной кавычки из-за этой ошибки: jira.codehaus .org / browse / MJARSIGNER-11 - person Jason Thrasher; 21.12.2010
comment
Начиная с версии 1.3 плагин для подписи jar поддерживает шифрование maven. Это делает относительно безопасным хранение пароля в settings.xml. Ознакомьтесь с maven.apache.org/guides/mini/guide-encryption.html для подробностей. - person Rob; 31.01.2014
comment
В закрывающем теге настроек отсутствует косая черта. - person CodeBuddy; 13.06.2014