• chevron_right

      Instalación de un Certificado SSL en JBOSS

      Todd Odai Gual · Thursday, 24 November, 2022 - 12:59 · 2 minutes

    En general ya tenía más o menos costumbre de instalar certificados en Apache. En Jboss, por ser un servidor de aplicaciones Java, hay algunas diferencias. Sí, porque Java, y todo lo que se construya encima, tiende a hacer las cosas diferentes porque sí.

    Lo primero será crear una keystore con un alias y un password. Este alias y este password son importantes, así que no las pierdas o tendrás que volver a cero.

    keytool -genkey -alias MiAlias -keyalg RSA -keystore keystoreArchivo.jks -keysize 2048

    Con este comando aparecerá un formulario similar al que se completa con openSSL, donde se completa el nombre de dominio, si se quiere con wildcard (*.dominio.com) o no, ciudad, país, etc.

    Los dominios con wildcard son más útiles, pero son más caros.

    Teniendo la keystore lista, necesitamos generar el requerimiento de certificado, o .CSR:

    keytool -certreq -keyalg RSA -alias MiAlias -file tuArchivoCSR.csr -keystore keystoreArchivo.jks

    A propósito, es bueno que mantengas el orden de directorios o carpetas donde haces esto.

    Ya generado el CSR, se envía este al proveedor de certificados. Estos tienen distintos tipos de verificación de tu dominio, como enviar un mail a admin@dominio.com, revisar algún archivo dentro del dominio o chequear los registros DNS.

    Una vez hecha la verificación, el proveedor enviará un certificado .crt o .pem (el pem trae dentro varios certificados, el segundo es el comúnmente llamado .ca), en cualquier caso funciona directamente.

    keytool -import -alias MiAlias -trustcacerts -file tuCertificado.crt -keystore keystoreArchivo.jks

    Con esa importación, ahora es momento de entrar a picar (recuerda respaldar antes de modificar). Debes editar el archivo xml de configuración de tu servidor JBoss, puede ser server.xml, en mi caso fue standalone.xml.

    Dentro de la sección security-realms (plural), debes añadir un nuevo security-realm (singular) que apunte a la keystore que acabas de crear. En mi caso, el lugar preciso donde añadir el tag fue en la línea 64.

    <security-realm name="UndertowRealm">
      <server-identities>
          <ssl>
             <keystore path="/ruta/hacia/keystoreArchivo.jks" keystore-password="****" alias="MiAlias"/>
          </ssl>
       </server-identities>
    </security-realm>
    

    Luego, en la lista de listeners, debemos añadir una entrada https. O modificar la que exista ahí, apuntando al security-realm antes añadido. En mi caso, fue en la línea 517.

    <server name="default-server">
       <http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true"/>
        <https-listener name="https" socket-binding="https" security-realm="UndertowRealm" enable-http2="true" />
          <host name="default-host" alias="localhost">
             <location name="/" handler="welcome-content"/>
             <http-invoker security-realm="ApplicationRealm"/>
          </host>
    </server>
    

    Luego, queda reiniciar JBoss para probar que funcione.

    Los certificados tienen fecha de vencimiento, típicamente de un año. En el caso de JBOSS aún no me toca, pero según lo que averigüé, se debe importar en la keystore que ya generamos el nuevo certificado con un alias distinto, luego modificar el .xml según los nuevos datos y borrar el antiguo con:

    keytool -delete -alias MiAlias -keystore keystoreArchivo.jks

    Pero como te decía, la renovación de certificados en JBoss es algo que aún no me ha tocado y no podría asegurar que funcione. Porque mucha de la información que había encontrado antes para instalar el certificado por primera vez, resultó estar mal, y finalmente lo conseguí a punta de prueba y error.

    #ssl #jboss #java #certificado #certificate