DevSecOps

3 nov, 2015

Como criar um certificado autoassinado SSL com OpenSSL

Publicidade

Criar um certificado SSL autoassinado não é difícil com OpenSSL. Esses tipos de certificados SSL são perfeitos para testes, ambientes de desenvolvimento ou qualquer outra coisa que requer SSL, mas isso não tem necessariamente que ser um certificado SSL confiável.

Se você usar isso em uma configuração Nginx ou Apache, os visitantes vão logo ver um grande mensagem de aviso em vermelho “Sua conexão não é privada”, antes que eles possam navegar pelo site. Isso não é para produção, apenas para testes.

Para gerar um certificado SSL autoassinado em um único comando openssl, execute o seguinte em seu terminal:

$ openssl req -x509 -sha256 -newkey rsa:2048 -keyout certificate.key -out certificate.crt -days 1024 -nodes

Várias perguntas aparecerão, mas a única que realmente importa é a questão Common Name (Nome Comum), que será usada como nome do hostname/dns para o qual o certificado SSL autoassinado foi feito. (Mesmo com um Common Name válido, ainda é um certificado SSL autoassinado, e navegadores ainda vão mostrá-lo como inválido não confiável.)

Esta é a saída do comando:

$ openssl req -x509 -sha256 -newkey rsa:2048 -keyout certificate.key -out certificate.crt -days 1024 -nodes

Generating a 2048 bit RSA private key
.............................+++
..............+++
writing new private key to 'certificate.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:BE
State or Province Name (full name) [Some-State]:Antwerp
Locality Name (eg, city) []:Antwerp
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Some Organization Ltd
Organizational Unit Name (eg, section) []:IT Department
Common Name (e.g. server FQDN or YOUR name) []: your.domain.tld
Email Address []:info@yourdomain.tld

Se você não quer preencher essas questões todas as vezes, pode executar um único comando com Common Name como um argumento de linha de comando. Isso vai gerar o certificado SSL autoassinado para você imediatamente, sem importuná-lo com perguntas como País, Organização, …

$ openssl req -x509 -sha256 -newkey rsa:2048 -keyout certificate.key -out certificate.crt -days 1024 -nodes -subj '/CN=my.domain.tld'

Generating a 2048 bit RSA private key
.....+++
...........................+++
writing new private key to 'certificate.key'
-----

O resultado com os dois comandos openssl será dois novos arquivos em seu diretório de trabalho atual.

$ ls -alh
-rw-r--r--   1 mattias  1.7K  certificate.crt
-rw-r--r--   1 mattias  1.6K  certificate.key

Você pode usar o certificate.key como a chave para suas configurações de SSL. Ele não tem uma senha associada a ele, que é o que a opção -nodes (sem criptografia DES) foi para quando executar o comando openssl. Se você quer uma senha na sua chave privada, remova essa opção e execute o openssl novamente.

$ cat certificate.key
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA4Ez4L6n8KNDJvBNlu2kqIiTNXM7PiyfD8OPSg665OXf1qaaA
...
P2JYe3EN8sVlUG7bx1b0D78UQA+KMkwuWNNaQyerSNc8QMC63DT5
-----END RSA PRIVATE KEY-----

O certificate.crt contém o arquivo de certificado, a parte “pública” do seu certificado.

$ cat certificate.crt
-----BEGIN CERTIFICATE-----
MIIE9zCCA9+gAwIBAgIJAKR+VA+yc2CzMA0GCSqGSIb3DQEBBQUAMIGtMQswCQYD
...
C4RviEJyE4xdmwsjzfkc3nJTJfFyT/uo+Cx+
-----END CERTIFICATE-----

Agora você tem um certificado SSL autoassinado e uma chave privada que você pode usar para suas configurações de servidor.

***

Mattias Geniar faz parte do time de colunistas internacionais do iMasters. A tradução do artigo é feita pela redação iMasters, com autorização do autor, e você pode acompanhar o artigo em inglês no link: https://ma.ttias.be/how-to-create-a-self-signed-ssl-certificate-with-openssl/