Ir al contenido

EJBCA

Guía de uso de EJBCA con WildFly y PKCS11

EJBCA es un software gratuito para PKI. Con él puede configurar una estructura de autoridad de certificación para emitir certificados con las claves generadas y almacenadas en el HSM.

Configuración del entorno

Para facilitar la integración en la guía, se utilizará un contenedor Docker proporcionado por primekey, que es el mantenedor.

Se puede crear fácilmente un Dockerfile para generar el contenedor y ejecutarlo. A continuación se muestra un ejemplo del Dockerfile y el archivo de configuración del servidor web con los parámetros necesarios:

  • Dockerfile:

    DE primekey/ejbca-ce:7.4.3.2
    
    USUARIO root
    
    EJECUTAR  ["microdnf", "install", "libnsl2-1.2.0-2.20180605git4a062cf.el8.x86_64"]
    EJECUTAR  ["ln", "-s", "/usr/lib64/libnsl.so.2", "/usr/lib64/libnsl.so.1"]
    
    ADD dinamo -4.7.11-1.el7.centos.x86_64.rpm .
    RUN  ["/usr/bin/rpm", "--nosignature", "-i",  "dinamo-4.7.11-1.el7.centos.x86_64.rpm"]
    RUN  ["/usr/bin/rm",  "dinamo-4.7.11-1.el7.centos.x86_64.rpm"]
    
    ENV  TLS_SETUP_ENABLED=simple
    ENV DFENCE_PKCS11_IP=192.168.1.101
    ENV  DFENCE_PKCS11_USER=master
    ENV HSM_DISABLE_LEGACY_OPERATIONS=1
    
    EXPOSE 8080
    EXPOSE  8443
    
    COPIAR web.properties /opt/primekey/ejbca/conf/
    

  • web.properties:

    httpserver.pubhttp=80
    httpserver.pubhttps=443
    httpserver.privhttps=443
    httpserver.external.privhttps=443
    web.reqcertindb=false
    
    cryptotoken.p11.lib.115.name=HSM Dinamo
    cryptotoken.p11.lib.115.file=/usr/lib64/libtacndp11.so
    cryptotoken.p11.lib.115.canGenerateKeyMsg=ClientToolBox debe utilizarse para generar claves para este proveedor de HSM.
    cryptotoken.p11.lib.115.canGenerateKey=true
    
    cryptotoken.p11.lib.255.name=Proxy P11
    cryptotoken.p11.lib.255.file=/opt/primekey/p11proxy-client/p11proxy-client.so
    cryptotoken.p11.lib.255.canGenerateKeyMsg=ClientToolBox debe utilizarse para generar claves para este proveedor HSM.
    # Normalmente se permitirá la generación de claves a través de la interfaz de usuario
    cryptotoken.p11.lib.255.canGenerateKey=true
    
    # Habilitar el uso de Azure Key Vault Crypto Token en la interfaz de administración
    keyvault.cryptotoken.enabled=true
    
    # Habilitar el uso del token criptográfico AWS KMS en la interfaz de administración
    awskms.cryptotoken.enabled=true
    web.docbaseuri=desactivado
    web.reqcert=falso
    

Es importante mirar la versión del software cliente HSM que se está copiando en el contenedor y modificarla en consecuencia. Puede descargarlo desde Descargas, y la versión debe ser al menos 4.7.12

Modo restringido

