Por padrão, o Jetty transmite dados via HTTP, o que expõe seus serviços a riscos como interceptação e sequestro de sessão. A instalação de um certificado SSL ativa o HTTPS, criptografa o tráfego entre clientes e o servidor e verifica a identidade do servidor.
Este guia utiliza Linux e jetty-distribution-9.4.51.v20230217 como ambiente de exemplo. Os passos podem variar conforme seu sistema operacional ou versão do Jetty.
Pré-requisitos
Antes de começar, certifique-se de ter:
Um certificado SSL emitido por uma autoridade certificadora confiável. Caso o certificado esteja expirando ou já tenha expirado, renove-o antes de prosseguir.
-
Um certificado que cubra todos os nomes de domínio que você deseja proteger. Para adicionar ou alterar domínios, purchase a commercial certificate ou atualize the bound domains.
Para cobrir subdomínios de vários níveis, o campo Bound Domains deve conter o domínio exato (por exemplo,
a.b.example.com) ou um wildcard correspondente (por exemplo,*.b.example.com).Tipo de domínio
Cobertura
Correspondência exata (
example.com)Apenas o domínio especificado
Wildcard (
*.example.com)Somente subdomínios de primeiro nível (
www.example.com,a.example.com). Não cobre o domínio raizexample.comnem subdomínios multinível, comoa.b.example.com. Uma conta
rootou uma conta com privilégiossudono servidor.Resolução de DNS: O nome de domínio resolve para o endereço IP público do servidor.
Um registro DNS que resolva seu domínio para o endereço IP público do servidor.
Etapa 1: Baixe o certificado SSL
-
Acesse a página SSL Certificate Management. Na coluna Actions do certificado desejado, clique em More para acessar a página de detalhes do certificado. Na aba Download, baixe o certificado com Server Type definido como JKS.
Java KeyStore (JKS) é o formato de keystore proprietário para ambientes Java.
Extraia o pacote. Ele contém um arquivo
.jks(o arquivo de certificado que inclui a cadeia completa de certificados) e um arquivojks-password.txt(a senha do keystore).
Etapa 2: Configure o ambiente de sistema e rede
Esta etapa garante que a aplicação possa escutar na porta especificada e que grupos de segurança e firewalls permitam tráfego externo.
Abrir a porta 443 no grupo de segurança
Se o seu servidor estiver executando no Elastic Compute Service (ECS) da Alibaba Cloud, adicione uma regra de entrada ao grupo de segurança:
Acesse a página Elastic Compute Service (ECS) instances e clique em no nome da instância desejada.
-
Na seção Security Group Details, adicione uma regra com as configurações abaixo e salve. Para instruções detalhadas, consulte Add a security group rule.
Campo
Valor
Action
Allow
Protocol
Custom TCP
Destination (Current Instance)
HTTPS (443)
Source
0.0.0.0/0 (anywhere)
Para outras plataformas cloud, consulte a documentação respectiva.
Verifique se a porta 443 já está aberta
Execute o comando a seguir para verificar se a porta 443 está acessível. 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 saída for Ncat: Connected to <your_server_public_ip>:443, a porta 443 está aberta. Caso contrário, prossiga para abri-la no firewall.
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.
Abrir a porta 443 no firewall
Primeiro, identifique o service 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, nenhum firewall está ativo e nenhuma ação adicional é necessária. Caso contrário, execute o comando correspondente ao seu 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 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: Instale o certificado SSL no Jetty
Configure a estrutura de diretórios
O Jetty separa o diretório de instalação ($JETTY_HOME) do diretório de trabalho ($JETTY_BASE). Mantenha-os separados para simplificar futuras atualizações.
# Example: Jetty is installed in /usr/local/jetty; the application runs from /var/www/my-app.
export JETTY_HOME=/usr/local/jetty
export JETTY_BASE=/var/www/my-app
# Create directories for certificate files and web application resources.
mkdir -p $JETTY_BASE/cert
mkdir -p $JETTY_BASE/webapps
cd $JETTY_BASE
Fazer upload dos arquivos de certificado
Transfira o arquivo .jks e o arquivo jks-password.txt para o diretório $JETTY_BASE/cert/ usando uma ferramenta de transferência de arquivos como PuTTY, Xshell ou WinSCP. Se o seu servidor estiver no ECS da Alibaba Cloud, consulte Upload or download files.
Ative o módulo SSL
No diretório $JETTY_BASE, execute o comando a seguir para inicializar o módulo ssl. Isso gera os arquivos ssl.ini e https.ini em $JETTY_BASE/start.d/.
java -jar $JETTY_HOME/start.jar --add-to-start=ssl
Configure o caminho e a senha do certificado
Abra o arquivo $JETTY_BASE/start.d/ssl.ini para edição:
vim $JETTY_BASE/start.d/ssl.ini
Localize e atualize os parâmetros a seguir. Certifique-se de que nenhum deles esteja comentado com #.
jetty.ssl.keyStorePath=cert/your_domain.jks
jetty.ssl.keyStorePassword=<password from jks-password.txt>
jetty.ssl.keyManagerPassword=<password from jks-password.txt>
|
Parâmetro |
Descrição |
Exemplo |
|
|
Caminho relativo de |
|
|
|
Senha obtida em |
— |
|
|
Mesmo valor de |
— |
Os nomes de parâmetros mais antigosjetty.ssl.keystore.path,jetty.ssl.keystore.passwordejetty.ssl.keymanager.passwordforam descontinuados. Utilize os nomes em camelCase mostrados acima.
Etapa 4: Reiniciar o Jetty
A partir do diretório $JETTY_BASE, inicie o servidor Jetty com sudo. A porta 443 é privilegiada e exige permissões de root.
# Change to the Jetty working directory.
cd $JETTY_BASE
# Start the service.
sudo java -jar $JETTY_HOME/start.jar
Etapa 5: Verifique a instalação
Abra um navegador e acesse
https://yourdomain. Substituayourdomainpelo seu domínio real.Um ícone de cadeado na barra de endereços confirma que o certificado foi instalado corretamente. Se houver erro de acesso ou ausência do ícone, limpe o cache do navegador ou tente novamente no modo anônimo.

