Pular para conteúdo

EJBCA

Integração com EJBCA

O EJBCA é um software livre para PKI. Com ela é possível montar uma estrutura de autoridade certificadora para emissão de certificados com as chaves geradas e armazenadas no HSM.

Configuração do Ambiente

Para facilitar a integração no guia será utilizado um container Docker disponibilizado pela primekey que é o mantenedor.

Um Dockerfile pode ser criado facilmente para gerar o container e rodar, abaixo segue um exemplo do Dockerfile e o arquivo de configuração do webserver com os parâmetros necessários:

Dockerfile
FROM primekey/ejbca-ce:7.4.3.2

USER root

RUN ["microdnf", "install", "libnsl2-1.2.0-2.20180605git4a062cf.el8.x86_64"]
RUN ["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

COPY 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 must be used to generate keys for this HSM provider.
cryptotoken.p11.lib.115.canGenerateKey=true

cryptotoken.p11.lib.255.name=P11 Proxy
cryptotoken.p11.lib.255.file=/opt/primekey/p11proxy-client/p11proxy-client.so
cryptotoken.p11.lib.255.canGenerateKeyMsg=ClientToolBox must be used to generate keys for this HSM provider.

# Normally key generation will be allowed via the UI
cryptotoken.p11.lib.255.canGenerateKey=true

# Enable usage of Azure Key Vault Crypto Token in the Admin UI
keyvault.cryptotoken.enabled=true

# Enable usage of AWS KMS Crypto Token in the Admin UI
awskms.cryptotoken.enabled=true
web.docbaseuri=disabled
web.reqcert=false

É importante observar a versão do software cliente do HSM que está sendo copiada no container e modificar de acordo. O download pode ser feito em Downloads, e a versão deve ser no mínimo a 4.7.12

Modo Restrito

Para utilizar o EJBCA no modo restrito é necessário incluir uma entrada no arquivo de configuração do webserver apontando pra um outro arquivo de atributos. A seguir vão os arquivos já configurados para o modo restrito:

Dockerfile
FROM primekey/ejbca-ce:7.4.3.2

USER root

RUN ["microdnf", "install", "libnsl2-1.2.0-2.20180605git4a062cf.el8.x86_64"]
RUN ["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

COPY web.properties /opt/primekey/ejbca/conf/
COPY 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 must be used to generate keys for this HSM provider.
cryptotoken.p11.lib.115.canGenerateKey=true
cryptotoken.p11.attr.115.file=/opt/primekey/ejbca/conf/dinamo.cfg

cryptotoken.p11.lib.255.name=P11 Proxy
cryptotoken.p11.lib.255.file=/opt/primekey/p11proxy-client/p11proxy-client.so
cryptotoken.p11.lib.255.canGenerateKeyMsg=ClientToolBox must be used to generate keys for this HSM provider.

# Normally key generation will be allowed via the UI
cryptotoken.p11.lib.255.canGenerateKey=true

# Enable usage of Azure Key Vault Crypto Token in the Admin UI
keyvault.cryptotoken.enabled=true

# Enable usage of AWS KMS Crypto Token in the Admin UI
awskms.cryptotoken.enabled=true
web.docbaseuri=disabled
web.reqcert=false
dinamo.cfg
attributes(*,*,*) = {
  CKA_TOKEN = true
}
attributes(*,CKO_PRIVATE_KEY,*) = {
  CKA_PRIVATE = true
  CKA_SIGN = true
  CKA_DECRYPT = true
  CKA_EXTRACTABLE = false
  CKA_SENSITIVE = true
}
disabledMechanisms = {
  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
}

Executando container

  1. Para criar o container basta usar o comando abaixo no diretório onde está o Dockerfile. Lembrando que os arquivos do cliente, web.properties e dinamo.cfg (no caso do modo restrito) devem estar no mesmo diretório:

    docker build -t ejbca .
    

    depois:

    docker run -it --rm -p 80:8080 -p 443:8443 -h mycahostname -e TLS_SETUP_ENABLED="simple" ejbca
    
  2. Quando o servidor subir, conecte usando o browser em: https://127.0.0.1/ejbca/adminweb/ .

  3. Depois clique no menu Crypto Tokens para criar a conexão ao HSM, clique em Create New.

  4. Os parâmetros para colocar no crypto token são:

    crypto token
    Name: qualquer nome
    Type: PKCS#11
    Authentication Code: senha do usuário que está na variável de ambiente DFENCE_PKCS11_USER que    está no   Dockerfile
    Library: HSM Dinamo
    Reference Type: Slot ID
    Reference: 1
    Attributes file: Default ou dinamo.cfg (no caso do HSM estar modo restrito)
    

  5. Após o crypto token ser criado é possível gerar as chaves, elas podem ser criadas clicando no botão Generate new key pair.