Todos os produtos
Search
Central de documentação

Certificate Management Service:Instalar um certificado SSL em um servidor Nginx ou Tengine (Linux)

Última atualização: Jun 27, 2026

Ative o HTTPS no servidor Nginx ou Tengine instalando um certificado SSL. Este guia orienta o download do certificado, a abertura da porta 443, a configuração do bloco de servidor do Nginx e a verificação do resultado.

Objetivos:

  • Baixe o pacote de certificados do console SSL Certificates e carregue-o no servidor

  • Abrir a porta 443 no grupo de segurança e no firewall do sistema

  • Adicionar um bloco de servidor HTTPS à configuração do Nginx

  • Recarregar o Nginx e confirme o funcionamento do certificado

As etapas também se aplicam ao Tengine, compatível com as configurações do Nginx.

Pré-requisitos

Antes de começar, certifique-se de ter:

  • Um certificado SSL emitido por uma autoridade certificadora (CA) confiável. Se o certificado estiver expirado ou prestes a expirar, renove-o primeiro

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

  • Um registro DNS de domínio configurado para resolver para o endereço IP público do servidor

  • Um certificado que cubra todos os domínios a proteger

Regras de cobertura de domínio:

Tipo de cobertura

O que protege

O que não protege

Correspondência exata (example.com)

Apenas example.com

www.example.com ou qualquer subdomínio

Correspondência exata (www.example.com)

Apenas www.example.com

O domínio raiz ou outros subdomínios

Wildcard (*.example.com)

Subdomínios de primeiro nível: www.example.com, a.example.com

Domínio raiz example.com, subdomínios multiníveis como a.b.example.com

Para proteger um subdomínio multinível como a.b.example.com , o campo Bound Domains deve conter o domínio exato ou um wildcard correspondente, como *.b.example.com .

Para adicionar ou alterar nomes de domínio, compre um certificado comercial ou adicione e substitua nomes de domínio.

Etapa 1: Preparar o certificado SSL

  1. Acesse a página SSL Certificates. Na coluna Actions do certificado desejado, clique em Download Certificate. Na aba Download, selecione Nginx 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. Eles serão necessários na próxima etapa.

    • Caso o pacote contenha apenas um arquivo .pem e nenhum arquivo .key, utilize o arquivo de chave privada salvo localmente durante a geração da Solicitação de Assinatura de Certificado (CSR).

    Se você usou OpenSSL ou keytool para gerar a CSR, a chave privada foi salva apenas na máquina local e não está incluída no pacote baixado. Se a chave privada for perdida, o certificado torna-se inutilizável. Compre um novo certificado comercial e gere uma nova CSR e chave privada.
  3. Carregue os arquivos .pem e .key no servidor. Armazene-os em um diretório seguro, como /etc/ssl/cert.

    Utilize o recurso de upload de arquivos de uma ferramenta de login remoto, como PuTTY, Xshell ou WinSCP. Se o servidor for uma instância do Elastic Compute Service (ECS) da Alibaba Cloud, consulte Upload ou download de arquivos .

Etapa 2: Abrir a porta 443

O tráfego HTTPS utiliza a porta TCP 443. Confirme se ela está aberta tanto no grupo de segurança da nuvem quanto no firewall do sistema.

Verificar se a porta 443 está aberta

Execute o comando a seguir para testar a conectividade na porta 443. Substitua <your_server_public_ip> pelo endereço IP público do 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 saída for Ncat: Connected to <your_server_public_ip>:443, a porta 443 está aberta. Caso contrário, conclua as etapas abaixo.

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

Se a saída for Connection to <your_server_public_ip> port [tcp/https] succeeded! ou [<your_server_public_ip>] 443 (https) open, a porta 443 está aberta. Caso contrário, conclua as etapas abaixo.

Abrir a porta 443 no grupo de segurança

Importante

Se o servidor for executado em uma plataforma de nuvem, o grupo de segurança deve permitir tráfego TCP de entrada na porta 443. As etapas abaixo usam o Alibaba Cloud ECS como exemplo. Para outras plataformas de nuvem, consulte a documentação respectiva.

Acesse a página de instâncias do Elastic Compute Service (ECS) e clique em no nome da instância desejada. Na seção Security Group Details, adicione uma regra com as seguintes configurações e clique em Add a security group rule:

Campo

Valor

Action

Allow

Protocol

Custom TCP

Destination (Current Instance)

HTTPS (443)

Source

