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:
Atualize as listas dos repositórios
usuario
@servidor
:~$
sudo aptitude update
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:
/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:
usuario
@servidor
:~$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:
openssl rsa -in
usuario
@servidor
:~$newkey.pem
-outopenkey.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.