O HTTPS é a junção entre o protocolo HTTP e um protocolo seguro para transferência de dados (habitualmente SSL que não deve ser confundido com SSH). Em cada sessão iniciada (leia-se, cada vez que visitam um site através de HTTPS) todos os dados são transmitidos de forma encriptada. O objetivo é a salvaguarda dos dados transferidos entre o utilizador e o servidor.

Atenção: este artigo foi escrito em 2015 e muita coisa mudou desde aí. A StartSSL faz parte da WoTrus e deixaram de disponibilizar certificados gratuítos. As altenativas passam por usares o serviço Let's Encrypt, se o servidor que utilizas o disponibilizar ou então comprar um certificado barato em SSLs.com

O protocolo SSL já existe há duas décadas, mas há (havia) uma razão pela qual os sites, blogs e até lojas de comércio eletrónico e aplicações com dados privados não usarem o protocolo SSL - desde cedo a VeriSign ganhou o controlo do mercado e os certificados SSL eram bastante caros.

Neste momento existem inúmeras entidades capazes de emitir certificados SSL desde 0€ a ~1500€. E questionam então porque é que é necessário existir uma entidade para emitir um certificado SSL? É simples, podem vocês criar o certificado no vosso computador, mas nunca será aceite pelos browsers. Este tipo de certificados é chamado certificado auto assinado (em inglês, self-signed certificate). A desvantagem no uso destes certificados é não serem marcados como seguros para os browsers e ser apresentada uma mensagem deste tipo:

Criação de certificado SSL gratuito e importação no cPanel (guia) images/06-guia-criacao-certificado-ssl-gratuito-e-importacao-cpanel/google-chrome-self-signed-ssl-certificate.png

Esta pode ser uma boa opção para aplicações intranet, que não tenham acesso fora da rede. Isto porque os utilizadores da rede confiam nessa aplicação e, desta forma, as comunicações continuam a ser encriptadas.

No entanto, para sites e aplicações de acesso ao público em geral, esta não é uma mensagem que transmita confiança. Assim, é necessária a criação de um certificado através de uma empresa autorizada pelos browsers (política de certificados do Chrome).

São várias as empresas que emitem certificados a baixo custo, como a PositiveSSL (da Comodo), RapidSSL, GoDaddy e a StartSSL. Existem algumas diferenças entre os tipos de certificados emitidos e, na escolha, é preciso estar atento também aos preços de renovação ou revogação de certificados. A escolha também deve ser feita mediante as necessidades de cada caso.

Na nossa análise optámos pelo serviço StartSSL Free (Class 1) da StartSSL, que permite a emissão de certificados a pessoas individuais (não podem fazer o registo para uma empresa) desde que não sejam sites de comércio electrónico ou processem transações monetárias. No nosso caso pretendemos emitir o certificado para o dominio dominio.pt e para o subdominio www.dominio.pt e o Class 1 é suficiente e livre de custos (sim, não custa dinheiro, é gratuito). Ainda assim, recomendo fortemente uma leitura às perguntas mais frequentes para garantir que o serviço corresponde às vossas necessidades.

O processo de criação do certificado pode ser algo complexo para quem não esteja habituado a estas lides. Este processo divide-se em 3 partes:

  1. Registo na StartSSL e gestão do certificado no browser
  2. Criação de chaves e do certificado SSL para o dominio
  3. Aplicação do certificado no servidor web (no nosso caso, através de cPanel)

1. Registo na StartSSL e gestão do certificado no browser

O registo na StartSSL é diferente do registo de uma conta de email ou de Facebook. Neste registo não é solicitada uma password. Isto porque a autenticação na área reservada da StartSSL é feita através de um certificado que será armazenado no browser que estão a usar. Ou seja, depois do registo com sucesso, o certificado é armazenado no browser e basta usarem esse browser para fazerem autenticação na área reservada.

