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:
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/
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:
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/
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
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
-
Para criar o container basta usar o comando abaixo no diretório onde está o Dockerfile. Lembrando que os arquivos do cliente,
web.properties
edinamo.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
-
Quando o servidor subir, conecte usando o browser em: https://127.0.0.1/ejbca/adminweb/ .
-
Depois clique no menu Crypto Tokens para criar a conexão ao HSM, clique em Create New.
-
Os parâmetros para colocar no crypto token são:
crypto tokenName: 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)
-
Após o crypto token ser criado é possível gerar as chaves, elas podem ser criadas clicando no botão Generate new key pair.