Todos os produtos
Search
Central de documentação

Certificate Management Service:Instalar um certificado SSL no Python Flask (Linux)

Última atualização: Jun 27, 2026

Este guia mostra como ativar o HTTPS em um servidor de desenvolvimento Python Flask mediante a instalação de um certificado SSL. Os exemplos usam Linux, Python 3.6 e Flask 2.0.3.

Pré-requisitos

Antes de começar, verifique se você tem:

  • Um certificado SSL emitido por uma autoridade certificadora (CA) confiável. Se o certificado estiver expirado, renove-o antes de prosseguir.

  • Um certificado que abranja todos os nomes de domínio a proteger. Aplicam-se as seguintes regras de cobertura: para adicionar nomes de domínio, adquira um certificado comercial ou Anexe e substitua nomes de domínio.

    • Domínio com correspondência exata: example.com protege apenas example.com. www.example.com protege apenas www.example.com.

    • Domínio curinga: *.example.com abrange subdomínios de primeiro nível, como www.example.com e a.example.com, mas não cobre o domínio raiz example.com nem subdomínios multinível, como a.b.example.com. > Note: Para proteger subdomínios multinível, adicione o domínio exato (como a.b.example.com) ou um curinga correspondente (como *.b.example.com) ao campo Bound Domains.

  • Uma conta root ou uma conta com privilégios sudo no servidor.

  • Um registro DNS do domínio que resolva para o endereço IP público do servidor.

  • Resolução DNS: O nome de domínio resolve para o endereço IP público do servidor.

  • Python e Flask instalados no servidor.

Etapa 1: Preparar o certificado SSL

  1. Acesse a página SSL Certificate Management. Localize seu certificado e clique em Download Certificate na coluna Actions. Na aba Download, selecione Other como Server Type e baixe o pacote.

  2. Descompacte o pacote baixado:

    • Se o pacote contiver um arquivo de certificado (.pem) e um arquivo de chave privada (.key), salve ambos, pois são necessários para a implantação.

    • Caso o pacote contenha apenas o arquivo de certificado (.pem) e nenhum arquivo de chave privada (.key), implante o certificado junto com o arquivo de chave privada salvo em sua máquina local.

Se você usou uma ferramenta como OpenSSL ou keytool para gerar uma Solicitação de Assinatura de Certificado (CSR) ao solicitar o certificado, a chave privada foi salva apenas na sua máquina local e não está incluída no pacote baixado. Caso a chave privada seja perdida, o certificado torna-se inutilizável. Nesse caso, adquira um novo certificado e gere uma nova CSR e chave privada.

Etapa 2: Configurar o sistema e o ambiente de rede

Garanta que o grupo de segurança do servidor e o firewall do sistema permitam tráfego de entrada na porta TCP 443 (HTTPS).

Verificar se a porta 443 está aberta

Execute o comando abaixo para verificar o status da porta 443. Substitua <your_server_public_ip> pelo endereço IP público do seu servidor.

RHEL/CentOS

command -v nc > /dev/null 2>&1 || sudo yum install -y nc
# Replace <your_server_public_ip> with the public IP address of your server.
sudo ss -tlnp | grep -q ':443 ' || sudo nc -l 443 & sleep 1; nc -w 3 -vz <your_server_public_ip> 443

Se a porta 443 estiver aberta, a saída será semelhante a:

Ncat: Connected to <your_server_public_ip>:443

Debian/Ubuntu

command -v nc > /dev/null 2>&1 || sudo apt-get install -y netcat
# Replace <your_server_public_ip> with the public IP address of your server.
sudo ss -tlnp | grep -q ':443 ' || sudo nc -l -p 443 & sleep 1; nc -w 3 -vz <your_server_public_ip> 443

Quando a porta 443 estiver aberta, a saída apresentará este formato:

Connection to <your_server_public_ip> port [tcp/https] succeeded!

ou

[<your_server_public_ip>] 443 (https) open

Caso a porta 443 não esteja aberta, siga as duas próximas etapas para liberá-la.

Liberar a porta 443 no grupo de segurança

Importante

Se o servidor estiver em uma plataforma de nuvem, o grupo de segurança deve permitir tráfego de entrada na porta TCP 443. Caso contrário, o serviço ficará inacessível. Os passos a seguir usam o Alibaba Cloud Elastic Compute Service (ECS) como exemplo. Para outras plataformas de nuvem, consulte a documentação respectiva.

