LAB-8

SSL no Apache

1. Domínios .local só funcionam localmente

  • Eles não são válidos para acesso externo na internet.
  • Apenas computadores que tenham o arquivo /etc/hosts configurado vão reconhecer esses domínios.
  • Servidores de certificação pública como Let’s Encrypt não conseguem validar nem emitir certificados SSL para domínios .local.

2. Como usar HTTPS em .local

Certificados públicos (Let’s Encrypt)

  • Não funciona para .local. O Let’s Encrypt exige que o domínio esteja acessível publicamente e registrado na internet.

Certificados autoassinados (self-signed)

  • Para desenvolvimento, pode-se gerar um certificado autoassinado.
  • O navegador mostrará aviso de segurança (“conexão insegura”) — isso é esperado, pois o certificado não é “confiável” para o navegador.
  • Para remover o aviso, o certificado autoassinado precisa ser importado manualmente como confiável no computador cliente (opcional).

3. Como Gerar e Configurar um Certificado Autoassinado para .local

3.1. Gere um certificado autoassinado para cada domínio

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/site1.local.key \
-out /etc/ssl/certs/site1.local.crt \
-subj "/CN=site1.local"

Repita para site2.local mudando os nomes:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/site2.local.key \
-out /etc/ssl/certs/site2.local.crt \
-subj "/CN=site2.local

3.2. Configure o VirtualHost SSL

No /etc/apache2/sites-available/site1.local.conf, inclua (ou ajuste) o virtual host na porta 443:

				
					<VirtualHost *:443>
    ServerName site1.local
    DocumentRoot /var/www/site1.local/public_html

    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/site1.local.crt
    SSLCertificateKeyFile /etc/ssl/private/site1.local.key

    <Directory /var/www/site1.local/public_html>
        AllowOverride All
    </Directory>
</VirtualHost>
				
			

Repita para site2.local.

				
					<VirtualHost *:443>
    ServerName site2.local
    DocumentRoot /var/www/site2.local/public_html

    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/site2.local.crt
    SSLCertificateKeyFile /etc/ssl/private/site2.local.key

    <Directory /var/www/site2.local/public_html>
        AllowOverride All
    </Directory>
</VirtualHost>
				
			

3.3. Redirecione HTTP → HTTPS

No /etc/apache2/sites-available/site1.local.conf, alterar na porta 80:

				
					<VirtualHost *:80>
    ServerName site1.local
    Redirect permanent / https://site1.local/
</VirtualHost>
				
			

No /etc/apache2/sites-available/site2.local.conf, alterar na porta 80:

				
					<VirtualHost *:80>
    ServerName site2.local
    Redirect permanent / https://site2.local/
</VirtualHost>
				
			

3.4. Permissões dos arquivos

sudo chmod 600 /etc/ssl/private/site1.local.key
sudo chmod 600 /etc/ssl/private/site2.local.key
sudo chmod 644 /etc/ssl/certs/site1.local.crt
sudo chmod 644 /etc/ssl/certs/site2.local.crt

3.5. Ative o módulo SSL e os sites

sudo a2enmod ssl
sudo a2ensite site1.local.conf
sudo a2ensite site2.local.conf
sudo systemctl reload apache2

4. Configure seu /etc/hosts

Se ainda não fez isso, em cada máquina que precisa acessar os sites locais, adicione:

127.0.0.1 site1.local
127.0.0.1 site2.local

Para acesso HTTPS sem aviso de segurança, só é possível usando um domínio real (registrado publicamente) e Let’s Encrypt.