Gerar uma cadeia de certificados usando OpenSSL
Nesse post vou explicar como criar uma cadeia de certificação utilizando apenas o OpenSSL.
É muito comum em ambientes corporativos que se use Autoridades Certificadoras Privadas (Private CAs) para gerar cadeias de certificados para uso interno, normalmente para proteger com SSL/HTTPS sites privados (domínios *.corp, *.local, *.inet, etc.)
Normalmente para isso usamos um serviço de Private CA, como o Microsoft Active Directory Certificate Services (AD CS).
No entanto, para empresas menores que não queiram usar softwares proprietários com custo de licenciamento e que demandem manutenção e gerenciamento, ou então para pequenos projetos e ambientes de teste, podemos utilizar apenas o OpenSSL para gerar toda uma cadeia certificadora.
O primeiro passo é gerar um certificado raiz (Root CA) composto com um par de chaves pública/privada.
openssl req -x509 \
-sha256 -days 10950 \
-nodes \
-newkey rsa:2048 \
-subj "/CN=rootca.exemplo.corp/O=Empresa XPTO/OU=IT/C=BR/L=Sao Paulo" \
-keyout rootCA.key -out rootCA.crt
O comando acima vai gerar um par de chaves público/privada (rootCA.crt/rootCA.key) com validade de 30 anos. Este será nosso certificado raiz que será utilizado para assinar/emitir todos os demais certificados.
Em seguida vamos gerar um certificado para ser utilizado em um site fictício. O certificado para esse site vai incluir também um wildcard para subdomínios desse site (*.portal-xpto.exemplo.corp). Isso apenas para mostrar as possibilidades de configuração.
## Gerando a chave privada para o certificado do site
openssl genrsa -out portal-xpto.key 2048
## Gerando o arquivo de configuração que vai ser usado para gerar o CSR do certificado
cat > portal-xpto.csr.conf <<EOF
[ req ]
default_bits = 2048
prompt = no
default_md = sha256
req_extensions = req_ext
distinguished_name = dn
[ dn ]
C = BR
ST = Sao Paulo
L = Sao Paulo
O = Grupo Santander
OU = IT
CN = portal-xpto.exemplo.corp
[ req_ext ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1=*.portal-xpto.exemplo.corp
EOF
## Gerando o CSR do certificado a partir da configuração
openssl req -new -key devops.key -out portal-xpto.csr -config portal-xpto.csr.conf
## Gerando o arquivo de configuração para o certificado. Será usado pra gerar a chave pública
cat > portal-xpto.cert.conf <<EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth, clientAuth
subjectAltName = @alt_names
[ alt_names ]
DNS.1=*.portal-xpto.exemplo.corp
EOF
## Gerando a chave publica do certificado com validade de 10 anos
openssl x509 -req \
-in portal-xpto.csr \
-CA rootCA.crt -CAkey rootCA.key \
-CAcreateserial -out portal-xpto.crt \
-days 3650 \
-sha256 -extfile portal-xpto.cert.conf
Após rodar os comandos explicados acima, teremos os arquivos de chave pública e privada (portal-xpto.crt e portal-xpto.key) que poderão ser utilizados no servidor web (Apache, por exemplo).
Esses certificados estão no formato PEM/base64. Para poder utilizar em servidores Windows com IIS, pode efetuar a conversão para o formato PFX usando o procedimento mostrado aqui.
Agora basta apenas importar a chave pública do certificado raiz (rootCA.crt) nos computadores/dispositivos cliente para que os sites apareçam como confiados (certificado válido).
Todos os certificados criados utilizando o mesmo rootCA.crt serão válidos nos clientes que tiverem esse root instalado.
Comentários
Postar um comentário