Acesse a página de instâncias do ECS e clique na instância desejada para abrir sua página de detalhes. Na seção Security Group Details, adicione uma regra de grupo de segurança com as seguintes configurações:

Campo

Valor

Action

Allow

Protocol

Custom TCP

Destination (Current Instance)

HTTPS (443)

Source

0.0.0.0/0 (anywhere)

Liberar a porta 443 no firewall

Execute o comando a seguir para identificar o serviço de firewall ativo:

if command -v systemctl >/dev/null 2>&1 && systemctl is-active --quiet firewalld; then
    echo "firewalld"
elif command -v ufw >/dev/null 2>&1 && sudo ufw status | grep -qw active; then
    echo "ufw"
elif command -v nft >/dev/null 2>&1 && sudo nft list ruleset 2>/dev/null | grep -q 'table'; then
    echo "nftables"
elif command -v systemctl >/dev/null 2>&1 && systemctl is-active --quiet iptables; then
    echo "iptables"
elif command -v iptables >/dev/null 2>&1 && sudo iptables -L 2>/dev/null | grep -qE 'REJECT|DROP|ACCEPT'; then
    echo "iptables"
else
    echo "none"
fi

Se a saída for none, nenhuma ação adicional é necessária. Caso contrário, execute o comando correspondente abaixo para abrir a porta 443.

firewalld

sudo firewall-cmd --permanent --add-port=443/tcp && sudo firewall-cmd --reload

ufw

sudo ufw allow 443/tcp

nftables

sudo nft add table inet filter 2>/dev/null
sudo nft add chain inet filter input '{ type filter hook input priority 0; }' 2>/dev/null
sudo nft add rule inet filter input tcp dport 443 counter accept 2>/dev/null

iptables

sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

Para persistir as regras do iptables entre reinicializações:

  • RHEL/CentOS:

    sudo yum install -y iptables-services
    sudo service iptables save
  • Debian/Ubuntu:

    sudo apt-get install -y iptables-persistent
    sudo iptables-save | sudo tee /etc/iptables/rules.v4 >/dev/null

Etapa 3: Instalar o certificado na aplicação Flask

  1. Crie um diretório para armazenar os arquivos do certificado:

    mkdir /ssl
  2. Faça upload do arquivo de certificado (.pem) e do arquivo de chave privada (.key) para /ssl.

    Use o recurso de upload de arquivos da sua ferramenta de login remoto para transferir os dados. Ferramentas comuns incluem PuTTY, Xshell e WinSCP. Se estiver usando uma instância do Alibaba Cloud ECS, consulte Upload ou download de arquivos .
  3. Abra o arquivo da sua aplicação Flask e configure o SSL usando ssl_context. Abaixo está um exemplo completo: copie-o, atualize os caminhos dos certificados e salve como test.py para executar um teste rápido.

    # Import the Flask web framework
    from flask import Flask
    
    app = Flask(__name__)
    
    @app.route("/")
    def main():
        return "<p>Hello, World!</p>"
    
    # Configure the SSL certificate.
    # The default HTTPS port is 443.
    # Replace '/ssl/cert.pem' with the absolute path to your certificate file.
    # Replace '/ssl/cert.key' with the absolute path to your private key file.
    context = (r'/ssl/cert.pem', r'/ssl/cert.key')
    app.run(host="0.0.0.0", port=443, ssl_context=context)
  4. Acesse o diretório que contém test.py e inicie o serviço Flask:

    # Replace test.py with your actual filename.
    python test.py

    Se o Flask iniciar com sucesso, a saída será semelhante a:

     * Serving Flask app 'test'
     * Running on all addresses (0.0.0.0)
     * Running on https://127.0.0.1:443
     * Running on https://<your_server_public_ip>:443

Verificar a instalação

Conferir o certificado no navegador

Abra https://yourdomain no navegador (substitua yourdomain pelo seu domínio real). Um ícone de cadeado na barra de endereços confirma que o certificado foi implantado corretamente.

image

A partir da versão 117, o ícone image no Chrome foi substituído por image. Clique neste ícone para visualizar os detalhes do certificado.

Se o ícone de cadeado não aparecer ou se ocorrer um erro de acesso, limpe o cache do navegador ou tente novamente no modo anônimo.

