Pode-se implementar a conexão criptografada em desenvolvimento por meio de Apache e Nginx, porém aqui vou usar o Stunnel – stunnel-5.48-5.el8.0.1.x86_64

Criar uma chave privada e o certificado
A chave privada e o certificado serão autoassinados e gerados por meio do comando openssl.
1) Gerar a chave privada – 4096 bits
# openssl genrsa 4096 > stunnel.key
2) Gerar o certificado
# openssl req -new -x509 -nodes -sha1 -days 365 -key stunnel.key > stunnel.cert
3) Gerar o arquivo PEM – chave privada + certificado
# cat stunnel.key stunnel.cert > stunnel.pem
Criar o arquivo de configuração do Stunnel
O arquivo de configuração define a versão do protocolo (TLS v 1.0, mas existe até a versão 1.2). As versões SSL v 1, 2 e 3 são obsoletas e inseguras.
pid= cert = stunnel/stunnel.pem sslVersion = TLSv1 foreground = yes output = /var/log/stunnel.log [https] accept=8443 connect=8001 TIMEOUTclose=1
Depreende-se da configuração acima que a conexão é feita pela porta 8443, porém ela é “tunelada” para a porta 8001.
Criar um script para ativar o servidor web do Django
Recomendo a ativação do servidor web Django, por meio do script runstunnel.sh abaixo:
stunnel stunnel/dev_https & python3 manage.py runserver 0.0.0.0:8000 & HTTPS=1 python3 manage.py runserver 0.0.0.0:8001
Resumo:
- A conexão HTTP é feita pela porta 8000
- A conexão HTTPS é feita pela porta 8443
- A porta 8001 deve estar ativa e é usada pelo stunnel para obter resposta para a porta 8443
Resultado
Há implicações de segurança que impedem que as configurações acima sejam implementadas em produção, sendo as principais:
- certificado autoassinado – não provê a segurança quanto ao servidor que está respondendo à conexão HTTPS ser realmente o servidor que se acredita estar conectando
- TLS v 1 – existem versões TLS mais seguras
- Não limitar ao uso de cifras seguras, somente
Após implementar o HTTPS ao site, o navegador Google Chrome acusa como site inseguro por, principalmente, estar usando certificado autoassinado.
Nginx, Apache, Stunnel, Django, Python, Google e Chrome – são marcas/ferramentas registradas