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. Instalar um certificado SSL ativa o HTTPS, criptografa o tráfego entre clientes e servidor e verifica a identidade do servidor.
Este guia usa Linux e jetty-distribution-9.4.51.v20230217 como ambiente de exemplo. As etapas podem variar conforme o sistema operacional ou a versão do Jetty.
Pré-requisitos
Antes de começar, verifique se você tem:
Um certificado SSL emitido por uma autoridade certificadora confiável. Se o certificado estiver prestes a expirar ou já tiver expirado, renove-o antes de prosseguir.
-
Um certificado que cubra todos os nomes de domínio a proteger. Para adicionar ou alterar domínios, adquira um certificado comercial ou atualize os domínios vinculados.
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 curinga correspondente (por exemplo,*.b.example.com).Tipo de domínio
Cobertura
Correspondência exata (
example.com)Apenas o domínio especificado
Curinga (
*.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 de vários níveis, comoa.b.example.com. Uma conta
rootou 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.
Visão geral
A instalação envolve cinco etapas:
|
Etapa |
Tarefa |
|
1 |
Baixe o certificado JKS do console Alibaba Cloud |
|
2 |
Abrir a porta 443 no grupo de segurança e no firewall do servidor |
|
3 |
Configure o módulo SSL do Jetty com o certificado |
|
4 |
Reiniciar o Jetty |
|
5 |
Verifique se o HTTPS está funcionando |
Etapa 1: Baixe o certificado SSL
Acesse a página SSL Certificate Management. Na coluna Actions do certificado desejado, clique em Download Certificate.
-
Na aba Download, selecione JKS como Server Type e baixe o pacote do certificado.
Java KeyStore (JKS) é o formato de keystore proprietário para ambientes Java.
-
Extraia o pacote. Ele contém dois arquivos:
Um arquivo
.jks— o arquivo de certificado que inclui a cadeia completa de certificados.Um arquivo
jks-password.txt— a senha do keystore.
Etapa 2: Abrir a porta 443
O tráfego HTTPS usa a porta 443. Abra essa porta no grupo de segurança da nuvem e no firewall do servidor.
Abrir a porta 443 no grupo de segurança
Se o 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 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 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 de nuvem, consulte a documentação correspondente.
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 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, 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
Carregar os arquivos de certificado
Carregue 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 servidor estiver no Alibaba Cloud ECS, 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. Use os nomes em camelCase mostrados acima.
Etapa 4: Reiniciar o Jetty
No diretório $JETTY_BASE, inicie o servidor Jetty com sudo. A porta 443 é privilegiada e requer 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 a instalação correta do certificado. Se aparecer um erro de acesso ou nenhum ícone de cadeado, 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 nesse í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.
Entrada 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. Use variáveis de ambiente, um gerenciador de segredos ou um serviço de gerenciamento de chaves na nuvem 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ções: 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 de serviço. 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 o firewall não está permitindo tráfego de entrada na porta 443. Consulte Abrir a porta 443.
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 de curingas e correspondências exatas.
Jetty não reiniciado: Alterações de configuração só entram em vigor após uma reinicialização. Consulte Reiniciar o 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 serviços upstream: Se o domínio usar Content Delivery Network (CDN), Server Load Balancer (SLB) ou Web Application Firewall (WAF), instale o certificado também nesses serviços. 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 servidor.Obter novos arquivos: Baixe o novo certificado no console do Certificate Management Service.
Substituir arquivos: Carregue os novos arquivos no mesmo caminho especificado em
ssl.ini, sobrescrevendo os antigos.Reiniciar o Jetty: Reinicie o serviço 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 serviços diretamente como root — use setcap para conceder ao binário do 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.