Vamos então por passos:

  1. Aceder ao site https://www.startssl.com/ e aceder à área de registo / login

    Criação de certificado SSL gratuito e importação no cPanel (guia) images/06-guia-criacao-certificado-ssl-gratuito-e-importacao-cpanel/startssl-homepage.png
    Criação de certificado SSL gratuito e importação no cPanel (guia) images/06-guia-criacao-certificado-ssl-gratuito-e-importacao-cpanel/startssl-signup-and-login.png

    Nota: É provável que vos sejam apresentados erros ou falhas de ligação com o servidor. No meu caso isto aconteceu algumas vezes e tive de aguardar algum tempo até conseguir aceder ao formulário e submeter os dados.

  2. Preencher o formulário de registo e submeter o formulário. Ao submeter o formulário será apresentada uma página a solicitar um código de validação (para comprovar o vosso acesso ao email). Não fechem esta página. Depois de alguns minutos irão receber o código por email e devem introduzir esse código no campo e clicar em Continue.

    Criação de certificado SSL gratuito e importação no cPanel (guia) images/06-guia-criacao-certificado-ssl-gratuito-e-importacao-cpanel/startssl-signup-form.png
    Criação de certificado SSL gratuito e importação no cPanel (guia) images/06-guia-criacao-certificado-ssl-gratuito-e-importacao-cpanel/startssl-complete-registration-code.png

    Nota: Quando eu submeti o meu formulário, foi apresentada uma mensagem que indicava que o meu registo iria ser validado e passado alguns segundos a página fechou-se automaticamente. Se isto vos acontecer, aguardem pelo email que trás o link para a página de validação.

  3. De seguida é apresentado um ecrã para gerar uma chave privada. Notem que esta chave privada não é para o certificado SSL do domínio, mas para o certificado de autenticação usado no acesso à área reservada da StartSSL. Selecionem Continue e, no ecrã seguinte, Install.

    Criação de certificado SSL gratuito e importação no cPanel (guia) images/06-guia-criacao-certificado-ssl-gratuito-e-importacao-cpanel/startssl-generate-private-key.png
    Criação de certificado SSL gratuito e importação no cPanel (guia) images/06-guia-criacao-certificado-ssl-gratuito-e-importacao-cpanel/138-startssl-install-certificate.png
  4. Se tudo correu bem, devem ver um ecrã a indicar que o certificado foi instalado com sucesso. Será também apresentada uma mensagem (pelo menos no Chrome), abaixo da barra de endereços, que indica que o certificado foi guardado com sucesso. Esta mensagem indica que o certificado de acesso ao painel de controlo da StartSSL foi instalado no browser com sucesso.

    Criação de certificado SSL gratuito e importação no cPanel (guia) images/06-guia-criacao-certificado-ssl-gratuito-e-importacao-cpanel/137-startssl-certificate-successfully-installed.png
  5. Para aceder ao painel de controlo / área reservada da StartSSL é obrigatório o uso deste certificado. Portanto, o melhor a fazer neste momento é criar um backup deste certificado. Caso percam este certificado ficam sem acesso à conta. Para fazerem backup do certificado podem visitar a página de perguntas mais frequentes. No Chrome devem aceder às Definições » Mostrar definições avançadas…. Na seção HTTPS/SSL devem clicar em Gerir certificados…. Selecionem o certificado da StartSSL e carreguem no botão Exportar…. Sigam os passos do assistente onde devem exportar a chave privada e o ficheiro deverá ser exportado no formato PKCS n.º12

    Criação de certificado SSL gratuito e importação no cPanel (guia) images/06-guia-criacao-certificado-ssl-gratuito-e-importacao-cpanel/136-chrome-manage-ssl-certificates.png
    Criação de certificado SSL gratuito e importação no cPanel (guia) images/06-guia-criacao-certificado-ssl-gratuito-e-importacao-cpanel/135-chrome-export-certificate-with-private-key.png
    Criação de certificado SSL gratuito e importação no cPanel (guia) images/06-guia-criacao-certificado-ssl-gratuito-e-importacao-cpanel/134-chrome-export-filetype-properties.png

    No final, guardem esse ficheiro em segurança. Se pretenderem aceder à área reservada noutro computador ou browser, é necessário importar o certificado.

