Apêndice C. Gerando um certificado SSL auto-assinado

Certificados SSL são necessários para que um determinado serviço opere com suporte a conexão segura por meio de criptografia.

Uma maneira de se obter o certificado, é através de uma Autoridade Certificadora (Certificate Authority ou CA). Outra maneira, é gerando ele por conta própria através de ferramentas adeqüadas.

Um certificado gerado através de ferramentas pode ser de dois tipos: auto-assinado (self-signed) ou assinado por uma CA. No caso de ser assinado por uma CA, você terá que gerar dois certificados: um para a sua própria CA, e o outro para o servidor, sendo que esse último será assinado pela CA que você criou. A maneira mais direta é gerar um certificado auto-assinado, pois nesse caso, não será necessário um certificado separado apenas para a CA.

Quando utilizamos conexão segura, os clientes precisam apenas dos certificados das CA's em quem eles confiam. Por isso que manter certificados auto-assinados pode tornar-se mais difícil. Para que o cliente se conecte a um serviço que usa certificado auto-assinado, precisará de uma cópia do próprio certificado do servidor já que não existe um certificado separado apenas para a CA que o emitiu. Ou seja, para cada serviço existirá um certificado que deverá ser instalado em cada cliente, enquanto que poderíamos instalar apenas um certificado em cada cliente: o da CA responsável pela emissão de todos os certificados da rede.

Repare que cada certificado aponta para uma CA, formando uma cadeia de confiança. A raiz dessa cadeia, que geralmente é uma CA de maior confiança, sempre vai possuir um certificado auto-assinado. Ou seja, certificados auto-assinados funcionam como se fossem a raiz da cadeia de confiança.

Vamos explicar abaixo o processo de criação de um certificado auto-assinado. Se você estiver pensando em disponibilizar suporte SSL/TLS a outros serviços de sua rede, talvez a melhor opção seja utilizar certificados assinado por uma CA. Nesse caso, consulte o site Certificate Management and Generation with OpenSSL para maiores informações sobre como criar uma CA para sua rede e assinar os seus próprios certificados, ou o site da CAcert, que é uma organização que fornece certificados digitais assinados gratuitamente. Também existem várias empresas que vendem este serviço.

Para criar um certificado digital, é necessário que o pacote OpenSSL esteja instalado no servidor. Execute os seguintes comandos na distriuição Ubuntu para realizar essa instalação:

  1. Atualize as listas dos repositórios

    usuario@servidor:~$ sudo aptitude update
    
  2. Instale o pacote OpenSSL

    usuario@servidor:~$ sudo aptitude install openssl
    

Tendo o pacote OpenSSL instalado, execute o script CA com o parâmetro newreq para criar os arquivos do certificado auto-assinado e de sua respectiva chave privada:

usuario@servidor:~$ /usr/lib/ssl/misc/CA.sh -newreq
Generating a 1024 bit RSA private key
...........++++++
..++++++
writing new private key to 'newkey.pem'
Enter PEM pass phrase:secret
Verifying - Enter PEM pass phrase:secret
-----
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]:BR
State or Province Name (full name) [Some-State]:Sao Paulo
Locality Name (eg, city) []:Sao Paulo
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Universidade de 
Sao Paulo
Organizational Unit Name (eg, section) []:Instituto de Matematica e Estatis
tica 
Common Name (eg, YOUR name) []:servidor.ime.usp.br
Email Address []:.

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:.
An optional company name []:.
Request is in newreq.pem, private key is in newkey.pem

Não é necessário preencher os três últimos campos, por isso colocamos um ponto ('.') em cada um deles. Você pode preenchê-los se achar conveniente. É importante que o campo Common Name seja preenchido com o endereço correto do servidor (nome e domínio).

Teremos como resultado da execução do script CA dois arquivos: newreq.pem, que contém o certificado auto-assinado do servidor; e newkey.pem, que contém a chave privada do certificado protegida por uma senha. Esses dois arquivos estão listados abaixo:

Exemplo C.1. Arquivo do certificado SSL auto-assinado (newreq.pem)

-----BEGIN CERTIFICATE REQUEST-----
MIIB6DCCAVECAQAwgacxCzAJBgNVBAYTAkJSMRIwEAYDVQQIEwlTYW8gUGF1bG8x
EjAQBgNVBAcTCVNhbyBQYXVsbzEiMCAGA1UEChMZVW5pdmVyc2lkYWRlIGRlIFNh
byBQYXVsbzEuMCwGA1UECxMlSW5zdGl0dXRvIGRlIE1hdGVtYXRpY2EgZSBFc3Rh
dGlzdGljYTEcMBoGA1UEAxMTc2Vydmlkb3IuaW1lLnVzcC5icjCBnzANBgkqhkiG
9w0BAQEFAAOBjQAwgYkCgYEAzKogq6bdDdJeqwMeMf0tUV6k6D+x9cRNA4x3mWwJ
oFPmJAA39W8PoH8aEBNvbMuy4NSiM/Biy/1r6FmWiXQslsESnGTevfl4eZCDAsSK
XuoXWnP7k9AI7ViVZFP44dFnXjW7z58z4VtCJ8fmfhpiqhPdarHVYxf0CxabXdQU
hwUCAwEAAaAAMA0GCSqGSIb3DQEBBQUAA4GBALiDK8gb3omPp0Q+wk04QhfWavbQ
DTkOhCJuIsA3hDtGgCE+7JTHIBDLJPLdIQWs9qaVDjN9Uo3xRHZXQCM0pZ2dfhot
IGasL7xjfdnx8scacAQ/orv98xEe0jOQhZVuuel8Hh4n127S7tBlrggOwc+l25p5
1CAYNwmoTWIcAbmj
-----END CERTIFICATE REQUEST-----

