Chamados de certificados SSL/TLS são certificados de chaves públicas criptografadas e são compostas de uma chave pública e uma privada. O certificados são utilizados para autenticar os endpoints e criptografar os dados. Elas são utilizadas por exemplo em um servidor server (https) ou servidor de e-mail (imaps).
Procedimento
- Precisamos de uma autoridade de certificado (certificate authority) para assinar nosso certificado. Esse passo geralmente é fornecido por um vendedor como a Thawte, a Verisign, etc., no entanto nós mesmos podemos também criar o nosso.
- Cria uma solicitação de assinatura de certificado. Essa solicitação é como um certificado não assinado (a parte pública) e já contem todas as informações necessárias. A solicitação de certificação normalmente é enviada para o fornecedor da autoridade para a assinatura. Esse passo também cria a chave privada na maquina local.
- assine o certificado com a autoridade do certificado.
- Se necessário junta o certificado e a chave em um único arquivo para ser utilizado pela aplicação (servidor web, servidor de mail etc.).
Configurar OpenSSL
Nós usamos /usr/local/certs como diretório para esse exemplo; verifique ou edite /etc/ssl/openssl.cnf de acordo com as suas configurações, assim você sabe aonde os arquivos serão criados. Aqui estão as partes do openssl.cnf:
[ CA_default ] dir = /usr/local/certs/CA # Aonde tudo é mantido certs = $dir/certs # Aonde os certificados emitidos são mantidos crl_dir = $dir/crl # Aonde os crl emitidos são mantidos database = $dir/index.txt # arquivos index database (base de dados).
Certifique-se de que os diretórios existem ou crie-os
# mkdir -p /usr/local/certs/CA
# cd /usr/local/certs/CA
# mkdir certs crl newcerts private
# echo "01" > serial # Somente se o serial não existe
# touch index.txt
Se você pretende obter um certificado de assinado vindo de um fornecedor, você só precisa uma solicitação de assinatura de certificado (certificate signing request) (CSR). Esse CSR será então assinado pelo fornecedor (vendor) por um tempo limitado (ex. 1 ano).
Criar uma autoridade de certificado
Se você não tem uma autoridade de certificado de um fornecedor, Você terá que criar uma própria. Esse passo não é necessário se alguém pretendia utilizar um fornecedor para assinar a solicitação. Para gerar uma autoridade de certificado (certificate authority) (CA):
# openssl req -new -x509 -days 730 -config /etc/ssl/openssl.cnf \ -keyout CA/private/cakey.pem -out CA/cacert.pem
Gerar uma solicitação de assinatura de certificado
Para gerar um novo certificado (para servidor de mensagens ou servidor web por exemplo), primeiro gere um certificado de solicitação com sua chave privada. Se sua aplicação não suporta chave privada criptografada(por exemplo UW-IMAP does not), então desabilite a criptografia com -nodes
.
# openssl req -new -keyout newkey.pem -out newreq.pem \
-config /etc/ssl/openssl.cnf
# openssl req -nodes -new -keyout newkey.pem -out newreq.pem \
-config /etc/ssl/openssl.cnf # Sem criptografia para a chave
Guarde essa CSR gerada (newreq.pem
) desde que ela pode ser assinada novamente na próxima vez que for renovar a página, a assinatura onlt limitará a validade do certificado. Esse processo também gerou a chave privada newkey.pem
.
Assinar o certificado
A solicitação de certificado tem que ser assinado pela CA para ser validada, esse passo é normalmente feito pelo fornecedor. Nota: substitua “servername” pelo nome do seu servidor nos próximos comandos.
# cat newreq.pem newkey.pem > new.pem # openssl ca -policy policy_anything -out servernamecert.pem \ -config /etc/ssl/openssl.cnf -infiles new.pem # mv newkey.pem servernamekey.pem
Agora servernamekey.pem é a chave privada e servernamecert.pem é o certificate servidor.
Gerar certificado unido (united certificate)
O servidor IMAP que ter ambos (chave privada e certificado do servidor) no mesmo arquivo. De modo geral, Isso também é mais fácil de manusear, mas o arquivo deve ser mantido seguro!. O Apache também pode lidar com isso bem. Gere um arquivo servername.pem contendo o certificado e a chave.
- Abra a chave privada (servernamekey.pem) com um editor de texto e copie a chave privada para dentro do arquivo “servername.pem”.
- Faça o mesmo com o certificado do servidor (servernamecert.pem).
O final do arquivo servername.pem deve parecer com isso:
-----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQDutWy+o/XZ/[...]qK5LqQgT3c9dU6fcR+WuSs6aejdEDDqBRQ -----END RSA PRIVATE KEY----- -----BEGIN CERTIFICATE----- MIIERzCCA7CgAwIBAgIBBDANB[...]iG9w0BAQQFADCBxTELMAkGA1UEBhMCREUx -----END CERTIFICATE-----
O que temos agora no diretório /usr/local/certs/:
- CA/private/cakey.pem (CA server private key)
- CA/cacert.pem (CA server public key)
- certs/servernamekey.pem (server private key)
- certs/servernamecert.pem (server signed certificate)
- certs/servername.pem (server certificate with private key)
Guarde a chave privada em lugar seguro!
Visualizar informações do certificado
Para visualizar as informações do certificado simplesmente faça:
# openssl x509 -text -in servernamecert.pem # Visualiza a info do certificado # openssl req -noout -text -in server.csr # Visualiza a info da solicitação # openssl s_client -connect cb.vu:443 # Verifica um certificado do servidor web