Autoridade Certificadora (CA) com o OpenSSL
by (C) João Eriberto Mota Filho <eriberto (a) eriberto pro br>
Artigo criado em: 27 de junho de 2007.
Última atualização: veja o rodapé desta página.
Tiny URL ou bit.ly: {{{2}}}
O propósito deste artigo
Este artigo tem por objetivo ser uma referência rápida para pessoas que precisem de criar e assinar chaves assimétricas, utilizando o OpenSSL. Todos os procedimentos aqui descritos estão voltados para o Debian GNU/Linux.
Noções básicas
Alguns conceitos básicos:
- Chaves assimétricas: par de chaves que permitem a criptografia, decriptografia e a assinatura de mensagens, documentos e arquivos. A composição é feita por 2 elementos: uma chave pública e uma chave privada.
- Chave pública: chave que pode ser livremente divulgada. Permite a decriptografia de elementos que foram criptografados com a respectiva chave privada. Também poderá criptografar elementos que só poderão ser decriptografados com a respectiva chave privada.
- Chave privada: chave secreta que somente deverá ser manipulada pelo seu dono. Permite a decriptografia de elementos que foram criptografados com a respectiva chave pública. Também poderá criptografar elementos que só poderão ser decriptografados com a respectiva chave pública. Geralmente, possui senha de acesso (passphrase).
- Certificado: elemento, criado por uma chave privada, que contém uma chave pública.
- Autoridade certificadora (CA): elemento no qual várias pessoas confiam. Tem função essencial em um sistema de certificação, uma vez que assina chaves públicas (ou certificados) alheios. Partindo-se do princípio de que confiamos na autoridade certificadora, todas as chaves que a mesma assinar serão confiáveis. O objetivo maior da CA é garantir que uma chave realmente pertença a quem diz ser o dono da mesma. Por necessitar de um alto grau de segurança, geralmente, a CA é instalada em uma máquina isolada e fora da rede (para evitar uma possibilidade de roubo da chave privada em uma possível invasão).
- Certificado raiz: contém a chave pública de uma CA.
- Assinar algo: é criptografar esse algo com uma chave privada.
A criação da CA
Inicialmente, instale o OpenSSL:
# apt-get install openssl
A seguir, vá para o diretório /usr/lib/ssl:
# cd /usr/lib/ssl
Edite o arquivo openssl.cnf e altere os dados da CA. Um exemplo de configuração final (apenas o bloco que interessa):
countryName = Country Name (2 letter code) countryName_default = BR countryName_min = 2 countryName_max = 2 stateOrProvinceName = State or Province Name (full name) stateOrProvinceName_default = DF localityName = Locality Name (eg, city) localityName_default = Brasilia 0.organizationName = Organization Name (eg, company) 0.organizationName_default = Banco Boa Sorte SA # we can do this but it is not needed normally :-) #1.organizationName = Second Organization Name (eg, company) #1.organizationName_default = World Wide Web Pty Ltd organizationalUnitName = Organizational Unit Name (eg, section) organizationalUnitName_default = Divisao de Informatica commonName = Common Name (eg, YOUR name) commonName_max = 64 commonName_default = Autoridade Certificadora do Banco Boa Sorte emailAddress = Email Address emailAddress_max = 64 emailAddress_default = ca@boasorte.com.br
Não utilize acentos ou caracteres especiais nos dados a serem inseridos no arquivo de configuração da CA. Ainda, note que somente serão editados os campos que contiverem _default |
A seguir, entre no diretório misc:
# cd misc
Edite o arquivo CA.pl e altere o tempo de duração do certificado da CA. Geralmente, um certificado de uma CA dura de 10 a 30 anos (3650 a 10950 dias). Exemplo:
$CADAYS="-days 3650";
Ainda, configure o tempo de duração de um certificado comum. Geralmente, um certificado a ser utilizado em servidores de rede, VPN etc, duram 1 ou 2 anos, no máximo, podendo ser menos. Exemplo:
$DAYS="-days 365";
Finalmente, ainda dentro de /usr/lib/ssl/misc, crie a CA. Para isso, utilize o comando:
# ./CA.pl -newca
Na criação da CA, observe o seguinte:
- CA certificate filename (or enter to create): simplesmente pressione ENTER.
- Enter PEM pass phrase: digite uma frase-senha segura (algo com, pelo menos 10 caracteres).
- Nos campos em que aparecer as informações anteriormente configuradas pressione ENTER
- A challenge password []: pressione ENTER.
- An optional company name []: pressione ENTER.
- Enter pass phrase for ./demoCA/private/cakey.pem: digite a frase-senha que foi criada anteriormente.
Seguindo os passos anteriores, a CA será criada dentro do diretório .demoCA.
A criação das chaves
Para criar um par de chaves, dentro do diretório /usr/lib/ssl/misc, execute:
# ./CA.pl -newreq
Serão feitas algumas perguntas. Responda as mesmas de acordo com os dados do serviço, da máquina ou da pessoa que irá utilizar o certificado gerado. A frase-senha solicitada será específica para esta chave. Exemplo:
Country Name (2 letter code) [BR]: State or Province Name (full name) [DF]:SP Locality Name (eg, city) [Brasilia]:Sao Paulo Organization Name (eg, company) [Banco Boa Sorte SA]: Organizational Unit Name (eg, section) [Divisao de Informatica]:Servico ao Cliente Common Name (eg, YOUR name) [Autoridade Certificadora do Banco Boa Sorte]:www.boasorte.com.br Email Address [ca@boasorte.com.br]:webmaster@boasorte.com.br
Deixe em branco A challenge password e An optional company name. Serão criados os seguintes arquivos:
- newkey.pem: contém a chave privada.
- newreq.pem: contém a chave pública.
A assinatura de um certificado pela CA
Para assinar um certificado, dentro do diretório /usr/lib/ssl/misc, com o arquivo newreq.pem presente, digite:
# ./CA.pl -sign
Será pedida a frase-senha da chave privada da CA para que seja realizada a assinatura. No fim, será criado o arquivo newcert.pem, certificado que conterá a chave pública assinada. Efetivamente, você irá querer os arquivos newkey.pem e newcert.pem. O arquivo newreq.pem não terá tanta utilidade.
O certificado raiz
Será necessário disponibilizar o certificado raiz (que é o certificado da CA) para download, pois os clientes precisarão instalar tal certificado nos seus clientes de e-mail, browsers etc. O certificado raiz é o arquivo /usr/lib/ssl/misc/demoCA/cacert.pem. Renomeie-o para boasorte.crt e disponibilize no site para download.
Tornando a chave privada insegura
Caso a chave privada venha a ser utilizada em servidores, a mesma deverá estar sem senha. Isso ocorre porque o servidor não sabe trabalhar com senhas e, a cada a acesso de cliente, será solicitada tal senha do lado do servidor (chave privada).
Para remover a senha da chave privada, criando uma chave privada insegura, execute o comando:
# openssl rsa -in newkey.pem -out key.pem
Será solicitada a frase-senha da chave privada em questão. O arquivo key.pem que será gerado conterá a chave privada já sem a senha.
Links externos
Controle de acesso
<absHTML>
<a href="http://www3.clustrmaps.com/counter/maps.php?url=http://www.eriberto.pro.br/wiki/index.php?title=CAcomOpenSSL" id="clustrMapsLink"><img src="http://www3.clustrmaps.com/counter/index2.php?url=http://www.eriberto.pro.br/wiki/index.php?title=CAcomOpenSSL" /> </a>
</absHTML>