Aller au contenu principal

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 :

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 :

  1. Vérifier la propriété du domaine
  2. Obtenir le certificat
  3. Configurer automatiquement Nginx pour HTTPS
  4. 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 :

  1. Vérifier la propriété du domaine
  2. Obtenir le certificat
  3. Configurer automatiquement Apache pour HTTPS
  4. Activer le module SSL si nécessaire
Conseil

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

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