0.0.0.0/0 (anywhere)

Abrir a porta 443 no firewall do sistema

Execute o comando a seguir para identificar o 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 de firewall é necessária. Caso contrário, execute o comando correspondente ao tipo de firewall:

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 após uma reinicialização:

  • 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: Instale o certificado SSL no Nginx

Instale o módulo SSL

Execute o comando a seguir. Se a saída for --with-http_ssl_module, o módulo SSL já está instalado e você pode pular para Configure o certificado SSL.

nginx -V 2>&1 | grep -o -- '--with-http_ssl_module'
Se o sistema retornar nginx: command not found , use o caminho completo de instalação, por exemplo: /usr/local/nginx/sbin/nginx -V 2>&1 | grep -o -- '--with-http_ssl_module' .

Se o módulo SSL estiver ausente, instale-o usando um dos métodos abaixo, conforme a forma de instalação do Nginx.

Importante

Adicionar o módulo SSL pode interromper brevemente o serviço Nginx. Faça backup da configuração e dos dados do Nginx antes e realize essa alteração fora do horário de pico.

Usando um gerenciador de pacotes

Execute os comandos a seguir no terminal do servidor:

RHEL/CentOS

# Add the official Nginx repository.
sudo tee /etc/yum.repos.d/nginx.repo <<EOF
[nginx-stable]
name=nginx stable repo
baseurl=https://nginx.org/packages/centos/\$releasever/\$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF

# Upgrade Nginx.
sudo yum upgrade nginx

Debian/Ubuntu

# Upgrade Nginx.
sudo apt-get update
sudo apt-get install --only-upgrade nginx

Compilando a partir do código-fonte

  1. Instale as dependências de compilação.

    RHEL/CentOS

    sudo yum install -y gcc pcre-devel zlib-devel openssl-devel

    Debian/Ubuntu

    sudo apt-get update
    sudo apt-get install -y build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev
  2. Anote os parâmetros de compilação atuais.

    nginx -V

    Copie todos os parâmetros exibidos após configure arguments:. Eles serão necessários na etapa 4.

  3. Baixe o código-fonte da versão atual do Nginx. Execute nginx -v para verificar a versão (1.14.2 é usado como exemplo). Em seguida, baixe e extraia o pacote de origem:

    wget http://nginx.org/download/nginx-1.14.2.tar.gz
    tar -zxvf nginx-1.14.2.tar.gz
    cd nginx-1.14.2
  4. Recompile o Nginx com o módulo SSL. Adicione --with-http_ssl_module aos parâmetros anotados e recompile:

    Se você vir error: 'ENGINE_by_id' is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations] , execute make CFLAGS='-Wno-error=deprecated-declarations' em vez disso.
    # Keep all original parameters to avoid losing existing modules.
    ./configure <Original parameters> --with-http_ssl_module
    make
  5. Substitua o binário do Nginx. Faça backup do binário original (usando /usr/local/nginx/sbin/nginx como exemplo):

    # Replace /usr/local/nginx/sbin/nginx with the actual path to your nginx binary.
    sudo cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak

    Sobrescreva com o binário recém-compilado:

    # Replace /usr/local/nginx/sbin/nginx with the actual path to your nginx binary.
    sudo cp objs/nginx /usr/local/nginx/sbin/nginx
  6. Verifique se o módulo SSL está instalado.

    nginx -V 2>&1 | grep -o -- '--with-http_ssl_module'

    A saída --with-http_ssl_module confirma que o módulo está instalado.

Configure o certificado SSL

Importante

