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:
httpserver.pubhttp=80httpserver.pubhttps=443httpserver.privhttps=443httpserver.external.privhttps=443web.reqcertindb=falsecryptotoken.p11.lib.115.name=HSM Dinamocryptotoken.p11.lib.115.file=/usr/lib64/libtacndp11.socryptotoken.p11.lib.115.canGenerateKeyMsg=ClientToolBox must be used to generate keys for this HSM provider.cryptotoken.p11.lib.115.canGenerateKey=truecryptotoken.p11.lib.255.name=P11 Proxycryptotoken.p11.lib.255.file=/opt/primekey/p11proxy-client/p11proxy-client.socryptotoken.p11.lib.255.canGenerateKeyMsg=ClientToolBox must be used to generate keys for this HSM provider.# Normally key generation will be allowed via the UIcryptotoken.p11.lib.255.canGenerateKey=true# Enable usage of Azure Key Vault Crypto Token in the Admin UIkeyvault.cryptotoken.enabled=true# Enable usage of AWS KMS Crypto Token in the Admin UIawskms.cryptotoken.enabled=trueweb.docbaseuri=disabledweb.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:
httpserver.pubhttp=80httpserver.pubhttps=443httpserver.privhttps=443httpserver.external.privhttps=443web.reqcertindb=falsecryptotoken.p11.lib.115.name=HSM Dinamocryptotoken.p11.lib.115.file=/usr/lib64/libtacndp11.socryptotoken.p11.lib.115.canGenerateKeyMsg=ClientToolBox must be used to generate keys for this HSM provider.cryptotoken.p11.lib.115.canGenerateKey=truecryptotoken.p11.attr.115.file=/opt/primekey/ejbca/conf/dinamo.cfgcryptotoken.p11.lib.255.name=P11 Proxycryptotoken.p11.lib.255.file=/opt/primekey/p11proxy-client/p11proxy-client.socryptotoken.p11.lib.255.canGenerateKeyMsg=ClientToolBox must be used to generate keys for this HSM provider.# Normally key generation will be allowed via the UIcryptotoken.p11.lib.255.canGenerateKey=true# Enable usage of Azure Key Vault Crypto Token in the Admin UIkeyvault.cryptotoken.enabled=true# Enable usage of AWS KMS Crypto Token in the Admin UIawskms.cryptotoken.enabled=trueweb.docbaseuri=disabledweb.reqcert=false
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:
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:
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)
Após o crypto token ser criado é possível gerar as chaves, elas podem ser criadas clicando no botão Generate new key pair.