Подтвердить что ты не робот

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

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

Мы сталкиваемся со следующими вопросами:

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

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

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

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

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

4b9b3361

Ответ 1

Я использую 2 keystores:

  • хранилище ключей разработки, которое хранится в 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, пока файл не доступен для чтения никому, кроме вас.