Стратегия подписания банок в проектах Maven - PullRequest
23 голосов
/ 30 августа 2010

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

У нас возникают следующие вопросы:

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

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

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

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

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

1 Ответ

30 голосов
/ 01 сентября 2010

Я использую 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, пока файл не доступен для чтения никем.но ты.

...