Exemplo C.2. Arquivo da chave privada com senha (newkey.pem)

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,3F786C9DC54571D9

yQrotxI53BdVvY+q+uy/0G0TTBr1e9V3TE65J0qLSqgdnIQ8Z68c5iwUFA/FF0ay
j40YaESPSodFbvPt9fMzLaNhkoRj3QmCfNkuboiJpfHX+DOXmDakE17OWOjOoUR2
hIOK6aSysNZ34UJEhdvL33voAzFp3SXNqhgJY4L9ctEeR7fr5GqQ+ewCR4IYiuOI
nfqbDVTE7H2tsaHqzB+ND/Aqul+YDq3NQRH0zutX4k0TEEiCIimKFbz8LDbXLHzN
sdwdq8ODwjlVnFbOTXq7ZpdEdcWgFs+mdLu7Bp6maG9u9qXPxD/ToLOiH/B68lJQ
T7SdysxUrft0xo5LNMgakKCrPqXjfsGhT6IxHltFV6WEKiOnVLH3CaEYsm1qpyDR
G7Wtf+/gzwAMRVdYptO1MaL8paupxq4OXjBBWWvpymQ/qbnpVDi5CA9rPCTfv9OQ
sXgA9fo0tGGd5AD6mJZd94LxHG+54v3mWR+N6SvMppqtD8Ym2yVwDJi3zQk7uhwH
PEQ1I7/6TU3VHLaL6Zf90+CRKUrOe6+86jNj/p4Q2WRojfEabcyO4yqE7jPez1aB
05PIaXMh0LwBbqTNmWPEe+nStvvP9znc8fNGa9KMZ2SA/vVczGu9nwTBav3NZtYF
SRZ71P9pAxK1rfU5jGDNts61+56hGMMwIuqLg0l4Dr3M0w1Y+zFjT0JQqoQKxcJz
UEMLIlX+WO8uUol2PGchqBRnsk6wsp3mdab3FjHm79uiEpi2Oi79uPM6D2Acmxue
VGCACKw+hjttKn4VprOIXNA0UD9SL6EFuGAlsynJn2DRsJzLiNXTmg==
-----END RSA PRIVATE KEY-----

Se o certificado auto-assinado que foi criado for usado para proteger um serviço de rede, talvez seja necessário remover a senha de acesso à chave privada. Se a chave privada for mantida com a senha, toda vez que o serviço que a utilizar for inicializado, a senha terá que ser digitada pelo administrador. Para remover a senha de acesso à chave privada execute o seguinte comando:

usuario@servidor:~$ openssl rsa -in newkey.pem -out openkey.pem
Enter pass phrase for newkey.pem:secret
writing RSA key

Esse comando vai abrir o arquivo da chave privada, para isso ele pedirá a mesma senha que você digitou no início da geração do certificado. Ele criará então um novo arquivo, contendo a mesma chave privada, porém sem senha de acesso, que será guardado no openkey.pem ou outro arquivo especificado na linha de comando. A seguir temos um exemplo desse arquivo:

Exemplo C.3. Arquivo da chave privada sem senha (openkey.pem)

-----BEGIN RSA PRIVATE KEY-----
MIICXgIBAAKBgQDMqiCrpt0N0l6rAx4x/S1RXqToP7H1xE0DjHeZbAmgU+YkADf1
bw+gfxoQE29sy7Lg1KIz8GLL/WvoWZaJdCyWwRKcZN69+Xh5kIMCxIpe6hdac/uT
0AjtWJVkU/jh0WdeNbvPnzPhW0Inx+Z+GmKqE91qsdVjF/QLFptd1BSHBQIDAQAB
AoGBAJnzt5Ond0z4XAHj3IjZ24cD3KRflWw793qd5TFhVXRm6A1YpL9YhbbDJUXG
eOCr8aiyCjlrr8Wmoc8r5NMMsqRy4FIfJzVaAJozTM6r1JkdITHjW2DVN2zF3Tt6
PGfWygRwfMVqH5rNMpXV/3HwNqemoZJwRiWNhp9dP5vzzjhBAkEA9gWG9USF2mMx
hD0Jg0ZRm99JX6pwsJ+PXm+j1r1sILawNZcs4KFfcl2HAe9VWq/15eK9QJV8AmZ3
iD6QPXjYGQJBANT3L2yKxdxawEj5I7gf+iUm4h9Jxc2UlSEoFO27ZvegQ4Mcw4cd
+/MFvjbM+5KBnFu2RV3t0Gc8j/lCODOms80CQQDKUnFScy/BEaI/JhMUqlei4FXv
HrPeDNpSx2ztxImPva3b5J87fHqKCvBkXvbKxbpre7Q30LdTIgFbQlhMtXzBAkEA
t0mWk0BMUf35B9UEnO9IhrkUXAFOMET0pHiuqnxjfjN8Z1dWIO/5a4tBzkBVNB5A
x93zjYejmXZSIyCO5kVO8QJAJN54yvk62yolf0AKgDVB21A4uwGUFTyxZCdN/ZoO
m9W7YpQnowAe0t2RRm/J5IdDWSOAhdM5aXYDQTJVSN0qeg==
-----END RSA PRIVATE KEY-----

Repare a ausência do cabeçalho em relação ao anterior. Não se esqueça de restringir o acesso a esse arquivo agora, já que a chave do certificado não está mais protegida.