2. Criação de chaves e do certificado SSL para o dominio

  1. Em primeiro lugar, é necessário garantir à StartSSL que somos responsáveis pelo domínio para o qual pretendemos criar o certificado. Este processo é feito através de email, semelhante ao processo de criação do certificado de autenticação. É necessário acederem à área reservada e clicarem no separador Validations Wizzard e selecionar a opção “Domain Name Validation”. Depois de clicarem no botão Continue devem introduzir o domínio.

    Criação de certificado SSL gratuito e importação no cPanel (guia) images/06-guia-criacao-certificado-ssl-gratuito-e-importacao-cpanel/133-startssl-domain-name-verification.png
    Criação de certificado SSL gratuito e importação no cPanel (guia) images/06-guia-criacao-certificado-ssl-gratuito-e-importacao-cpanel/132-startssl-enter-domain-name.png
  2. No ecrã seguinte será apresentada uma lista de emails para o qual será enviado o código de validação. Novamente, este processo serve para garantir que são responsáveis pelo domínio em causa. Assim, a lista apresentada é composta por postmaster@dominio.pt, hostmaster@dominio.pt e webmaster@dominio.pt. É ainda apresentado um (ou mais) email associado à Entidade Gestora do domínio que provavelmente pertencerá à empresa onde registaram o domínio. Selecionem um email e carreguem em Continue.

    Criação de certificado SSL gratuito e importação no cPanel (guia) images/06-guia-criacao-certificado-ssl-gratuito-e-importacao-cpanel/131-startssl-domain-verification-email.png
  3. Depois de receberem o email com o código de verificação, introduzam esse código no novo ecrã e cliquem em Continue. Se tudo correr bem será apresentada uma mensagem a indicar que a validação foi efetuada com sucesso.

    Criação de certificado SSL gratuito e importação no cPanel (guia) images/06-guia-criacao-certificado-ssl-gratuito-e-importacao-cpanel/130-startssl-complete-domain-validation.png
    Criação de certificado SSL gratuito e importação no cPanel (guia) images/06-guia-criacao-certificado-ssl-gratuito-e-importacao-cpanel/129-startssl-domain-validation-successful.png
  4. Depois deste processo de validação do domínio, passamos para a criação do certificado SSL. Neste momento podem criar a chave privada através da área reservada ou criar tudo localmente, no vosso computador. Embora a FAQ indique que a chave não é armazenada nos servidores da StartSSL, é sempre mais seguro fazer este processo localmente. Para isso será necessário usar o OpenSSL, que vem instalado de origem em instalações Linux. Caso estejam a usar Windows é necessário descarregar e instalar as binários. Caso não pretendam criar a chave privada localmente podem passar ao passo 8.

  5. Assumindo que já têm instalado o OpenSSL, deverão criar a chave RSA de 2048 bits através da linha de comandos, com

    openssl genrsa -aes256 -out chave-privada-encriptada-dominio.key 2048

    Neste processo será solicitada uma palavra passe. Escolham uma complexa e recordem-se desta password. Este processo cria a chave privada encriptada.

    Criação de certificado SSL gratuito e importação no cPanel (guia) images/06-guia-criacao-certificado-ssl-gratuito-e-importacao-cpanel/128-command-line-openssl-create-private-key.png
  6. O próximo passo é a descodificação da chave gerada anteriormente com o objetivo de criar o CSR (Certificate signing request). Para descodificar a chave privada deve ser executado o comando

    openssl rsa -in chave-privada-encriptada-dominio.key -out chave-privada-descodificada.key
    Criação de certificado SSL gratuito e importação no cPanel (guia) images/06-guia-criacao-certificado-ssl-gratuito-e-importacao-cpanel/127-command-line-decode-private-key.png
  7. Agora é altura de criar o CSR através do comando

    openssl req -new -sha256 -key chave-privada-descodificada.key -out dominio.pt.csr

    Respondam às questões que vos vão sendo apresentadas. A introdução da challenge password não é obrigatória. Caso preencham este campo guardem a password que será necessária caso queiram reinstalar ou revogar o certificado. Notem que este campo não tem a mesma função que a passphrase introduzida na criação do certificado.

    Criação de certificado SSL gratuito e importação no cPanel (guia) images/06-guia-criacao-certificado-ssl-gratuito-e-importacao-cpanel/126-command-line-create-csr-file-openssl.png
  8. Neste momento já criámos o chave privada e o CSR e vamos proceder para a criação do certificado na área reservada da StartSSL. Nessa área, acedam ao separador Certificates Wizzard e selecionem a opção “Web Server SSL/TLS Certificate”. No ecrã seguinte, uma vez que criámos a chave privada localmente, podemos clicar em Skip. Se optou por não criar a chave com o OpenSSL, preencha os dados do formulário.

    Criação de certificado SSL gratuito e importação no cPanel (guia) images/06-guia-criacao-certificado-ssl-gratuito-e-importacao-cpanel/125-startssl-certificate-purpose.png
    Criação de certificado SSL gratuito e importação no cPanel (guia) images/06-guia-criacao-certificado-ssl-gratuito-e-importacao-cpanel/124-startssl-generate-private-domain-key.png
  9. Abra o ficheiro CSR (ao qual demos o nome dominio.pt.csr) com um editor de texto e copie o conteúdo desse ficheiro. Cole na caixa de texto do ecrã e clique em Continue. Deverá agora ser apresentado um ecrã que indica que o CSR foi submetido com sucesso.

    Criação de certificado SSL gratuito e importação no cPanel (guia) images/06-guia-criacao-certificado-ssl-gratuito-e-importacao-cpanel/123-startssl-submit-csr.png
    Criação de certificado SSL gratuito e importação no cPanel (guia) images/06-guia-criacao-certificado-ssl-gratuito-e-importacao-cpanel/122-startssl-certificate-request-received.png
  10. Agora é necessário selecionar o domínio (anteriormente validado) e definir um subdomínio (no meu caso usei www)

    Criação de certificado SSL gratuito e importação no cPanel (guia) images/06-guia-criacao-certificado-ssl-gratuito-e-importacao-cpanel/121-startssl-add-domains.png
    Criação de certificado SSL gratuito e importação no cPanel (guia) images/06-guia-criacao-certificado-ssl-gratuito-e-importacao-cpanel/120-startssl-set-subdomain-for-certificate.png
  11. O último ecrã apresentado é um resumo da informação e, para concluir, devem carregar em Continue. Serão levados para outro ecrã com uma caixa de texto que contém o certificado. Copiem esse texto para um ficheiro e podem dar-lhe qualquer nome (por exemplo, dominio-certificado.txt). Convém guardar também os ficheiros ROOT e INTERMEDIATE, apresentados abaixo da caixa de texto, que serão necessários para importar no cPanel. Para isso basta clicar com o botão direito em cima dos links e selecionar a opção “guardar como”.

    Criação de certificado SSL gratuito e importação no cPanel (guia) images/06-guia-criacao-certificado-ssl-gratuito-e-importacao-cpanel/119-startssl-ready-processing-certificate.png

    Nota: É possível que recebam uma mensagem a indicar Additional Check Required!. Neste caso, terão de aguardar (no meu caso, 30 minutos) pelo envio do email para concluir o processo. O processo neste caso é um pouco diferente pelo que devem seguir as instruções do email para adquirir o certificado e devem descarregar o CABUNDLE da FAQ.

  12. O certificado está criado e é válido. Convém armazenar todos estes ficheiros numa localização segura, de preferência noutro sistema encriptado, como o TrueCrypt 7.1a (o TrueCrypt foi um projeto opensource que ainda é considerado o mais seguro. Na versão 7.2 foi anunciado o cancelamento do desenvolvimento, pelo que se presume que esta versão possa não ser segura - até porque sugere o sistema de encriptação do Windows). Podem encontrar alternativas neste post do howtogeek.com.

