Migrando aplicação web apache de http para https com certificado válido

Olá, neste artigo demonstrarei como criar uma Autoridade Certificadora (CA), para que possamos configurar nossa aplicação local de http para https sem que o aviso de alerta apareça na tela do usuário, e como bonus utilizaremos o KeepUp para instalar o certificado da CA em todas maquinas linux na rede.

Obs: Se você não sabe o que e o keepup, da uma olhada nesse post.

Por padrão quando instalamos um navegador ele trás consigo uma lista de certificados instalados referentes a Autoridades Certificadoras confiáveis como: COMODO, Let's Encrypt etc..
porém quando utilizamos uma rede local podemos criar nossa própria entidade para validar nossa aplicação HTTPS sem que exiba a famosa tela de "Site não confiável" para o usuário, e instalar no navegador para que se torne transparente para a navegação do usuário.

Nossos passos:

1. Criar Autoridade Certificadora
2. Criar chaves ssh para transformar nossa aplicação de http para https
3. Copiar arquivos para o OpenSSL
4. Configurar Tomcat da aplicação
5. Configurar GPO com Keepup.


1. Criando uma Autoridade Certificadora

Primeiramente vamos acessar como root e criar um diretorio no /root para organizar nossas chaves:
- sudo su
- mkdir /root/chaves_ssl
- cd /root/chaves_ssl

Gerando Chave:
# openssl genrsa -des3 -out CA_EMPRESA.key 2048

Gerando Certificado:
# openssl req -x509 -new -nodes -key CA_EMPRESA.key -sha256 -days 9999 -out CA_EMPRESA.pem

Obs: As informações preenchidas aqui serão exibidas no seu certificado, apesar de não serem cruciais, é importante preencher corretamente pro certificado ficar organizado.


2. Criando Chaves SSH da aplicação web.

Geraremos o certificado e a chave privada da nossa aplicação e configuraremos no Apache para que nossa aplicação rode na porta 443(https).

- sudo su
- cd /root/chaves_ssl

Gerando Chaves para o site:
# openssl genrsa -out dominio.com.key 2048

Gerando CSR:
# openssl req -new -key dominio.com.key -out dominio.com.csr

 Criar arquivo Subject Alternative Name (SAN) e inserir o conteudo a seguir, e salvar , exemplo:

Criando arquivo:
vi dominio.com.ext
Conteudo arquivo:

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = dominio.com

Gerar Certificado do site:
openssl x509 -req -in dominio.com.csr -CA CA_EMPRESA.pem -CAkey CA_EMPRESA.key -CAcreateserial -out dominio.com.crt -days 9999 -sha256 -extfile dominio.com.ext


 3. Copiando Arquivos para o OpenSSL

Agora que ja temos todos os arquivos que precisamos, vamos colocar-los em seus devidos lugares:

cp CA_EMPRESA.key /etc/ssl/private/
cp dominio.com.key /etc/ssl/private/
cp dominio.com.crt /etc/ssl/certs/

Obs: O arquivo CA_EMPRESA.pem é o nosso certificado que será instalado nos navegadores..


4. Configurando Apache para HTTPS:

vi /etc/apache2/sites-enabled/000-default.conf

<VirtualHost *:80>
ServerName servidor.dominio.com
Redirect permanent / https://servidor.dominio.com/
</VirtualHost>

<VirtualHost *:443>
Servername servidor.dominio.com
SSLEngine on
SSLCertificateFile "/etc/ssl/certs/servidor.dominio.com.crt"
SSLCertificateKeyFile "/etc/ssl/private/servidor.dominio.com.key"
...
</VirtualHost>

Obs: Estamos forçando nossa aplicação a redirecionar as chamadas na porta 80 para porta https.

Reiniciar apache:

/etc/init.d/apache2 restart
ou
systemctl restart apache2

Obs: Caso der algum erro de SSL referente aos modulos, é só copiar os modulos do SSL que estao em /etc/apache2/mods-available para /etc/apache2/mods-enabled.

5. Instalando certificado da Autoridade Certificadora (CA) no navegador.


5.1 No Windows Manualmente:

No Windows basta copiar o arquivo CA_EMPRESA.pem renomear para CA_EMPRESA.crt e dar dois clicks..

Instalar > Maquina Local > Pesquisar > Autoridade Certificadora de Raiz Confiável > Avançar e Concluir.


5.2 No Linux Manualmente:

# apt-get update && apt-get install libnss3-tools

Criar arquivo de script:
# vi instalar_ca.sh

Inserir conteúdo:

#!/bin/bash
certfile_path="/root/CA_EMPRESA.pem"
certname="Meu Certificado"
install_user=$1

for certdb in $(find /home/$1/ -name "cert9.db" 2> /dev/null)
do
certdir=$(dirname ${certdb});
certutil -d sql:${certdir} -A -t "C,," -n "${certname}" -i ${certfile_path}
done

 Salvar e Sair.

# chmod +x instalar_ca.sh

Executar o script de instalação mandando como parâmetro

# bash instalar_ca.sh lucas


 5.3: No Linux com Keepup

Supondo que você possui várias maquinas Linux na rede e deseja instalar todas de uma vez e as que estão desligadas no momento sejam instaladas quando ligar, usaremos o Keepup para automatizar essa árdua tarefa.

Nossos passos:
5.3.1. Criaremos uma GPO de usuário para realizar instalação
5.3.2. Criaremos um grupo no AD


5.3.1. Criando GPO:

# vi /etc/ansible/gpo/usr/gpo_instalar_certificado.yml

Inserir conteudo:

---
- hosts: '{{ target }}'
  gather_facts: no
  strategy: free
  remote_user: root
  vars:
    user: '{{ username }}'
  tasks:
  - name: Instalando Dependencias
    apt:
      name: libnss3-tools
  - name: Copiar Certificado
    copy:
      src: /etc/ansible/gpo/usr/files/CA_EMPRESA.pem
      dest: /tmp/CA_EMPRESA.pem
      owner: root
      group: root
      mode: 0755
  - name: Copiar Script
    copy:
       src: /etc/ansible/gpo/usr/files/instalar_ca.sh
       dest: /tmp/instalar_ca.sh
       owner: root
       group: root
       mode: 0755
  - shell: /tmp/instalar_ca.sh '{{ user }}'
  - file:
       path: /tmp/instalar_ca.sh
       state: absent

 Salvar e sair.
Obs: Talvez ao copiar e colar precise ajustar os espaçamentos do YML.. 

Copiar o arquivo CA_EMPRESA.pem para o diretorio: /etc/ansible/gpo/usr/files/
Copiar o script para: /etc/ansible/gpo/usr/files/


  5.3.2 Criar Grupo no AD

Agora criaremos um grupo no AD com o mesmo nome do arquivo GPO YML que nosso caso foi: gpo_instalar_certificado

Adicionar os usuários que devem instalar o certificado no grupo..

e pronto.. a partir de agora podemos analisar o log e verificar os certificados sendo instalados.

tail -f /var/log/keepup.log




Espero poder ter ajudado, qualquer dificuldade comentaê que estou sempre atento.
Valeu até a próxima!

Comentários

Postagens mais visitadas deste blog

Configurando GPO em maquinas linux através de playbooks do Ansible com Keepup no ubuntu 18.04