Par défaut, Jetty transmet les données via HTTP, ce qui expose vos services à des risques tels que l'écoute clandestine et le détournement de session. L'installation d'un certificat SSL active le protocole HTTPS, chiffre le trafic entre les clients et le serveur, et vérifie l'identité du serveur.
Ce guide utilise Linux et jetty-distribution-9.4.51.v20230217 comme environnement d'exemple. Les étapes peuvent varier en fonction de votre système d'exploitation ou de votre version de Jetty.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Un certificat SSL émis par une autorité de certification de confiance. Si le certificat est sur le point d'expirer ou a déjà expiré, renouvelez-le au préalable.
-
Un certificat couvrant tous les noms de domaine que vous souhaitez sécuriser. Pour ajouter ou modifier des noms de domaine, achetez un certificat commercial ou mettez à jour les domaines liés.
Pour couvrir les sous-domaines multiniveaux, le champ Bound Domains doit contenir le domaine exact (par exemple,
a.b.example.com) ou un caractère générique correspondant (par exemple,*.b.example.com).Type de domaine Couverture Correspondance exacte ( example.com)Uniquement le domaine spécifié Caractère générique ( *.example.com)Uniquement les sous-domaines de premier niveau ( www.example.com,a.example.com). Ne couvre pas le domaine racineexample.comni les sous-domaines multiniveaux tels quea.b.example.com. Un compte
rootou un compte disposant des privilègessudosur le serveur.Résolution DNS : le nom de domaine pointe vers l'adresse IP publique du serveur.
Un enregistrement DNS qui résout votre domaine vers l'adresse IP publique du serveur.
Étape 1 : Télécharger le certificat SSL
-
Accédez à la page SSL Certificate Management. Dans la colonne Actions du certificat cible, cliquez sur More pour accéder à la page des détails du certificat. Dans l'onglet Download , téléchargez le certificat avec le paramètre Server Type défini sur JKS.
Java KeyStore (JKS) est le format de keystore propriétaire pour les environnements Java.
Extrayez l'archive. Elle contient un fichier
.jks(le fichier de certificat incluant la chaîne complète de certificats) et un fichierjks-password.txt(le mot de passe du keystore).
Étape 2 : Configurer l'environnement système et réseau
Cette étape garantit que l'application peut écouter sur le port spécifié et que les groupes de sécurité et les pare-feux autorisent le trafic externe.
Ouvrir le port 443 dans le groupe de sécurité
Si votre serveur s'exécute sur Alibaba Cloud Elastic Compute Service (ECS), ajoutez une règle entrante au groupe de sécurité :
Accédez à la page Elastic Compute Service (ECS) instances et cliquez sur le nom de l'instance cible.
-
Dans la section Security Group Details , ajoutez une règle avec les paramètres suivants, puis enregistrez. Pour des instructions détaillées, reportez-vous à Ajouter une règle de groupe de sécurité.
Champ Valeur Action Allow Protocol Custom TCP Destination (Current Instance) HTTPS (443) Source 0.0.0.0/0 (anywhere)
Pour les autres plateformes cloud, reportez-vous à leur documentation.
Vérifier si le port 443 est déjà ouvert
Exécutez la commande suivante pour vérifier que le port 443 est accessible. Remplacez <your_server_public_ip> par l'adresse IP publique de votre serveur.
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
Si la sortie est Ncat: Connected to <your_server_public_ip>:443, le port 443 est ouvert. Sinon, ouvrez-le dans le pare-feu.
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
Si la sortie est Connection to <your_server_public_ip> port [tcp/https] succeeded! ou [<your_server_public_ip>] 443 (https) open, le port 443 est ouvert.
Ouvrir le port 443 dans le pare-feu
Identifiez d'abord le service de pare-feu actif :
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
Si la sortie est none, aucun pare-feu n'est actif et aucune autre action n'est requise. Sinon, exécutez la commande correspondant à votre pare-feu :
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
Pour rendre les règles iptables persistantes après un redémarrage :
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
Étape 3 : Installer le certificat SSL sur Jetty
Configurer la structure des répertoires
Jetty sépare le répertoire d'installation ($JETTY_HOME) du répertoire de travail ($JETTY_BASE). Conservez cette séparation pour simplifier les futures mises à niveau.
# 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
Charger les fichiers de certificat
Chargez le fichier .jks et le fichier jks-password.txt dans le répertoire $JETTY_BASE/cert/ à l'aide d'un outil de transfert de fichiers tel que PuTTY, Xshell ou WinSCP. Si votre serveur se trouve sur Alibaba Cloud ECS, reportez-vous à Charger ou télécharger des fichiers.
Activer le module SSL
Dans le répertoire $JETTY_BASE , exécutez la commande suivante pour initialiser le module ssl . Cela génère les fichiers ssl.ini et https.ini dans $JETTY_BASE/start.d/ .
java -jar $JETTY_HOME/start.jar --add-to-start=ssl
Configurer le chemin d'accès au certificat et le mot de passe
Ouvrez le fichier $JETTY_BASE/start.d/ssl.ini pour le modifier :
vim $JETTY_BASE/start.d/ssl.ini
Recherchez et mettez à jour les paramètres suivants. Assurez-vous qu'aucun d'entre eux n'est commenté avec # .
jetty.ssl.keyStorePath=cert/your_domain.jks
jetty.ssl.keyStorePassword=<password from jks-password.txt>
jetty.ssl.keyManagerPassword=<password from jks-password.txt>
| Paramètre | Description | Exemple |
|---|---|---|
jetty.ssl.keyStorePath |
Chemin relatif depuis $JETTY_BASE vers le fichier .jks |
cert/your_domain.jks |
jetty.ssl.keyStorePassword |
Mot de passe issu du fichier jks-password.txt |
— |
jetty.ssl.keyManagerPassword |
Même valeur que keyStorePassword pour les certificats JKS d'Alibaba Cloud |
— |
Les anciens noms de paramètresjetty.ssl.keystore.path,jetty.ssl.keystore.passwordetjetty.ssl.keymanager.passwordsont obsolètes. Utilisez les noms en camelCase indiqués ci-dessus.
Étape 4 : Redémarrer Jetty
Depuis le répertoire $JETTY_BASE , démarrez le serveur Jetty avec sudo . Le port 443 est un port privilégié et nécessite des autorisations root.
# Change to the Jetty working directory.
cd $JETTY_BASE
# Start the service.
sudo java -jar $JETTY_HOME/start.jar
Étape 5 : Vérifier l'installation
Ouvrez un navigateur et accédez à
https://yourdomain. Remplacezyourdomainpar votre domaine réel.Une icône de cadenas dans la barre d'adresse confirme que le certificat est correctement installé. Si vous constatez une erreur d'accès ou l'absence d'icône de cadenas, videz le cache de votre navigateur ou réessayez en mode navigation privée.

