2010-08-30 7 views
23

Abbiamo diversi progetti di maven, che sono costruiti sul server di build. In alcuni casi vogliamo firmare i nostri risultati. Usiamo Maven Jarsigner Plugin per farlo.Strategia di firma di Jar in Maven Projects

siamo di fronte alla seguenti domande:

  • Dove dovremmo memorizzare le password per la firma?
  • Qual è una buona strategia per la firma di progetti Maven?

Non vogliamo mettere il nostro keystore da qualche parte sui nostri server e con un percorso hardcode. Abbiamo quindi avvolto questo keystore in un barattolo e lo abbiamo caricato come un artefatto nel nostro repository maven interno. Quando vogliamo firmare un progetto di maven, scarichiamo l'artefatto del keystore utilizzando lo Maven Dependency Plugin e alleghiamo l'obiettivo di firma al ciclo di vita del build di Maven. Here è informazioni più dettagliate.

Per nascondere le password per il keystore, le inseriamo nel nostro file aziendale pom.xml. Pensiamo anche a memorizzare le password in settings.xml sul server di build.

Quando un progetto viene creato e firmato su una macchina per sviluppatori, lo firmiamo con un certificato autofirmato. Ma quando il progetto viene creato e firmato su un server di build, lo firmiamo con il nostro certificato "ufficiale".

È una buona strategia?

risposta

30

Io uso di chiavi 2:

  • un archivio di chiavi di sviluppo che viene memorizzato nel SCM. Il server CI può quindi firmare le istantanee.
  • un keystore di produzione con un certificato di produzione reale rilasciato da un'autorità di certificazione attendibile.

La password del keystore di sviluppo è nello pom.xml. Ecco un frammento del mio 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 ho definito un profilo 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> 

quando voglio firmare il vero e proprio certificato di invoco Maven con i parametri -Pcodesigning -Dkeystore.password=strongPassword. Ho anche configurato il maven-release-plugin per utilizzare il profilo codesigning.

In realtà è possibile memorizzare la password in settings.xml finché il file non è leggibile da nessuno tranne te.

+0

Siamo andati allo stesso modo. Tranne che le password del keystore di produzione sono memorizzate in profile settings.xml. E quel profilo è invocato automaticamente dal build server. –

+0

Inoltre, il tuo alias non può contenere un carattere a virgoletta singola a causa di questo errore: http://jira.codehaus.org/browse/MJARSIGNER-11 –

+1

A partire dalla versione 1.3, il plug-in firmatario jar supporta la crittografia Maven. Ciò rende relativamente sicuro memorizzare la password in settings.xml. Controlla http://maven.apache.org/guides/mini/guide-encryption.html per i dettagli. – Rob