3. Aplicação do certificado num alojamento partilhado com cPanel

  1. Desde a versão 11.38 do cPanel e WHM é possível instalar um certificado SSL num alojamento partilhado. Isto quer dizer que deixa de ser necessária a aquisição de um IP dedicado o que são boas notícias para quem paga. Para instalar o certificado devem aceder ao cPanel, à seção Segurança e aceder à opção SSL/TLS Manager.

    Criação de certificado SSL gratuito e importação no cPanel (guia) images/06-guia-criacao-certificado-ssl-gratuito-e-importacao-cpanel/117-cpanel-ssl-tls-manager.png
  2. São apresentadas várias opções e devem aceder à opção Manage SSL Sites do grupo Install and Manage SSL for your site (HTTPS). Este printscreen foi retirado da versão 11.46.2

    Criação de certificado SSL gratuito e importação no cPanel (guia) images/06-guia-criacao-certificado-ssl-gratuito-e-importacao-cpanel/118-cpanel-manage-ssl-sites.png
  3. Neste ecrã, selecionem o domínio onde pretendem adicionar o certificado. Na caixa de texto Certificado: (CRT) devem incluir o conteúdo do último ficheiro criado pelo StartSSL (ao qual dei o nome dominio-certificado.txt). Em Chave Privada: (KEY) devem adicionar o conteúdo do ficheiro da chave privada (passo 2.6, nome chave-privada-descodificada.key). Por fim, na área Bundle Autoridade Certificadora: (CABUNDLE) devem adicionar o conteúdo do ficheiro ca.pem, que fizeram descarregaram do StartSSL. Ignorem, caso seja apresentado, o aviso do cPanel a indicar que não têm um IP público (até porque a informação “Microsoft® Internet Explorer™ on Windows XP™ is the most widely used web browser that does not support SNI.” não me parece muito recente).

    Criação de certificado SSL gratuito e importação no cPanel (guia) images/06-guia-criacao-certificado-ssl-gratuito-e-importacao-cpanel/116-cpanel-fill-certificate-information.png
  4. Depois de carregarem no botão Install Certificate, deverá ser apresentada uma mensagem de sucesso. Parabéns, a partir deste momento, podem aceder ao site por HTTPS.

