Se você seguiu as instruções detalhadas em Instalação do Apache, PHP e MySQL (MariaDB) no CentOS 7, sua instalação está pronta e funcionando mas não está segura: conexões SSL/TLS não estão habilitadas.
Por padrão o Apache do CentOS 7 não habilita o SSL. Para isso, siga as instruções abaixo.
Verifique se o sistema está atualizado (como root):
# yum check-update
# yum update
Agora instale o mod_ssl e o OpenSSL:
# yum install mod_ssl openssl
Isso criará o arquivo /etc/httpd/conf.d/ssl.conf com as configurações do SSL/TLS. Um problema nesse arquivo é que ele habilita protocolos SSL antigos que já não são seguros: SSLv2 e SSLv3. Devemos desabilitar esses protocolos não seguros e habilitar somente os protocolos seguros TLSv1.1 e TLSv1.2 (se você tem alguma aplicaçãoantiga que não funciona bem com esses protocolos mais novos, habilite também o TLSv1.0). Siga os passos abaixo.
Edite o arquivo /etc/httpd/conf.d/ssl.conf e procure por todas as ocorrências da variável SSLProtocol e deixe da seguinte maneira (se você configurou essa variável em algum virtual host, também deve alterar essa variável na configuração do virtual host!):
Agora reinicie o Apache:
# systemctl restart httpd.service
Se tudo correu bem, o SSL/TLS está habilitado em seu Apache. Por padrão o CentOS gera um certificado auto-assinado com informações genéricas. Temos que criar um outro certificado auto-assinado com informações mais específicas, ou obter um certificado comercial válido na internet (via Comodo, Geotrust, VeriSign, etc.).
Para criar um certificado auto-assinado temos que instalar o pacote crypto-utils:
# yum install crypto-utils
O pacote crypto-utils contém utilitários para criar, manter e gerenciar certificados e chaves privadas, incluindo o utilitário “genkey” da RedHat, que gera o par de chaves e o certificado (nos diretórios /etc/pki/tls/private e /etc/pki/tls/certs).
Para gerar o certificado e a chave com o utilitário genkey, faça o seguinte (ATENÇÃO! Não execute esse utilitário via SSH pois ele precisa gerar números aleatórios com o dispositivo /dev/random que precisa de movimentos de teclado, mouse, etc. para gerar entropia suficiente para a geração dos números aleatórios; se você rodar esse comando por SSH, não vai terminar nunca!):
Chame o genkey, como root, passando como parâmetro o nome do servidor que utilizará o certificado:
# genkey www.smsaude.com.br
Inicialmente o genkey informará em quais arquivos salvará o certificado e a chave (figura abaixo). Basta clicar next.
Depois o genkey solicitará o tamanho da chave. Aceite o padrão de 2048 bits e clique em next:
Agora o genkey gerará alguns bits aleatórios (isso não deverá demorar muito):
E agora o genkey gerará números aleatórios através do /dev/random. Digite no teclado, movimente o mouse (se for o caso), utilize o disco, enfim: faça qualquer coisa para gerar entropia suficiente para o gerador de números aleatórios (caso contrário esse processo não terminará nunca):
Agora o genkey perguntará se você deseja gerar uma solicitação de assinatura para uma autoridade certificadora válida (Comodo, Geotrust, VeriSign, etc.). Se você digitar YES o genkey não gerará um certificado, somente uma solicitação para ser enviado à autoridade certificadora; Se você ditiar NO o genkey gerará um certificado auto-assinado. No nosso caso, escolha a opção NO:
Agora o genkey pergunta se a chave privada deverá ser criptografada. ATENÇÃO: se você criptografar a chave privada e gerar uma senha para ela, toda vez que o servidor ou o Apache for reiniciado, a senha do certificado será solicitada; se você não criar uma senha, o sistema não solicitará a senha da chave do certificado no momento do reboot do sistema, mas se alguém invadir seu servidor, poderá obter a chave. Em nosso caso, continue SEM criptografar a chave (não marque a opção):
Agora preencha as informações do certificado (não use acentos ou caracteres especiais!):
Agora o genkey irá rodar rapidamente e gerar os arquivos solicitados: a chave (www.smsaude.com.br.key – root:root; 400) será gerada no diretório /etc/pki/tls/private e o certificado (www.smsaude.com.br.crt – root:root 640) será gerado no diretório /etc/pki/tls/certs.
Para fazer o Apache usar o novo certificado e chave, altere o arquivo /etc/httpd/conf.d/ssl.conf e aponte os novos arquivos nas variáveis abaixo (se essas configurações estão em algum virtual host, ajuste de acordo):
SSLCertificateFile /etc/pki/tls/certs/www.smsaude.com.br.crt
SSLCertificateKeyFile /etc/pki/tls/private/www.smsaude.com.br.key
Agora basta reiniciar o Apache:
# systemctl restart httpd.service
Se nenhum erro ocorreu, o Apache já está usando os certificados novos. Obviamente, como o certificado é auto-assinado, os browsers reclamarão dizendo que a conexão não é segura. Basta aceitar o certificado no browser (ou pagar um certificado válido ou utilizar o Let’s Encrypt).