Caso o problema persista, consulte Resolver problemas de implantação de certificados com base em mensagens de erro do navegador e o Guia de solução de problemas de implantação de certificados SSL .

Entrar em produção

Ao migrar para o ambiente de produção, aplique as práticas a seguir para aumentar a segurança e a estabilidade:

  • Executar como usuário sem privilégios de root: Crie um usuário de sistema dedicado e com baixos privilégios para a aplicação. Jamais execute a aplicação como root ou com privilégios administrativos.

    Para implantações em produção, configure o término SSL na camada de gateway em vez de fazê-lo diretamente no Flask. Implante o certificado em um Server Load Balancer (SLB) ou em um proxy reverso como o Nginx. O gateway gerencia o HTTPS e encaminha o tráfego HTTP descriptografado para a aplicação Flask.
  • Manter credenciais fora do código: Armazene senhas e informações sensíveis em variáveis de ambiente, no Vault ou em um serviço de gerenciamento de chaves na nuvem. Nunca as codifique rigidamente em arquivos de source ou de configuração.

  • Redirecionar HTTP para HTTPS: Configure o servidor para redirecionar todo o tráfego HTTP para HTTPS, evitando assim ataques man-in-the-middle.

  • Desativar protocolos legados: Na configuração do servidor, desative SSLv3, TLS 1.0 e TLS 1.1. Habilite apenas TLS 1.2 e TLS 1.3.

  • Monitorar a expiração do certificado: Após a implantação, ative o monitoramento de domínios no Certificate Management Service. A Alibaba Cloud verifica o período de validade do certificado e envia lembretes de renovação antes da expiração. Para mais detalhes, consulte Adquirir e ativar o monitoramento de nomes de domínio públicos.

Perguntas frequentes

Por que o HTTPS fica inacessível após instalar ou atualizar o certificado?

Geralmente, isso ocorre devido a um dos motivos abaixo. Verifique-os nesta ordem:

  • Porta 443 bloqueada: O grupo de segurança ou o firewall não permite tráfego na porta 443. Consulte Etapa 2: Configurar o sistema e o ambiente de rede.

  • Incompatibilidade de domínio: O domínio acessado não consta nos Bound Domains do certificado. Veja as regras de correspondência de nomes de domínio em Pré-requisitos.

  • Flask não reiniciado: Reinicie o Flask após modificar o arquivo da aplicação.

  • Caminho do certificado incorreto: Verifique se os caminhos dos arquivos .pem e .key definidos em ssl_context estão corretos e se você usa os arquivos de certificado válidos mais recentes.

  • Certificado ausente em outros serviços: Se o seu domínio usa Content Delivery Network (CDN), Server Load Balancer (SLB) ou Web Application Firewall (WAF), instale o certificado também nesses serviços. Consulte Locais de implantação de certificados quando o tráfego passa por múltiplos serviços da Alibaba Cloud.

  • Implantação parcial em vários servidores: Se o DNS do seu domínio resolver para múltiplos servidores, instale o certificado em todos eles.

Como atualizar ou substituir um certificado instalado?

  1. Faça backup dos arquivos .pem e .key existentes no servidor.

  2. Baixe os novos arquivos de certificado e chave privada do console do Certificate Management Service.

  3. Faça upload dos novos arquivos para o servidor, sobrescrevendo os antigos. Mantenha os mesmos caminhos e nomes de arquivos especificados na configuração do Flask.

  4. Reinicie o Flask para aplicar o novo certificado.

O Flask gera FileNotFoundError na inicialização

Esse erro indica que o caminho do arquivo em ssl_context está errado. Verifique se os caminhos para os arquivos de certificado e chave privada fornecidos em ssl_context estão corretos. Os caminhos devem ser relativos ao diretório onde você executa o comando python <your-app-file>.py ou devem usar caminhos absolutos.

O navegador exibe ERR_SSL_PROTOCOL_ERROR ou redefine a conexão

Verifique os seguintes pontos:

  • O arquivo de certificado e o arquivo de chave privada correspondem entre si.

  • O arquivo de certificado contém uma cadeia completa (geralmente um arquivo .pem). Os arquivos de certificado baixados da Alibaba Cloud já incluem a cadeia completa.

  • O grupo de segurança e o firewall permitem tráfego de entrada na porta 443.