Usando o OpenSSL para criar e gerenciar certificados

Autor:
Criado em: Ter, 21 Jun 2016 14:34:26 GMT


OpenSSL é uma ferramenta para lidar com certificados e conexões SSL, chamados também simplesmente de certificados seguros.

Todo certificado é composto de duas partes, a chave privativa, e o certificado público. O certificado é usado somente para criptografar os dados, e a chave é usada para ler estes dados criptografados, por isto ela é chamada de privativa e nunca deve ser enviada para quem você não confie, já o certificado é publico, quando você navega em um site seguro seu navegador receberá uma cópia deste certificado.

Para saber se um certificado é válido e verdadeiro ele deve ser assinado, uma entidade chamada CA, que você ou seu navegador confia plenamente, irá assinar o certificado e assumir a responsabilidade por ele ser verdadeiro e da pessoa que ele diz ser.

Você também pode criar uma CA, para assinar os seu certificados localmente, isso é usado dentro de empresas e em servidores secundários como email, mas não deve ser usado em um site público, pois os navegadores não irão conhecer sua CA e irão dizer que o certificado não é seguro!

Para gerar sua CA use os seguintes comandos:

openssl genrsa -des3 -out ca.key 4096
openssl req -new -x509 -days 365 -key ca.key -out ca.crt

Neste caso, ca.key será a chave e ca.crt será o certificado público, para um navegador ou sistema operacional reconhecer os certificados assinados pela sua CA, você deverá importar o arquivo ca.crt nele.

Para fazer seu certificado você deverá fazer duas etapas, na primeira você irá criar sua chave privativa e um arquivo chamado CSR, que é uma requisição para assinatura de certificado, esse arquivo é um pedido para que uma CA assine e crie um certificado segundo sua chave:

openssl genrsa -des3 -out client.key 4096 openssl req -new -key client.key -out client.csr

Se você for usar uma CA comercial, você deverá enviar este arquivo client.csr para que ela assine, caso você use sua CA própria você pode assinar usando o seguinte comando:

openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt

Você irá ter com este comando um novo arquivo chamado client.crt que é o seu certificado assinado!

Caso você precise dele em outros formatos, você pode também converter este arquivo, como por exemplo para PKCS12:

openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12

Ou se você precisar dele no formato PEM:

openssl pkcs12 -in client.p12 -out client.pem -clcerts