Autoridade Certificadora (CA) com o OpenSSL

De Eriberto Wiki
Ir para navegação Ir para pesquisar

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: http://bit.ly/ca_openssl



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 permite 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. Essas chaves são totalmente diferentes, no seu conteúdo e tamanho. No entanto, as duas operam normalmente entre si e com nenhuma outra mais.
  • Chave pública: chave que pode ser livremente divulgada. Permite a decriptografia de elementos que foram criptografados pela respectiva chave privada. Também poderá criptografar elementos que só poderão ser decriptografados pela respectiva chave privada.
  • Chave privada: chave secreta que somente deverá ser manipulada pelo seu dono. Permite a decriptografia de elementos que foram criptografados pela respectiva chave pública. Também poderá criptografar elementos que só poderão ser decriptografados pela 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):

default_md   = sha256      # Caso prefira, utilize sha384 ou sha512.

...

[req]
default_bits = 2048      # Se precisar de criptografia mais forte, utilize 4096 (processamento pesado!).

...

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      # Esta linha, normalmente, não existe e você deverá criá-la.

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      # Esta linha, normalmente, aparece comentada. Remova a cerquilha do seu início.

commonName                      = Common Name (eg, YOUR name)
commonName_max                  = 64
commonName_default              = Autoridade Certificadora do Banco Boa Sorte      # Esta linha, normalmente, não existe e você deverá criá-la.

emailAddress                    = Email Address
emailAddress_max                = 64
emailAddress_default            = ca@boasorte.com.br      # Esta linha, normalmente, não existe e você deverá criá-la.
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 e expressão "_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";
Geralmente, a CA não é estabelecida na mesma máquina que irá gerar certificados convencionais para servidores, pessoas etc. No entanto, este artigo parte do princípio que você somente irá utilizar a CA em pequenas aplicações.

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 não ser que deseje digitar algo diferente.
  • 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

Neste ponto, já tendo uma CA, você poderá criar um par de chaves para utilizar em um servidor de rede ou para fornecer para um usuário.

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 e deverá ter, no mínimo, 4 caracteres. A seguir, um exemplo de configuração:

Country Name (2 letter code) [BR]: responda com ENTER
State or Province Name (full name) [DF]:SP
Locality Name (eg, city) [Brasilia]:Sao Paulo
Organization Name (eg, company) [Banco Boa Sorte SA]: responda com ENTER
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
Observe que em Common Name foi colocado o endereço do site, da mesmo forma como será digitado pelo cliente no navegador. Se fosse um servidor de e-mail, por exemplo, bastaria colocar o seu nome (o mesmo inserido no DNS e utilizado pelos clientes).

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á utilizar os arquivos newkey.pem e newcert.pem. O arquivo newreq.pem não terá tanta serventia.

Seria ideal que todo usuário criasse o seu próprio par de chaves e enviasse somente a pública para que a CA assinasse. Esse é o método mais comum e seguro de se trabalhar.



O certificado raiz

Será necessário disponibilizar o certificado raiz (que é o certificado da CA) para download, pois os usuários precisarão instalar tal certificado nos seus programas de e-mail, browsers etc. O certificado raiz é o arquivo /usr/lib/ssl/misc/demoCA/cacert.pem. Renomeie-o para boasorte.crt e disponibilize-o em um site para download.

Tornando a chave privada insegura (apenas para chaves a serem utilizadas em servidores de rede)

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, se não removermos essa senha, a cada a acesso de cliente a mesma será solicitada (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. Você deverá utilizar os arquivos key.pem e newcert.pem, além do certificado raiz, para configurar os seus servidores de rede.

O posicionamento correto das chaves no GNU/Linux

Dentro do GNU/Linux, as chaves públicas (ou certificados) deverão ficar dentro de /etc/ssl/certs, geralmente com permissão 640. As chaves privadas serão colocadas dentro de /etc/ssl/private, geralmente com permissão 400.

Links externos


Comentários, sugestões e controle de acessos

Por favor, deixe os seus comentários e sugestões sobre este artigo no meu Blog Técnico. Para isto, clique aqui.


<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>


Consulte também o contador abaixo, iniciado em 27 jun. 07, além do gráfico acima.

</absHTML>