Nos dias que correm, é importante que todos os dados sensíveis transaccionados entre um cliente e um servidor sejam cifrados de modo a que estes não possam ser entendidos por terceiros. Na prática, quando acedemos a um serviço online que nos solicita dados pessoais ou credenciais de acesso (ex. sites de bancos) é importante que a toda a informação passada seja cifrada de modo a tornar-se ilegível. No caso dos servidor Web (entre outros serviços de uma rede), uma das formas de proceder a cifra dos dados é recorrendo ao protocolo SSL.
Depois de termos deixado aqui uma breve descrição sobre o que são chaves privadas e chaves publicas, um certificado digital, o protocolo SSL e o OpenSSL, hoje vamos aprender a produzir certificados digitais.
Para a criação do presente tutorial, recorri a uma máquina com o CentOS 6. Como referido no tutorial anterior, o OpenSSL permite criar e entidade de certificação privada e disponibiliza ferramentas para criação e gestão de chaves privadas e publicas e certificados digitais.
Caso não tenham o OpenSSL instalado, podem fazê-lo executando o comando
yum install openssl
Para podermos emitir um certificado X.509 é importante (apesar de opcional) rever alguns parâmetros no ficheiro de configuração do openSSL. No CentOS o ficheiro de configuração (openssl.cnf) encontra-se em /etc/pki/tls/openssl.cnf e nele podemos definir algumas informações relativamente à entidade certificadora e também indicar o directório onde os certificados vão ser guardados por omissão. De referir que este processo só é necessário efectuar a primeira vez.
###################################################################
[ ca ]
default_ca = CA_Pplware # The default ca section
####################################################################
[ CA_Pplware ]
dir = /etc/pki/CA # Where everything is kept
certs = $dir/certs # Where the issued certs are kept
crl_dir = $dir/crl # Where the issued crl are kept
database = $dir/index.txt # database index file.
#unique_subject = no # Set to 'no' to allow creation of
# several ctificates with same subject.
new_certs_dir = $dir/newcerts # default place for new certs.
certificate = $dir/cacert.pem # The CA certificate
serial = $dir/serial # The current serial number
crlnumber = $dir/crlnumber # the current crl number
# must be commented out to leave a V1 CR
L
crl = $dir/crl.pem # The current CRL
private_key = $dir/private/cakey.pem# The private key
RANDFILE = $dir/private/.rand # private random number file
x509_extensions = usr_cert # The extentions to add to the cert
# Comment out the following two lines for the "traditional"
# (and highly broken) format.
name_opt = ca_default # Subject Name options
cert_opt = ca_default # Certificate field options
# Extension copying option: use with caution.
# copy_extensions = copy
# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
# so this is commented out by default to leave a V1 CRL.
# crlnumber must also be commented out to leave a V1 CRL.
# crl_extensions = crl_ext
default_days = 365 # how long to certify for
default_crl_days = 30 # how long before next CRL
default_md = default # use public key default MD
preserve = no # keep passed DN ordering
……
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = PT
countryName_min = 2
countryName_max = 2
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = Guarda
localityName = Locality Name (eg, city)
localityName_default = Guarda
0.organizationName = Organization Name (eg, company)
0.organizationName_default = Pplware
…
Feitas as alterações, podemos passar de imediato à criação de certificados X.509.
Nota importante: Para que tudo funcione correctamente, é importante que a máquina onde temos o apache a correr tenha um nome. Esse informação pode ser definida em /etc/sysconfig/network no parâmetro HOSTNAME.
Criação de certificados para servidores
Para a criação dos certificados X.509 para o servidor apache devem executar os seguintes 3 passos:
Criação da chave privada RSA para o certificado do servidor
Esta chave RSA ira ser posteriormente utilizada para assinar o CSR (Certificate Signing Request – contem várias informações sobre a entidade a certificar, incluindo a chave publica).
openssl genrsa -des3 -out chaveprivada.key 2048
Nota1: Na parte final do processo de criação da chave privada é necessário indicar uma senha.
Criação do CSR para o certificado do servidor
openssl req -new -key chaveprivada.key -out certificado.csr
Nota2: No campo Common Name (CN) devem colocar o nome do servidor (ex. www.pplware.com)
Emitir certificado X.509 para o servidor indicado
openssl x509 -req -days 365 -in certificado.csr -signkey chaveprivada.key -out www.crt
Depois de aprendermos alguns conceitos associados à certificação digital e de termos ensinado hoje como criar certificados digitais para um servidor, no próximo artigo iremos ensinar a configurar o Apache para fazer uso dos certificados. Fiquem atentos!