Pregunta

Tenemos varios proyectos de Maven, que se construyen en el servidor de compilación. En algunos casos queremos firmar nuestros entregables. Utilizamos Maven Plugin Jarsigner para hacer eso.

Nos enfrentamos a las siguientes preguntas:

  • ¿Dónde debemos almacenar las contraseñas de la firma?
  • ¿Qué es una buena estrategia para la firma de proyectos Maven?

No queremos poner nuestro almacén de claves en algún lugar en nuestros servidores y codificar un camino a ella. Así que acaba de terminar este almacén de claves en un frasco y lo ha subido como un artefacto en nuestro repositorio de Maven interior. Cuando queremos firmar un proyecto Maven, descargamos el artefacto almacén de claves mediante el Maven Plugin Dependencia y adjuntar la firma meta de acumulación experto ciclo de vida. Aquí es más detallado información.

Con el fin de ocultar las contraseñas del almacén de claves, que los puso en nuestro archivo pom.xml corporativa. También pensamos en el almacenamiento de contraseñas en settings.xml en el servidor de compilación.

Cuando un proyecto se construye y se firmó en un ordenador de desarrollo, que lo firme con el certificado autofirmado. Pero cuando el proyecto se construye y se firmó en un servidor de compilación, firmamos con nuestro certificado "oficial".

¿Es una buena estrategia?

¿Fue útil?

Solución

utilizo 2 almacenes de claves:

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

La contraseña del almacén de claves es el desarrollo 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 I 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 Maven con los parámetros -Pcodesigning -Dkeystore.password=strongPassword. También he configurado el experto de liberación-plugin utilizar el codesigning perfil.

En realidad, es posible almacenar la contraseña en settings.xml siempre que el archivo pueda ser leída por nadie más que tú.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top