Quando a ligação usada é HTTPS todo o conteúdo tem de ser transferido por HTTPS. Isto quer dizer que todas as imagens, CSS, Javascript e recursos externos têm de usar HTTPS. Se tiverem conteúdos que sejam descarregados por HTTP numa ligação HTTPS, todos os browsers vão apresentar uma indicação ao utilizador de que está a usar uma ligação segura mas nem todos os dados são encriptados.

A forma mais simples de resolver esta questão é, simplesmente, não definir o protocolo (HTTP ou HTTPS). Para isto basta usar duplas barras (//) para definir o endereço e automaticamente será aplicado o protocolo que está a ser usado na barra de endereços. Isto é especialmente útil para quem tem aplicações em vários servidores, uns que servem conteúdo por HTTP e e outros por HTTPS. Por exemplo:

<img src="//dominio.pt/imagem.png" />
<link href="//fonts.googleapis.com/css?family=Open+Sans:300italic,400,700" rel="stylesheet" type="text/css">

Se quiserem que todos os pedidos sejam tratados de forma segura, mesmo quando os utilizadores fazem o acesso por HTTP, podem fazer isso através do ficheiro .htaccess, com a regra:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTPS} !=on
    RewriteCond %{HTTP_HOST} ^(dominio\.pt)
    RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI}%{QUERY_STRING} [L,R]
</IfModule>

E é isto. Com estes passos fizeram a Web um espaço mais seguro e ganharam um cadeado verde na barra de endereços do Chrome. Espero que esta informação tenha sido útil e, caso tenham dúvidas, deixem-nas nos comentários.