Jar Signing Strategie in Maven Projekte
-
02-10-2019 - |
Frage
Wir haben mehr Maven-Projekte, die auf dem Build-Server aufgebaut werden. In einigen Fällen wollen wir unsere Leistungen unterzeichnen. Wir verwenden Maven Plugin jarsigner , das zu tun.
Wir stellen uns die folgenden Fragen:
- Wo sollen wir speichern die Passwörter für die Anmeldung?
- Was ist eine gute Strategie für maven Projekte Unterzeichnung?
Wir wollen nicht unsere Schlüsselspeicher irgendwo auf unseren Servern setzen und hart codieren, einen Weg zu ihm. Also haben wir nur diese Schlüsselspeicher in einem Glas eingewickelt und es als ein Artefakt zu unserem inneren Maven-Repository hochgeladen. Wenn wir ein Maven-Projekt anmelden möchten, laden wir die Schlüsselspeicher Artefakt mit dem Maven Dependency Plugin und befestigen Unterzeichnung Ziel maven Build Lebenszyklus. Hier Ausfhrlicher Informationen.
Um die Passwörter für den Schlüsselspeicher zu verstecken, wir setzen sie in unser Unternehmen pom.xml
Datei. Wir denken auch über Passwörter in settings.xml
auf dem Build-Server zu speichern.
Wenn ein Projekt erstellt wird und auf einer Entwicklermaschine unterzeichnet, melden wir es mit selbst signierten Zertifikat. Aber als Projekt gebaut wird und auf einem Build-Server signiert, wir unterschreiben mit unserem „offiziellen“ Zertifikat.
Ist es eine gute Strategie?
Lösung
Ich verwende 2 Schlüsselspeicher:
- eine Entwicklung, die Schlüsselspeicher im SCM gespeichert ist. Der CI-Server kann somit die Schnappschüsse unterschreiben.
- eine Produktion Schlüsselspeicher mit einem realen Produktions Zertifikat von einer vertrauenswürdigen Zertifizierungsstelle ausgestellt.
Das Passwort Entwicklung Schlüsselspeicher ist in der pom.xml
. Hier ist ein Ausschnitt meiner 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>
In ~/.m2/settings.xml
ich ein codesgining
Profil definiert:
<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>
, wenn ich die reale Zertifikat signieren möchte ich mit den -Pcodesigning -Dkeystore.password=strongPassword
Parameter invoke maven. Ich baute auch die Maven-Release-Plugin die codesigning
verwenden Profil.
Eigentlich ist es möglich, das Passwort in settings.xml
so lange zu speichern, wie die Datei, die von niemandem lesbar ist, aber Sie.