As etapas a seguir usam o Nginx 1.14.2 e o arquivo de configuração /etc/nginx/nginx.conf como exemplo. Para encontrar o arquivo de configuração ativo no servidor, consulte Como encontro o arquivo de configuração ativo do Nginx?

  1. Abra o arquivo de configuração.

    sudo vim /etc/nginx/nginx.conf
  2. Adicione um bloco de servidor para HTTPS. Copie o bloco server existente que escuta na porta 80, altere listen 80 para listen 443 ssl e adicione as diretivas SSL mostradas abaixo. Mantenha todas as outras configurações inalteradas.

    # Original server block listening on port 80
    server {
        listen 80;
        server_name yourdomain www.yourdomain;
    
        # Other configurations
        location / {
            proxy_pass http://127.0.0.1:8000;
        }
    }
    
    # New server block for HTTPS.
    server {
        # Change the original 'listen 80' to 'listen 443 ssl'.
        listen 443 ssl;
        # Original server_name. You can add more domain names supported by the current certificate.
        server_name yourdomain www.yourdomain;
    
        # ======================= Start of certificate configuration =======================
        # Specify the certificate file (the intermediate certificate can be appended to this .pem file). Replace /etc/ssl/cert/ssl.pem with the absolute path of your certificate file.
        ssl_certificate /etc/ssl/cert/ssl.pem;
        # Specify the private key file. Replace /etc/ssl/cert/ssl.key with the absolute path of your private key file.
        ssl_certificate_key /etc/ssl/cert/ssl.key;
        # Configure the SSL session cache to improve performance.
        ssl_session_cache shared:SSL:1m;
        # Set the SSL session timeout period.
        ssl_session_timeout 5m;
        # Customize the TLS protocol types and cipher suites to use (the following is an example configuration; evaluate whether you need to configure it).
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        # Specify the allowed TLS protocol versions. Higher TLS versions provide better security for HTTPS communication, but have poorer browser compatibility than lower TLS versions.
        ssl_protocols TLSv1.2 TLSv1.3;
        # Prioritize the cipher suites specified by the server.
        ssl_prefer_server_ciphers on;
        # ======================= End of certificate configuration =======================
    
        # Other configurations
    }
  3. (Opcional) Redirecione HTTP para HTTPS. Adicione a diretiva return ao bloco de servidor da porta 80.

    # Original server block listening on port 80
    server {
        listen 80;
        server_name yourdomain www.yourdomain;
    
        # Redirect all HTTP traffic to HTTPS.
        return 301 https://$host$request_uri;
    
        # Other original configurations can be removed as they will no longer be reached.
    }
  4. Teste a configuração em busca de erros de sintaxe.

    sudo nginx -t -c /etc/nginx/nginx.conf

    Se a saída incluir tanto syntax is ok quanto test is successful, a configuração é válida. Caso contrário, corrija os erros relatados e execute o teste novamente.

Recarregar o Nginx

Importante

Estes comandos assumem que o Nginx foi iniciado com o caminho de configuração padrão. Se houver um caminho de instalação ou arquivo de configuração personalizado, ajuste conforme necessário.

O Nginx está em execução

Recarregue a configuração sem reiniciar o serviço:

sudo nginx -s reload

Se o recarregamento falhar, consulte o FAQ para solução de problemas.

O Nginx não está em execução

Inicie-o:

nginx

Etapa 4: Verifique a implantação

  1. Abra um navegador e acesse https://yourdomain. Substitua yourdomain pelo domínio real.

  2. Um ícone de cadeado na barra de endereços confirma a implantação bem-sucedida do certificado. A partir da versão 117 do Chrome, o ícone image foi substituído por um novo ícone image. Clique em nele para visualize os detalhes do certificado. Se houver erros de acesso ou ausência do ícone de cadeado, limpe o cache do navegador ou tente novamente no modo anônimo.

    image

Se os problemas persistirem, consulte o FAQ para solução de problemas.

Entrando em produção

Ao implantar em produção, aplique as seguintes práticas recomendadas:

Prática

Por que é importante

Como aplicar

Execute como usuário não root

Limita o impacto de um incidente de segurança

Crie um usuário de sistema dedicado com baixos privilégios para a aplicação

Terminar SSL no gateway

Simplifica o gerenciamento de certificados e reduz a complexidade do backend

Implante o certificado em um Server Load Balancer (SLB). O SLB termina o HTTPS e encaminha HTTP simples para o backend

Externalizar segredos

Evita vazamento de credenciais via source ou arquivos de configuração

Use variáveis de ambiente, HashiCorp Vault ou Alibaba Cloud Key Management Service em vez de codificar senhas diretamente

Forçar redirecionamento de HTTP para HTTPS

Previne ataques man-in-the-middle em tráfego não criptografado

Adicione return 301 https://$host$request_uri; ao bloco de servidor da porta 80

Desativar versões inseguras de TLS

SSLv3, TLSv1.0 e TLSv1.1 são vulneráveis a ataques conhecidos

Defina ssl_protocols TLSv1.2 TLSv1.3; na configuração do Nginx

Monitorar certificados e renovar a tempo

Um certificado expirado interrompe o HTTPS para todos os usuários

Ative o monitoramento de domínio. A Alibaba Cloud verifica a validade do certificado e envia lembretes de renovação antes da expiração. Consulte Comprar e ative monitoramento de nome de domínio público

