Raspberry Pi – Servidor Web com HTTPS e Acesso pela Internet

Nos artigos anteriores, efetuamos a instalação do sistema Raspbian (neste exemplo, Raspbian GNU/Linux 8 – Kernel 4.9) na Raspberry Pi e configuramos o acesso remoto através de SSH e VNC, permitindo assim que a Raspberry Pi seja acessada pela rede, dispensando o uso de monitor, teclado e mouse. O objetivo agora é instalar o Apache (servidor web) na Pi, permitindo a ela hospedar sites e/ou aplicações web, como para o controle do GPIO (portas programáveis de entrada e saída de dados).

Instalação do Apache e do OpenSSL:

Para começarmos é preciso acessar a Pi através de SSH ou VNC para acesso ao Terminal (neste exemplo utilizamos o SSH). No terminal, entre com o comando: $ sudo apt-get install apache2 openssl.

Após esta instalação o Apache já estará rodando na Pi. Você pode confirmar o serviço com o comando $ netstat -tupan | grep apache2 (80 LISTEN) ou acessá-lo através do endereço IP da Pi, neste caso http://192.168.25.81, no navegador de um outro computador da rede.

Configuração de SSL (Certificado Digital):

1 – Habilite o módulo de SSL com o comando:

$ sudo a2enmod ssl

2 – Crie um diretório para armazenar o certificado digital que criaremos em seguida com o comando:

$ sudo mkdir -p /etc/ssl/localcerts

3 – Crie um certificado digital com o comando abaixo. Será necessário entrar com informações (podem ser fictícias) como código do país, estado, cidade, companhia, departamento, domínio (site) e email:

$ sudo openssl req -new -x509 -days 365 -nodes -out /etc/ssl/localcerts/apache.pem -keyout /etc/ssl/localcerts/apache.key

*Se necessário, altere as configurações do certificado de acordo com sua necessidade.

Pi – Gerando um Certificado Digital

4 – Crie um link para o arquivo de configuração padrão do SSL com o comando:

$ sudo ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/000-default-ssl.conf

5 – Edite o arquivo de configuração padrão do SSL com o comando:

$ sudo nano /etc/apache2/sites-enabled/000-default-ssl.conf

Então:
– Confirme se o parâmetro SSLEngine está habilitado:

SSLEngine on

– Modifique ou insira (neste caso comentando o parâmetro padrão) o caminho dos certificados gerados acima:

SSLCertificateFile /etc/ssl/localcerts/apache.pem
SSLCertificateKeyFile /etc/ssl/localcerts/apache.key

*Use o comando Ctrl + w para localizar, conforme exibido na imagem abaixo.

Arquivo 000-default-ssl.conf: O símbolo “#” indica que a informação a seguir é um comentário e não um parâmetro.

6 – Salve o arquivo (tecle Ctrl + x, digite Y e tecle Enter para confirmar) e então reinicie o serviço do Apache com o comando:

$ sudo /etc/init.d/apache2 restart

Após esta configuração o Apache já estará respondendo a requisições de HTTPS.  Você pode confirmar o serviço, agora rodando também na porta 443, com o comando $ netstat -tupan | grep apache2 (80 / 443 LISTEN) ou acessá-lo através do endereço IP da Pi, neste caso https://192.168.25.81, no navegador de um outro computador da rede.
*Como é um certificado local, sem a validação de um órgão certificador, é preciso confirmar uma exceção de segurança do  navegador no primeiro acesso.

Configuração de NAT (Port Forward) para acesso ao Apache pela Internet

Efetuadas as configurações acima, o Apache já pode ser acessado pela rede local, porém, para acesso pela Internet é preciso efetuar uma configuração de NAT (Network Address Translation / Port Forwarding) no Firewall ou Roteador da rede. Neste exemplo, a rede possui um link ADSL com IPv4 dinâmico e, por esta razão, o serviço do NO-IP foi utilizado para o gerenciamento de DNS dinâmico.

DDNS (Dynamic Domain Name System) é uma funcionalidade criada para atualizar automaticamente um servidor de nomes (DNS) permitindo o acesso à redes com IP dinâmico através de um nome de domínio.

As configurações de NAT foram efetuadas no roteador da operadora, de acordo com as instruções abaixo:

1 – Pela rede local, abra o navegador e acesse o roteador através do seu IP padrão, neste caso, http://192.168.25.1 (VIVO/GVT). Você precisará das credenciais de acesso ao equipamento.

2 – Nas configurações avançadas do sistema, localize a função de Port Forwarding  ou NAT (muitos roteadores também chamam esta função de Virtual Server) e crie uma regra para encaminhar as solicitações de acesso à porta 443  ao IP da Raspberry PI, neste caso, 192.168.25.81, conforme ilustrado abaixo:

Port Forward – Regra de encaminhamento da porta 443 (HTTPS). *Consulte o manual do seu roteador para maiores informações.

3 – Salve a configuração efetuada e, se necessário, reinicie o roteador.

4 – Use um celular com acesso 3G/4G para testar o acesso externo. Caso tenha um serviço de DDNS ativado e configurado, basta entrar com o seu domínio no navegador do celular. Caso não tenha, use o IP público atual do seu link de Internet (use o www.ping.eu para verificar seu IP público atual).

Na esquerda temos o acesso pela LAN (IP de Rede Local) e, à direita, o acesso externo pela WAN (Internet)

Obs.:  caso precise efetuar algum ajuste avançado no Apache, acesse os arquivos /etc/apache2/apache2.conf – Configurações gerais
/etc/apache2/ports.conf – Portas padrão
/etc/apache2/sites-available/default – Configuração de sites
/var/log/apache2 – Configuração de erros.

 

*Com referências de: Debian – Self-Signed Certificate, WikiHow – Servidor Web – Raspberry-Pi, Raspberry Pi – Apache, Raspberry PI Projects – LAMPStudy Raspberry Pi – SSL for Apache, Instructables – Web Interface.

4 Comments

  1. Olá, estou tentando fazer este tutorial. Preciso configurar a página html para chamar dois Ips de camêras. Será que poderia me dar umas dicas. Não sei como altero.

  2. Porque não informa o link do artigo anterior? Não consegui encontrar pra começar do zero

    1. Olá, Alex! No final do artigo, no rodapé do blog, há uma chamada para o artigo anterior / próximo a este 😉

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload the CAPTCHA.