Segurança Digital: Criando Certificados Digitais com o OpenSSL

Chega de teoria!

Agora que você sabe o que é um certificado e sua relação com criptografia/chaves públicas e privadas, como funcionam e para que servem, está na hora de fazer um com suas próprias mãos.

Aprenda como criar, configurar, fazer o pedido (request) para a CA e revogar certificados em OpenSSL

Lendo o seguinte artigo você irá, facilmente, criar um certificado.
Porém, se quiser entender melhor como funciona, recomendo antes você ler o artigo sobre criptografia assimétrica e importância das chaves, o de chaves públicas e privadas e o que explica o funcionamento dos certificados digitais.


Uma das maneiras de criar certificados é através da ferramenta OpenSSL, no Linux, que é um conjunto de bibliotecas que usa criptografia para gerar os certificados descritos neste artigo.
Vamos usar, configurar e criar certificados X.509.

Entre no site da OpenSSL
www.openssl.org

E baixe a última versão, geralmente é a que está destacada e escrita [LATEST]:
www.openssl.org/source/

Você pode ir na pasta que baixou, clicar com o botão direito e extrair.
Ou pelo terminal. Aqui, o comando foi
tar -zxf openssl-1.0.1c.tar.gz

Agora, pelo terminal, entre na pasta através do comando 'cd'
cd openssl-1.0.1c

Vamos dar início a instalação do OpenSSL. Primeiro, configure
./config

Depois, o make, que irá preparar o sistema e os arquivos para a instalação, algumas coisas aparecerão na tela [veja a magia no ar...as coisas estão se instalando, se configurando, compilando...tudo na sua frente. Nada de clicar em um executável e tudo acontecer sem você ver. Você está vendo como tudo acontece. Não é lindo?]:
make

Com tudo pronto, instale:
make install

Caso tenha problemas de permissão:
sudo make install


Pronto, o OpenSSL está instalado.
Certifique-se indo na pasta /usr/local/ssl/misc
Dê o comando 'ls' e veja os arquivos 'CA.sh', 'CA.pl' e outros, criam os certificados.

Caso queira mais detalhes e opções sobre a instalação, como testes e instalação em diferentes diretórios, consulte o arquivo INSTALL na pasta openssl que você descompactou.

Para efeito de organização, recomendo que crie uma pasta para cada certificado que vá criar:
mkdir cert1

Vamos criar o certificando usando o script CA.sh feito em Shell, lembrando que ele, assim como CA.pl feito em Perl são apenas ferramentas, os certificados podem ser feitos sem eles, usando as bibliotecas do OpenSSL, mas isso se torna um trabalho muito tedioso.
Para criar, entre na pasta do seu certificado e rode o scrip de lá e preencha o que lhe for solicitado:
cd cert1
sh /usr/local/ssl/misc/CA.sh -newca



De início, vai perguntar pra qual arquivo (filename) você deseja criar o CA, se nenhum, se deseja criar, dê enter e responda as perguntas.
Se desejar automatizar essas opções (Nome da empresa, grupo, cidade, estado), configure o arquivo openssl.cnf

Note que dentro de sua pasta foi criada uma pasta chamada demoCA, com toda a parafernália de arquivos, certificados e keys.

Essa foi a criação do CA, usando '-newca' como opção no script.

Mas somente criamos o CA. Criar um certificado qualquer um cria, ele precisa mesmo é ter valor.


- CSR: Certificate Signing Request


Vamos agora solicitar o Certificado Digital, ou seja, fazer um request, um pedido.
Vamos fazer isso com a opção '-newreq', que irá criar uma chave pública, e terá informações sobre nossa empresa. Esse CSR vai assinado com a chave privada, então enviamos tudo isso criptografado para a CA, via chave pública.

Só então é que as autoridades validam nosso certificado.
Na prática, as empresas visitam o cliente para ter certeza das informações que este passou via CSR.

Porém, como vamos criar certificados caseiros, vamos ao OpenSSL:

La na sua pasta:
sudo sh /usr/local/ssl/misc/CA.sh -newreq