À partir de Chrome 117, l'icône de cadenas
a été remplacée par
. Cliquez sur cette icône pour afficher les détails du certificat.

Une réponse Error 404 signifie que Jetty a démarré avec succès mais qu'aucune application web n'est déployée. Ce comportement est attendu lors d'une nouvelle installation.
Mise en production
Lors du passage en production, appliquez ces pratiques pour améliorer la sécurité et la stabilité :
-
Exécuter en tant qu'utilisateur non root : créez un compte système dédié à faibles privilèges pour l'application. N'exécutez jamais Jetty en tant que root.
Une approche recommandée consiste à terminer le protocole SSL au niveau de la passerelle : déployez le certificat sur un Server Load Balancer (SLB) ou un proxy inverse tel que Nginx. La passerelle gère le protocole HTTPS et transfère le trafic HTTP déchiffré vers Jetty.
Externaliser les identifiants : ne codez jamais en dur les mots de passe ou les valeurs sensibles dans les fichiers de configuration. Utilisez des variables d'environnement, un gestionnaire de secrets ou un service de gestion des clés cloud pour injecter les identifiants au moment de l'exécution.
Forcer la redirection HTTP vers HTTPS : redirigez tout le trafic HTTP vers HTTPS pour prévenir les attaques de type « man-in-the-middle ».
Désactiver les anciens protocoles TLS : dans la configuration de votre serveur, désactivez SSLv3, TLS 1.0 et TLS 1.1. Activez uniquement TLS 1.2 et TLS 1.3.
Surveiller les certificats et automatiser le renouvellement : après le déploiement, activez la surveillance des domaines. Alibaba Cloud vérifie la validité des certificats et envoie des rappels de renouvellement avant l'expiration afin que vous puissiez agir avant toute interruption de service. Reportez-vous à Acheter et activer la surveillance des noms de domaine publics.
FAQ
Le protocole HTTPS ne fonctionne pas après l'installation
Vérifiez les points suivants dans l'ordre :
Le port 443 est bloqué : le groupe de sécurité ou le pare-feu n'autorise pas le trafic entrant sur le port 443. Reportez-vous à Configurer l'environnement système et réseau.
Incompatibilité de domaine : le domaine auquel vous accédez ne figure pas dans la liste des domaines liés (Bound Domains ) du certificat. Reportez-vous à la section Prérequis pour connaître les règles de couverture des caractères génériques et des correspondances exactes.
Jetty n'a pas été redémarré : les modifications de configuration ne prennent effet qu'après un redémarrage. Reportez-vous à Redémarrer Jetty.
Chemin d'accès au certificat ou mot de passe incorrect : vérifiez que
jetty.ssl.keyStorePathpointe vers le bon fichier.jkset que le mot de passe dansssl.inicorrespond à celui du fichierjks-password.txt.Certificat absent des services en amont : si votre domaine utilise un Content Delivery Network (CDN), un Server Load Balancer (SLB) ou un Web Application Firewall (WAF), installez également le certificat sur ces services. Reportez-vous à Emplacements de déploiement des certificats lorsque le trafic traverse plusieurs services Alibaba Cloud.
Serveurs multiples : si la résolution DNS pointe vers plusieurs serveurs, installez le certificat sur chacun d'eux.
Pour un dépannage supplémentaire, reportez-vous à Résoudre les problèmes de déploiement de certificats en fonction des messages d'erreur du navigateur et au Guide de dépannage du déploiement des certificats SSL.
Comment remplacer un certificat SSL dans Jetty ?
Sauvegarder les anciens fichiers : enregistrez les fichiers existants
.jksetjks-password.txtdepuis votre serveur.Obtenir les nouveaux fichiers : téléchargez le nouveau certificat depuis la console Certificate Management Service.
Remplacer les fichiers : chargez les nouveaux fichiers dans le même chemin spécifié dans
ssl.ini, en écrasant les anciens.Redémarrer Jetty : redémarrez le service pour appliquer le nouveau certificat.
Échec au démarrage : « Address already in use » ou « Port is already occupied »
Le port 443 est déjà utilisé par un autre processus. Exécutez sudo ss -tlnp | grep :443 ou sudo lsof -i:443 pour identifier le processus et l'arrêter. Les causes courantes incluent Nginx, Apache ou un écouteur de test qui n'a pas été arrêté.
Échec au démarrage : « Permission denied »
Sous Linux, la liaison aux ports inférieurs à 1024 nécessite des autorisations root. Démarrez Jetty avec sudo . En production, évitez d'exécuter les services directement en tant que root ; utilisez setcap pour accorder au binaire Java la capacité de se lier aux ports privilégiés :
sudo setcap 'cap_net_bind_service=+ep' /path/to/your/java
Vous pouvez également placer Jetty derrière un proxy inverse tel que Nginx, qui écoute sur le port 443 et transfère le trafic vers un port non privilégié.