FAQ

Por que o HTTPS fica inacessível após a instalação?

Verifique os itens a seguir nesta ordem:

  • Porta 443 bloqueada — O grupo de segurança ou firewall não permite tráfego de entrada na porta 443. Consulte Abrir a porta 443.

  • Incompatibilidade de domínio — O domínio acessado não está listado nos Bound Domains do certificado. Consulte a tabela de cobertura de domínio em Pré-requisitos.

  • Nginx não recarregado — A configuração não foi recarregada após as alterações. Execute sudo nginx -s reload.

  • Caminhos de arquivo incorretos — As diretivas ssl_certificate ou ssl_certificate_key apontam para caminhos errados. Verifique os caminhos absolutos dos arquivos .pem e .key.

  • Certificado ausente em serviços upstream — Se o domínio passar por uma Content Delivery Network (CDN), Server Load Balancer (SLB) ou Web Application Firewall (WAF), o certificado também deve ser instalado nesses serviços. Consulte Locais de implantação de certificado quando o tráfego passa por vários serviços da Alibaba Cloud.

  • Certificado não implantado em todos os servidores — Se o DNS do domínio resolver para múltiplos servidores, instale o certificado em cada um deles.

Para mais ajuda, 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 certificado SSL .

Como atualize ou substituir um certificado SSL sem tempo de inatividade?

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

  2. Baixe o novo certificado e a chave privada do console Certificate Management Service.

  3. Carregue os novos arquivos no servidor, substituindo os existentes. Use exatamente os mesmos caminhos e nomes de arquivos referenciados na configuração do Nginx.

  4. Recarregue o Nginx: sudo nginx -s reload.

Como encontro o arquivo de configuração ativo do Nginx (nginx.conf) em um servidor Linux?

  1. Execute ps -ef | grep '[n]ginx: master' | grep -- ' -c '. Se a saída incluir algo como -c /etc/nginx/custom.conf, o Nginx está usando esse arquivo de configuração personalizado.

  2. Se a etapa 1 não retornar nenhuma saída, o Nginx está usando o caminho padrão compilado. Execute nginx -V 2>&1 | grep -oP -- '--conf-path=[^ ]*' para visualize o caminho padrão, por exemplo --conf-path=/etc/nginx/nginx.conf.

Como desativo TLSv1.0 e TLSv1.1 para corrigir avisos de "certificado não atende aos padrões"?

Defina a diretiva ssl_protocols na configuração do Nginx como:

ssl_protocols TLSv1.2 TLSv1.3;

Isso desativa os protocolos inseguros TLSv1.0 e TLSv1.1. Após salve o arquivo, execute nginx -s reload para aplicar a alteração.

Por que nginx -t falha com bind() to 0.0.0.0:443 failed (98: Address already in use)?

Outro processo já está escutando na porta 443. Execute sudo ss -tlnp | grep :443 para identificá-lo. Em seguida, pare o processo conflitante (como outro servidor web ou uma instância travada do Nginx) ou configure-o para usar uma porta diferente.

Por que nginx -t falha com cannot load certificate "/etc/nginx/ssl/domain.pem": BIO_new_file() failed?

O Nginx não consegue encontrar o arquivo de certificado no caminho especificado na configuração. Corrija a diretiva ssl_certificate no nginx.conf para apontar para o caminho absoluto real do arquivo .pem.

Por que o recarregamento do Nginx falha com the "ssl" parameter requires ngx_http_ssl_module?

A compilação do Nginx está sem o módulo SSL. Instale ou recompile o Nginx com ngx_http_ssl_module ativado. Consulte Instale o módulo SSL.

Por que recebo No such file or directory: fopen('/cert/3970497_demo.aliyundoc.com.pem','r') ao recarregar o Nginx?

O caminho especificado para ssl_certificate ou ssl_certificate_key está incorreto. Verifique se os caminhos na configuração são caminhos absolutos corretos e se os arquivos existem nesses locais.

Por que o Nginx falha ao ler os arquivos de certificado SSL com um erro permission denied?

O usuário do processo worker do Nginx não tem acesso de leitura aos arquivos de certificado.

  1. Encontre o usuário worker do Nginx: procure a diretiva user no nginx.conf (por exemplo, user nginx;).

  2. Conceda a esse usuário permissão de leitura (r) nos arquivos de certificado e chave privada, e permissão de execução (x) em todos os diretórios pai no caminho.