Comment installer un certificat SSL sur un VPS
Ce guide vous explique comment installer un certificat SSL gratuit avec Let's Encrypt et Certbot sur votre VPS, pour Nginx ou Apache.
Commander un serveur
Pour héberger vos sites web sécurisés, HostMyServers propose plusieurs offres :
- VPS Performance - Idéal pour les sites à fort trafic
- VPS NVMe - Excellent rapport qualité/prix
- Serveurs dédiés Eco - Pour les projets nécessitant plus de ressources
- Serveurs dédiés Performance - Performance maximale
Prérequis
- Accès SSH root ou utilisateur avec sudo
- Un nom de domaine pointant vers l'adresse IP de votre serveur (enregistrement DNS A ou AAAA)
- Ports 80 (HTTP) et 443 (HTTPS) ouverts dans le pare-feu
- Nginx ou Apache installé et configuré
- Système Debian/Ubuntu à jour
Installation de Certbot
Méthode recommandée : via Snap
Cette méthode garantit d'avoir la dernière version de Certbot :
sudo apt update
sudo apt install snapd -y
sudo snap install core
sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
Méthode alternative : via APT
Pour Nginx :
sudo apt update
sudo apt install certbot python3-certbot-nginx -y
Pour Apache :
sudo apt update
sudo apt install certbot python3-certbot-apache -y
Vérifier la configuration du serveur web
Avant d'obtenir le certificat, assurez-vous que votre domaine est correctement configuré.
Pour Nginx
Vérifiez que votre bloc serveur contient le bon server_name :
sudo nano /etc/nginx/sites-available/votre_domaine
Le fichier doit contenir :
server {
listen 80;
listen [::]:80;
server_name votre_domaine.com www.votre_domaine.com;
root /var/www/votre_domaine;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ =404;
}
}
Testez et rechargez la configuration :
sudo nginx -t
sudo systemctl reload nginx
Pour Apache
Vérifiez votre VirtualHost :
sudo nano /etc/apache2/sites-available/votre_domaine.conf
Le fichier doit contenir :
<VirtualHost *:80>
ServerName votre_domaine.com
ServerAlias www.votre_domaine.com
DocumentRoot /var/www/votre_domaine
<Directory /var/www/votre_domaine>
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/votre_domaine-error.log
CustomLog ${APACHE_LOG_DIR}/votre_domaine-access.log combined
</VirtualHost>
Activez le site et rechargez :
sudo a2ensite votre_domaine.conf
sudo apachectl configtest
sudo systemctl reload apache2
Obtenir le certificat SSL
Avec Nginx
Exécutez Certbot avec le plugin Nginx :
sudo certbot --nginx -d votre_domaine.com -d www.votre_domaine.com
Certbot va :
- Vérifier la propriété du domaine
- Obtenir le certificat
- Configurer automatiquement Nginx pour HTTPS
- Mettre en place la redirection HTTP → HTTPS
Avec Apache
Exécutez Certbot avec le plugin Apache :
sudo certbot --apache -d votre_domaine.com -d www.votre_domaine.com
Certbot va :
- Vérifier la propriété du domaine
- Obtenir le certificat
- Configurer automatiquement Apache pour HTTPS
- Activer le module SSL si nécessaire
Lors de l'exécution, Certbot vous demandera si vous souhaitez rediriger automatiquement le trafic HTTP vers HTTPS. Choisissez oui pour une meilleure sécurité.
Configuration manuelle (optionnel)
Si vous préférez configurer manuellement le SSL, utilisez le mode certonly :
sudo certbot certonly --webroot -w /var/www/votre_domaine -d votre_domaine.com -d www.votre_domaine.com
Configuration Nginx manuelle
Modifiez votre bloc serveur :
# Redirection HTTP vers HTTPS
server {
listen 80;
listen [::]:80;
server_name votre_domaine.com www.votre_domaine.com;
return 301 https://$host$request_uri;
}
# Configuration HTTPS
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name votre_domaine.com www.votre_domaine.com;
ssl_certificate /etc/letsencrypt/live/votre_domaine.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/votre_domaine.com/privkey.pem;
# Paramètres SSL recommandés
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers off;
root /var/www/votre_domaine;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ =404;
}
}
Configuration Apache manuelle
Activez le module SSL :
sudo a2enmod ssl
sudo a2enmod rewrite
Créez ou modifiez votre VirtualHost SSL :
# Redirection HTTP vers HTTPS
<VirtualHost *:80>
ServerName votre_domaine.com
ServerAlias www.votre_domaine.com
Redirect permanent / https://votre_domaine.com/
</VirtualHost>
# Configuration HTTPS
<VirtualHost *:443>
ServerName votre_domaine.com
ServerAlias www.votre_domaine.com
DocumentRoot /var/www/votre_domaine
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/votre_domaine.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/votre_domaine.com/privkey.pem
# Paramètres SSL recommandés
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder off
<Directory /var/www/votre_domaine>
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/votre_domaine-ssl-error.log
CustomLog ${APACHE_LOG_DIR}/votre_domaine-ssl-access.log combined
</VirtualHost>
Rechargez Apache :
sudo systemctl restart apache2
Renouvellement automatique
Les certificats Let's Encrypt sont valides 90 jours. Certbot configure automatiquement le renouvellement.
Vérifier le renouvellement automatique
Testez le renouvellement sans l'exécuter réellement :
sudo certbot renew --dry-run
Vérifier le timer systemd
sudo systemctl status certbot.timer
Forcer le renouvellement
Si nécessaire, vous pouvez forcer le renouvellement :
sudo certbot renew
Ajouter un hook de rechargement
Pour recharger automatiquement le serveur web après le renouvellement :
Pour Nginx :
sudo certbot renew --post-hook "systemctl reload nginx"
Pour Apache :
sudo certbot renew --post-hook "systemctl reload apache2"
Vérifier le certificat
Via le navigateur
Accédez à https://votre_domaine.com et cliquez sur le cadenas dans la barre d'adresse pour voir les détails du certificat.
Via la ligne de commande
sudo certbot certificates
Tester la configuration SSL
Utilisez SSL Labs pour tester votre configuration :
https://www.ssllabs.com/ssltest/analyze.html?d=votre_domaine.com
Sécurisation avancée (optionnel)
Activer HSTS
Pour Nginx, ajoutez dans le bloc server HTTPS :
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
Pour Apache, ajoutez dans le VirtualHost HTTPS :
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
N'oubliez pas d'activer le module headers pour Apache :
sudo a2enmod headers
sudo systemctl restart apache2
En cas de problème
Erreur de validation du domaine
- Vérifiez que le DNS pointe bien vers votre serveur :
dig votre_domaine.com - Vérifiez que les ports 80 et 443 sont ouverts :
sudo ufw status - Vérifiez les logs Certbot :
sudo tail -f /var/log/letsencrypt/letsencrypt.log
Le site n'est pas accessible en HTTPS
- Vérifiez la configuration du serveur web
- Vérifiez que le port 443 est ouvert dans le pare-feu
- Consultez les logs du serveur web :
- Nginx :
sudo tail -f /var/log/nginx/error.log - Apache :
sudo tail -f /var/log/apache2/error.log
- Nginx :
Révoquer un certificat
Si nécessaire, vous pouvez révoquer un certificat :
sudo certbot revoke --cert-path /etc/letsencrypt/live/votre_domaine.com/cert.pem