Вопрос

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

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

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

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

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

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

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

Это было полезно?

Решение

Я использую 2 ключевых магазина:

  • Развитие ключевого магазина, которое хранится в СКМ. Таким образом, сервер 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-плагин использовать codesigning профиль.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top