Para utilizar EJBCA en modo restringido, es necesario incluir una entrada en el archivo de configuración del servidor web que apunte a otro archivo de atributos. A continuación se muestran los archivos ya configurados para el modo restringido:

  • Dockerfile:

    DE primekey/ejbca-ce:7.4.3.2
    
    USUARIO root
    
    EJECUTAR  ["microdnf", "install", "libnsl2-1.2.0-2.20180605git4a062cf.el8.x86_64"]
    EJECUTAR  ["ln", "-s", "/usr/lib64/libnsl.so.2", "/usr/lib64/libnsl.so.1"]
    
    ADD dinamo -4.7.12-1.el7.centos.x86_64.rpm .
    RUN  ["/usr/bin/rpm", "--nosignature", "-i",  "dinamo-4.7.12-1.el7.centos.x86_64.rpm"]
    RUN  ["/usr/bin/rm",  "dinamo-4.7.12-1.el7.centos.x86_64.rpm"]
    
    ENV  TLS_SETUP_ENABLED=simple
    ENV DFENCE_PKCS11_IP=192.168.1.101
    ENV  DFENCE_PKCS11_USER=master
    ENV HSM_DISABLE_LEGACY_OPERATIONS=1
    
    EXPOSE 8080
    EXPOSE  8443
    
    COPIA web.properties /opt/primekey/ejbca/conf/
    COPIA dinamo .cfg /opt/primekey/ejbca/conf/
    

  • web.properties:

    httpserver.pubhttp=80
    httpserver.pubhttps=443
    httpserver.privhttps=443
    httpserver.external.privhttps=443
    web.reqcertindb=false
    
    cryptotoken.p11.lib.115.name=HSM Dinamo
    cryptotoken.p11.lib.115.file=/usr/lib64/libtacndp11.so
    cryptotoken.p11.lib.115.canGenerateKeyMsg=ClientToolBox debe utilizarse para generar claves para este proveedor de HSM.
    cryptotoken.p11.lib.115.canGenerateKey=true
    cryptotoken.p11.attr.115.file=/opt/primekey/ejbca/conf/dinamo.cfg
    
    cryptotoken.p11.lib.255.name=Proxy P11
    cryptotoken.p11.lib.255.file=/opt/primekey/p11proxy-client/p11proxy-client.so
    cryptotoken.p11.lib.255.canGenerateKeyMsg=ClientToolBox debe utilizarse para generar claves para este proveedor HSM.
    # Normalmente se permitirá la generación de claves a través de la interfaz de usuario
    cryptotoken.p11.lib.255.canGenerateKey=true
    
    # Habilitar el uso de Azure Key Vault Crypto Token en la interfaz de administración
    keyvault.cryptotoken.enabled=true
    
    # Habilitar el uso del token criptográfico AWS KMS en la interfaz de administración
    awskms.cryptotoken.enabled=true
    web.docbaseuri=desactivado
    web.reqcert=falso
    

  • dinamo.cfg:

    attributes(*,*,*) = {
      CKA_TOKEN = true
    }
    attributes(*,CKO_CLAVE_PRIVADA,*) = {
      CKA_PRIVADO = verdadero
      CKA_SIGN = verdadero
      CKA_DECRYPT = true
      CKA_EXTRACTABLE = false
      CKA_SENSITIVO = true
    }
    disabledMechanismos = {
      CKM_RSA_X_509
      CKM_SHA_1
      CKM_MD2
      CKM_MD5
      CKM_SHA1_RSA_PKCS
      CKM_MD2_RSA_PKCS
      CKM_MD5_RSA_PKCS
      CKM_RSA_PKCS
    }
    

Creación y ejecución de contenedores.

  1. Para crear el contenedor, basta con utilizar el siguiente comando en el directorio donde se encuentra el Dockerfile. Recuerde que los archivos de cliente, propiedades.web e dinamo.cfg (en el caso del modo restringido) deben estar en el mismo directorio:

    docker build -t ejbca .
    

    después:

    docker run -it --rm -p 80:8080 -p 443:8443 -h mycahostname -e  TLS_SETUP_ENABLED="simple" ejbca
    
  2. Cuando el servidor se active, conéctate utilizando el navegador en: https://127.0.0.1/ejbca/adminweb/ .

  3. A continuación, haga clic en el menú Crypto Tokens para crear la conexión con el HSM, haga clic en Crear nuevo.

  4. Los parámetros que hay que poner en el token criptográfico son:

    Nombre: cualquier nombre
    Tipo: PKCS#11
    Código de autenticación: contraseña de usuario en la variable de entorno DFENCE_PKCS11_USER en el Dockerfile.
    Biblioteca: HSM Dinamo
    Referencia Tipo: ID de ranura
    Referencia: 1
    Archivo de atributos: Default o dinamo.cfg (si HSM está en modo restringido)
    

  5. Una vez creado el token criptográfico, se pueden generar las claves pulsando el botón Generar nuevo par de claves.