Preencha os dados.
Evite sempre usar cedilha, acento e (" ' ! @ # $ % ¨ & * _ - + = § ¬ ¢ £ ³ ² ` ´ [ ] { } ( ) ª º ^ ~ ? / \ ; : . , < > |).
Caso esteja mexendo com Web, sua URL vai em Commom Name.

Você receberá a informação:
'Request is in newreq.pem, private key is in newkey.pem'

Ou seja, seu pedido está em 'newreq.pem' e sua chave privada em 'newkey.pem'.
Faça uma cópia desses arquivos e/ou mude o nome deles para algo melhor, 'projeto1req.pem' e 'projeto1key.pem'

Abra lá seu request, o meu ficou assim:
-----BEGIN CERTIFICATE REQUEST-----
MIIB5jCCAU8CAQAwgY4xCzAJBgNVBAYTAmJyMQswCQYDVQQIDAJjZTEVMBMGA1UE
BwwMY2FuaW5kZXppbmhvMQ4wDAYDVQQKDAVncnBlYzEMMAoGA1UECwwDdWZjMREw
DwYDVQQDDAhwcm9nLmNvbTEqMCgGCSqGSIb3DQEJARYbamFybGlzc29uLm1vcmVp
cmFAZ21haWwuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCpE3rqkTRp
qv/Vlgmfp6sEBqUrh12gz7lLKCIhrHgK09UwiRC7l3POjD04nuNkBW+FKN94kFVN
T9UrkmTmmt1bvUuGuoUNu2lJOkP0wJnkDy8fgW80xqE6KHEpzIeWTa25QiSvm7xJ
Msz6WTedaevNG2KdCcek3M5PQOCLpb2iRwIDAQABoBcwFQYJKoZIhvcNAQkHMQgM
BjEyMzQ1NjANBgkqhkiG9w0BAQUFAAOBgQCWHoMZE4pFP7Xz1qNBHJs9DLzgq9kd
GLgnvZHm6ZO+mknoSc3+z7o3S453y2cI65ygG/B4K/gMv0FiqSV52g//prb1V5nu
DmkuOfOl5PBujMgTjOe/wz+AmDwyVkiBhyproLLGBX+9SloUsQItR13O72htrTu7
/JTABMGAfHXc6A==
-----END CERTIFICATE REQUEST-----

Todas as informações estão aí. Que maravilha essa criptografia, não?
Geralmente é essa informação que as empresas pedem pra validar seu certificado.

Bom, se for seu caso criar o certificado e fazer o pedido em uma CA 'de verdade', pode parar por aqui e espero ter te ajudado.

- Assinando

Caso queira criar e assinar seus certificados, vamos continuar.
Isso é feito com a opção '-sign' (sabendo inglês, deve notar que é tudo bem auto explicativo).
sudo sh /usr/local/ssl/misc/CA -sign



Vai mostrar as informações do certificado e vai perguntar se vai querer assinar.
Isso é particularmente importante se você estiver numa máquina que é uma espécie de Administrador e precisar certificar o certificado dos outros.
Por exemplo, é você que certifica as máquinas que farão parte do Grid, se estão de acordo com os protocolos etc.

Após a assinatura, o certificado certificado (?) estará em 'newcert.pem', como mostrou a última linha:
Signed certificate is in newcert.pem

Outras informações estão no 'newreq.pem'

Agora vá na demoCA e abra o index.txt, veja que ele tem algumas informações sobre os certificados. Note o 'V', é de válido.

- Revogando


Vamos supor que alguém te hackeou, descobriram sua senha ou tentaram 'logar em você' com um certificado estranho.
O OpenSSl oferece uma ferramenta pra revogar os certificados. Vamos revogar o que criamos, o newcert.pem


sudo openssl ca -revoke newcert.pem



Bote a senha, e estará revogado. Agora veja o que aconteceu com o index.txt

Os arquivos revogados ficam em uma lista, a CRL - Certificate Revolotacion List. Antes de revogar, crie uma:
sudo openssl ca -gencrl cert_rev.pem

Crie a pasta demoCA/crlnumber caso tenha algum erro do tipo 'no such file'
echo 01 > demoCA/crlnumber

Então revogue.

Há muito mais informações sobre essa poderosíssima ferramenta que é esta biblioteca OpenSSL, como a validade dos certificados, como usar com o Windows etc.
Você pode obter mais informações na documentação deles ou no link da primeira fonte.

Fontes:
http://www.ipsec-howto.org/x600.html
http://www.globus.org
http://pt.wikipedia.org/wiki/Certificado_digital
http://en.wikipedia.org/wiki/Certificate_signing_request

Um comentário:

Anônimo disse...

Alguém tem ideia se tem como pegar a assinatura de um certificado digital Smart Card? Tipo preciso assinar documentos xml com a assinatura do certificado, preciso criar algo que pegue a assinatura do certificado, e guardar dentro de uma variável normal, única dúvida é sobre como criar uma conexão com o certificado e pegar essa assinatura só isso porque inserir no arquivo é barbada.