Стратегия подписания JAR в проектах Maven
-
02-10-2019 - |
Вопрос
У нас есть несколько проектов 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
Пока файл читается, кроме того, кроме вас.