Certificados

Uma das formais mais comuns de criptografia hoje é a criptografia de chave pública. A criptografia de chave pública utiliza uma chave pública e uma chave privada. O funcionamento do sistema consiste em cifrar informação usando a chave pública. A informação então só pode ser decifrada usando a chave privada.

Um uso comum para a criptografia de chave pública é cifrar ou encriptar tráfico de aplicação usando uma conexão Secure Socket Layer (SSL) ou Transport Layer Security (TLS). Por exemplo, configurando o Apache para que utilize HTTPS, o protocolo HTTP sobre SSL. Isto proporciona uma maneira de encriptar o tráfico usando um protocolo que não oferece encriptação por si mesmo.

Um Certificado é um método utilizado para distribuir uma chave pública e outras informações sobre um servidor e da organização que é responsável por isso. Os certificados podem ser assinados digitalmente por uma Autoridade Certificadora ou CA. A CA é uma terceira parte confiável que tem confirmado que a informação contida no certificado é verdadeira.

Tipos de Certificados

Para configurar um servidor seguro usando a criptografia de chave pública, na maioria dos casos, você envia sua solicitação de certificado (incluindo sua chave pública), prova a identidade de sua empresa e paga uma CA. A CA verifica a solicitação de certificado e sua identidade e logo envia um certificado para seu servidor seguro. Como alternativa, você pode criar seu certificado auto-assinado.

[Nota]

Note que certificados auto-assinados não deveriam ser usados na maioria dos ambientes de produção.

Continuando o exmplo HTTPS, um certificado CA-assinado fornece duas capacidades importantes que o certificado auto-assinado não fornece:

  • Navegadores (em geral) automaticamente reconhecem o certificado e permitem uma conexão segura sem questionamentos ao usuário.

  • Quando um CA emite um certificado assinado, está garantindo a identidade da organização que está provendo as páginas da web para o navegador.

A maioria dos navegadores Web, e computadores, que suportam SSL possuem uma lista de certificados CAs que eles aceitam automaticamente. Se um navegar encontrar um certificado que a autorização CA não está na lista, o navegador pergunta ao usuário se deve aceitar ou recusar a conexão. Também, outras aplicações podem gerar uma mensagem de erro quando utilizarem sua própria certificação.

O processo de obtenção de um certificado por um CA é bastante fácil. A seguir uma visão geral:

  1. Cria um par de chaves criptográficas privada e pública.

  2. Cria uma requisição de certificado baseada na chave pública. A requisição de certificado contém informação a respeito do seu servidor e da empresa que o hospeda.

  3. Envie o pedido de certificado, juntamente com documentos provando sua identidade, para o CA. Não podemos lhe dizer qual Autoridade em Certificados (CA) escolher. Sua decisão deve ser baseada nas suas experiências anteriores, na experiência de amigos ou colegas, ou puramente por fatores financeiros.

    Uma vez decido qual CA usar, você precisa seguir as instruções que eles disponibilizam em como obter um certificado deles.

  4. Quando o CA está satisfeito de que você é de fato quem diz ser, eles lhe enviam um certificado digital.

  5. Instala este certificado no seu servidor seguro, e configura as aplicações apropriadas para utilizar o certificado.

Gerando uma Assinatura de Requisição de Certificado (CSR)

Não importa se está recebendo um certificado de um CA ou gerando o seu certificado auto-assinado, o primeiro passo é criar uma chave.

Se o certificado será usado por serviços de sistema, como Apache, Postfix, Dovecot, etc, uma chave sem frase secreta é frequentemente mais apropriada. Não ter uma frase secreta permite que os serviços iniciem sem intervenção manual, usualmente o caminho preferido para iniciar um serviço de sistema.

Esta seção cobrirá a criação de uma chave com uma frase secreta, e uma sem. A chave sem frase secreta será então usada para gerar um certificado que pode ser usado com vários serviços de sistema.

[Atenção]

Executar seu serviço de segurança sem uma frase secreta é conveniente pois você não precisará entrá-la cada vez que iniciar seu serviço de segurança. Mas ela é insegura e um comprometimento da chave é um comprometimento do servidor também.

Para gerar a chave para o Certificate Signing Request (CSR) execute o seguinte comando em um terminal:

openssl genrsa -des3 -out server.key 1024
Gerando chave privada RSA, 1024 bit módulos longos
.....................++++++
.................++++++
impossível escrever 'estado aleatório'
e é 65537 (0x10001)
Informe a chave senha para o server.key:

Agora, você pode inserir a sua senha. Para uma segurança melhor, ela deve conter no mínimo oito caracteres. O tamanho mínimo quando -des3 é especificado é de quatro caracteres. É bom incluir números e/ou pontuação e não ser uma palavra de dicionário. Também, lembre-se que a sua senha é sensível à caixa alta e/ ou baixa.

Digite a combinação de palavras novamente para verificação. Após ter regiditado corretamente, a chave do servidor é gerada e armazenada no arquivo server.key.

Agora criada a chave insegura,a qual sem uma frase secreta, e embaralhe os nomes da chave:

openssl rsa -in server.key -out server.key.insecure
mv server.key server.key.secure
mv server.key.insecure server.key

A chave insegura é agora chamada server.key, e você pode usar este arquivo para gerar o CSR sem frase secreta.

Para criar um CSR, execute o seguinte comando no prompt do terminal:

openssl req -new -key server.key -out server.csr

