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: {{{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 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):

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


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

</absHTML>