2010-08-30 36 views
23

Tenemos varios proyectos maven, que se basan en el servidor de compilación. En algunos casos, queremos firmar nuestros entregables. Usamos Maven Jarsigner Plugin para hacer eso.Estrategia de firma de jar en Maven Projects

nos enfrentamos a los siguientes preguntas:

  • Dónde debemos almacenar las contraseñas para la firma?
  • ¿Cuál es una buena estrategia para firmar proyectos de maven?

No queremos poner nuestro almacén de claves en algún lugar de nuestros servidores y codificar una ruta hacia él. Así que acabamos de envolver este almacén de claves en un contenedor y lo cargamos como un artefacto a nuestro repositorio interno de maven. Cuando queremos firmar un proyecto de experto, descargamos el artefacto de almacén de claves usando el Maven Dependency Plugin y adjuntamos el objetivo de firma para crear el ciclo de vida de la construcción. Here es información más detallada.

Para ocultar las contraseñas para el almacén de claves, las colocamos en nuestro archivo corporativo pom.xml. También pensamos en almacenar contraseñas en settings.xml en el servidor de compilación.

Cuando un proyecto se crea y firma en una máquina de desarrollador, lo firmamos con un certificado autofirmado. Pero cuando el proyecto se construye y se firma en un servidor de compilación, lo firmamos con nuestro certificado "oficial".

¿Es una buena estrategia?

Respuesta

30

utilizo 2 almacenes de claves:

  • un almacén de claves de desarrollo que se almacena en el SMC. El servidor de CI puede firmar las instantáneas.
  • un almacén de claves de producción con un certificado de producción real emitido por una autoridad de certificación de confianza.

La contraseña del almacén de claves de desarrollo se encuentra en el pom.xml. Aquí hay un fragmento de mi 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> 

En ~/.m2/settings.xml que define un perfil 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> 

cuando quiero firmar el certificado verdadero invoco experto con los parámetros -Pcodesigning -Dkeystore.password=strongPassword. También configuré el maven-release-plugin para usar el perfil codesigning.

En realidad, es posible almacenar la contraseña en settings.xml, siempre y cuando el archivo no pueda ser leído por nadie más que usted.

+0

Fuimos de la misma manera. Excepto que las contraseñas de almacén de claves de producción se almacenan en profile settings.xml. Y ese perfil es invocado automáticamente por el servidor de compilación. –

+0

También tenga en cuenta que su alias no puede contener un carácter de comillas simples debido a este error: http://jira.codehaus.org/browse/MJARSIGNER-11 –

+1

A partir de la versión 1.3, el complemento jar signer admite la encriptación maven. Esto hace que sea relativamente seguro almacenar la contraseña en settings.xml. Consulte http://maven.apache.org/guides/mini/guide-encryption.html para obtener más detalles. – Rob

Cuestiones relacionadas