Ele irá solicitar a combinação de palavras. Se você digitar a combinação correta, ele irá perguntar pelo Nome da Empresa. Após informar todos os detalhes, sua CSR será criada e armazenada no arquivo server.csr. Nome do Site, Email, etc.

Agora você pode submeter o arquivo CSR para um CA para processamento. O CA irá usar este arquivo CSR e caracterizar o certificado. Por outro lado, você mesmo poderá auto assinar um certificado utilizando este CSR.

Criando um certificado Auto-Assinado

Para criar um certificado auto-assinado, execute o seguinte comando no prompt de terminal:

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

O comando abaixo irá lhe pedir uma senha. Assim que você informar a senha correta, seu certificado será criado e ele será armazenado no arquivo server.crt.

[Atenção]

Se o seu servidor seguro deve ser utilizado em um ambiente de produção, você provavelmente precisa de um certificado assinado por uma CA. Não é recomendado usar certificados auto-assinados.

Instalando o Certificado

Você pode instalar o arquivo de chave server.key e o arquivo do certificado server.crt, ou o arquivo de certificado enviado pelo seu CA, executando os seguintes comandos no terminal:

sudo cp server.crt /etc/ssl/certs
sudo cp server.key /etc/ssl/private

Agora simplesmente configure qualquer aplicação, com a habilidade de usar chaves-publicas criptografadas, para usar os arquivos certificate e key. Por exemplo, Apache pode prover HTTPS, Dovecot pode prover IMAPS e POP3S, etc.

Autoridade Certificadora

Se os serviços de sua rede exigem mais do que alguns certificados auto-assinado pode valer a pena o esforço para adicionar sua própria configuração interna Autoridade Certificadora (AC) emphasis>. Usando certificados assinados pelo seu pr

  1. Em primeiro lugar, criar os diretórios para armazenar o certificado CA e arquivos relacionados:

    sudo mkdir /etc/ssl/CA
    sudo mkdir /etc/ssl/newcerts
    
  2. O CA precisa de arquivos adcionais para operar , um para acompanhar o ultimo numero de série usado pelo CA , cada certificado deve ter uma chave única , e outro arquivo para gravar quais certificados foram usados.

    sudo sh -c "echo '01' > /etc/ssl/CA/serial"
    sudo touch /etc/ssl/CA/index.txt
    
  3. O terceiro arquivo é um arquivo de configuração CA. Embora não estritamente necessário, é muito conveniente quando se trabalha com certificados múltiplos. Edite /etc/ssl/openssl.cnf e, em [ CA_default ], altere:

    dir             = /etc/ssl/             # Onde qualquer coisa é mantida.
    database        = $dir/CA/index.txt     # Arquivo de Indexação do Banco de Dados.
    certificate     = $dir/certs/cacert.pem # O Certificado CA.
    serial          = $dir/CA/serial        # O número serial atual.
    private_key     = $dir/private/cakey.pem# A chave privada.
    
  4. Próximo, crie sua própria assinatura de certificação

    openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650
    

    Você será solicitado a digitar as informações sobre o certificado.

  5. Agora instale o certificado raiz e chave:

    sudo mv cakey.pem /etc/ssl/private/
    sudo mv cacert.pem /etc/ssl/certs/
    
  6. Agora você está pronto para assinar certificados. O primeiro item necessário é uma CSR (Solicitação de Assinatura de Certificado), veja em “Gerando uma Assinatura de Requisição de Certificado (CSR)” para maiores detalhes. Assim que possuir uma CSR, digite o seguinte para gerar um certificado assinado pela Autoridade Certificadora:

    sudo openssl ca -in server.csr -config /etc/ssl/openssl.cnf
    

    Depois de entrar com com a senha para a chave CA , será solicitado que você assinar um certificado , e mais uma vez se aceitar o novo certificado . Você deve então ver uma grande quantidade de saídas relacionadas a criação de certificado

  7. Agora, deverá haver um novo arquivo, /etc/ssl/newcerts/01.pem, contendo a mesma saída. Copie e cole tudo entre as linhas -----BEGIN CERTIFICATE----- e ----END CERTIFICATE----- em um arquivo nomeado de acordo com o nome do host do servidor em que o certificado será instalado. Por exemplo, mail.example.com.crt é um bom nome descritivo.

    Subseqüentemente os certificados serão nomeados 02.pem, 03.pem, etc.

    [Nota]

    Substituir mail.example.com.crt com seu próprio nome descritivo.

  8. Enfim , copie o novo certificado para o host que precisa desse certificado , e configure as aplicações apropriadas para usa-los . O local padrão de instalação dos certificados é /etc/ssl/certs.Isso disponibiliza serviços múltiplos para o usar o mesmo certificado sem execessiva complicações de permissões de arquivos .

    Para aplicações que podem ser configuradas use um certificado CA, você deve copiar o arquivo /etc/ssl/certs/cacert.pem para /etc/ssl/certs/ no diretório em cada servidor.

Referências

  • For more detailed instructions on using cryptography see the SSL Certificates HOWTO by tlpd.org

  • The PKI Page contém uma lista de Certificate Authorities.

  • A página do Wikipedia HTTPS tem mais informações a respeito de HTTPS.

  • Para mais informações sobre o emphasis>OpenSSL

  • Além disso, O'Reilly's Segurança de Rede com OpenSSL é uma boa fonte de referência.