A partir do Chrome 117, o ícone de cadeado
foi substituído por
. Clique em neste ícone para visualizar os detalhes do certificado.

Uma resposta Error 404 indica que o Jetty iniciou com sucesso, mas não há nenhuma aplicação web implantada. Esse comportamento é esperado em uma instalação nova.
Entrando em produção
Ao migrar para produção, aplique estas práticas para melhorar a segurança e a estabilidade:
-
Executar como usuário não root: Crie uma conta de sistema dedicada e com baixos privilégios para a aplicação. Nunca execute o Jetty como root.
Uma abordagem recomendada é terminar o SSL na camada de gateway — 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 o Jetty.
Externalizar credenciais: Nunca codifique senhas ou valores sensíveis diretamente nos arquivos de configuração. Utilize variáveis de ambiente, um gerenciador de segredos ou um service de gerenciamento de chaves cloud para injetar credenciais em tempo de execução.
Impor redirecionamento de HTTP para HTTPS: Redirecione todo o tráfego HTTP para HTTPS para evitar ataques man-in-the-middle.
Desativar protocolos TLS legados: Na configuração do servidor, desative SSLv3, TLS 1.0 e TLS 1.1. Ative apenas TLS 1.2 e TLS 1.3.
Monitorar certificados e automatizar renovação: Após a implantação, ative o monitoramento de domínios. A Alibaba Cloud verifica a validade dos certificados e envia lembretes de renovação antes da expiração, permitindo que você aja antes de qualquer interrupção do service. Consulte Purchase and enable public domain name monitoring.
Perguntas frequentes
O HTTPS não funciona após a instalação
Verifique os itens a seguir nesta ordem:
Porta 443 bloqueada: O grupo de segurança ou firewall não está permitindo tráfego de entrada na porta 443. Consulte Configure o ambiente de sistema e rede.
Incompatibilidade de domínio: O domínio acessado não consta nos Bound Domains do certificado. Consulte a seção de pré-requisitos para regras de cobertura wildcard e correspondência exata.
Jetty não reiniciado: Alterações de configuração só entram em vigor após reinicialização. Consulte Restart Jetty.
Caminho ou senha do certificado incorretos: Verifique se
jetty.ssl.keyStorePathaponta para o arquivo.jkscorreto e se a senha emssl.inicorresponde à dejks-password.txt.Certificado ausente em services upstream: Se o seu domínio utiliza Content Delivery Network (CDN), Server Load Balancer (SLB) ou Web Application Firewall (WAF), instale o certificado também nesses services. Consulte Certificate deployment locations when traffic passes through multiple Alibaba Cloud services.
Múltiplos servidores: Se o DNS resolver para mais de um servidor, instale o certificado em todos eles.
Para solução de problemas adicionais, consulte Resolve certificate deployment issues based on browser error messages e SSL certificate deployment troubleshooting guide.
Como substituir um certificado SSL no Jetty?
Fazer backup dos arquivos antigos: Salve os arquivos
.jksejks-password.txtexistentes no seu servidor.Obter novos arquivos: Baixe o novo certificado no console do Certificate Management Service.
Substituir arquivos: Faça upload dos novos arquivos para o mesmo caminho especificado em
ssl.ini, sobrescrevendo os antigos.Reiniciar o Jetty: Reinicie o service para aplicar o novo certificado.
Falha na inicialização: "Address already in use" ou "Port is already occupied"
A porta 443 já está vinculada a outro processo. Execute sudo ss -tlnp | grep :443 ou sudo lsof -i:443 para identificar o processo e interrompê-lo. Causas comuns incluem Nginx, Apache ou um listener de teste que não foi encerrado.
Falha na inicialização: "Permission denied"
No Linux, vincular-se a portas abaixo de 1024 requer permissões de root. Inicie o Jetty com sudo. Em produção, evite executar services diretamente como root — utilize setcap para conceder ao binário Java a capacidade de se vincular a portas privilegiadas:
sudo setcap 'cap_net_bind_service=+ep' /path/to/your/java
Alternativamente, coloque o Jetty atrás de um proxy reverso como o Nginx, que escuta na porta 443 e encaminha o tráfego para uma porta não privilegiada.