Votre VPS tourne, Apache répond, votre domaine est en ligne — mais en HTTP. En 2024, un site sans HTTPS est pénalisé par les navigateurs, signalé comme "non sécurisé" et moins bien référencé. Dans cet article, on installe un certificat SSL Let's Encrypt gratuitement grâce au script Acme PHP, et on configure Apache pour servir votre site en HTTPS.
Cet article fait suite à Mettre en place son VPS : accès SSH et premier serveur web. Il suppose que vous avez Apache et PHP installés, et un Virtual Host configuré pour votre domaine.
Votre site est accessible en HTTP — mais les navigateurs modernes affichent un avertissement "Non sécurisé" dès qu'un site n'est pas en HTTPS. Au-delà de l'aspect visuel, le SSL est aujourd'hui incontournable pour trois raisons :
- Sécurité : les échanges entre le visiteur et votre serveur sont chiffrés
- SEO : Google favorise les sites en HTTPS dans son classement
- Confiance : le cadenas rassure vos visiteurs
Sur un hébergement mutualisé, le SSL est souvent géré automatiquement. Sur un VPS, c'est à vous de le faire. Bonne nouvelle : avec Let's Encrypt et le script Acme PHP, c'est gratuit et relativement simple.
Pour la suite, on considère que vous souhaitez sécuriser le domaine
acme.test, avec l'utilisateurjohndoesur votre VPS.
1. Présentation des outils
Let's Encrypt est une autorité de certification gratuite et automatisée, soutenue par des acteurs majeurs du web (Mozilla, Google, etc.). Elle délivre des certificats SSL valables 90 jours, renouvelables à l'infini.
Acme PHP est un client PHP qui implémente le protocole ACME utilisé par Let's Encrypt. Il permet d'obtenir et de gérer vos certificats directement depuis votre VPS via la ligne de commande.
2. Installation du script Acme PHP
Connectez-vous à votre VPS et exécutez les commandes suivantes depuis votre répertoire personnel :
cd ~
php -r "copy('https://github.com/acmephp/acmephp/releases/download/1.0.1/acmephp.phar', 'acmephp.phar');"
php -r "copy('https://github.com/acmephp/acmephp/releases/download/1.0.1/acmephp.phar.pubkey', 'acmephp.phar.pubkey');"
Vérifiez que le script est bien installé :
php acmephp.phar --version
Vous devriez voir :
Acme PHP - Let's Encrypt client 1.0.1
3. S'enregistrer sur Let's Encrypt
Cette étape crée un compte sur les serveurs de Let's Encrypt et génère les ressources cryptographiques nécessaires sur votre VPS. Remplacez l'adresse email par la vôtre :
php acmephp.phar register votre@email.com
L'adresse email est utilisée par Let's Encrypt pour vous notifier en cas de problème avec votre certificat (expiration imminente, révocation, etc.). Utilisez une adresse que vous consultez régulièrement.
4. Prouver que le domaine vous appartient
Avant de délivrer un certificat, Let's Encrypt doit vérifier que vous contrôlez bien le domaine. Il existe deux méthodes ; nous utilisons ici la vérification par fichier : vous déposez un fichier à un emplacement précis sur votre serveur, et Let's Encrypt vérifie qu'il est accessible publiquement.
4.1. Lancer l'autorisation
php acmephp.phar authorize acme.test
La commande retourne des instructions contenant :
- un token — le nom du fichier à créer
- une clé — le contenu exact de ce fichier
4.2. Créer le fichier de vérification
Le fichier doit être accessible à l'URL suivante :
http://acme.test/.well-known/acme-challenge/<token>
Créez l'arborescence et le fichier :
mkdir -p ~/projects/default/.well-known/acme-challenge
nano ~/projects/default/.well-known/acme-challenge/<token>
Collez-y exactement la clé fournie par la commande précédente (sans espace ni saut de ligne supplémentaire).
Vérifiez que le fichier est bien accessible depuis votre navigateur avant de passer à l'étape suivante :
http://acme.test/.well-known/acme-challenge/<token>
Le navigateur doit afficher uniquement la clé.
5. Vérifier et obtenir le certificat
5.1. Vérifier la propriété du domaine
php acmephp.phar check acme.test
Si tout est correct, Let's Encrypt confirme que le domaine vous appartient.
5.2. Générer le certificat
php acmephp.phar request acme.test
Les certificats sont générés et stockés dans ~/.acmephp/master/certs/acme.test/. Voici les fichiers qui nous intéressent :
| Fichier | Utilité |
|---|---|
public/fullchain.pem |
Certificat complet (à fournir à Apache) |
private/key.private.pem |
Clé privée (à fournir à Apache) |
Pour créer un certificat couvrant plusieurs domaines à la fois (ex:
acme.testetwww.acme.test), consultez ce guide sur les certificats multi-domaines.
6. Configurer Apache pour HTTPS
6.1. Activer le module SSL
Apache nécessite le module ssl pour gérer les connexions HTTPS. Activez-le :
sudo a2enmod ssl
sudo systemctl restart apache2
6.2. Mettre à jour le Virtual Host
Éditez votre fichier de configuration Apache :
sudo nano /etc/apache2/sites-available/acme.conf
Ajoutez le bloc suivant sous votre configuration HTTP existante (port 80) :
<VirtualHost *:443>
ServerAdmin webmaster@localhost
ServerName acme.test
DocumentRoot /home/johndoe/projects/default/
SSLEngine on
SSLCertificateFile /home/johndoe/.acmephp/master/certs/acme.test/public/fullchain.pem
SSLCertificateKeyFile /home/johndoe/.acmephp/master/certs/acme.test/private/key.private.pem
<Directory "/home/johndoe/projects/default/">
Options +Indexes +Includes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted
</Directory>
ErrorLog /home/johndoe/logs/default-errors.log
CustomLog /home/johndoe/logs/default-access.log combined
</VirtualHost>
6.3. (Optionnel) Rediriger HTTP vers HTTPS
Pour forcer automatiquement tous les visiteurs vers HTTPS, modifiez votre bloc port 80 existant :
<VirtualHost *:80>
ServerName acme.test
Redirect permanent / https://acme.test/
</VirtualHost>
6.4. Appliquer la configuration
Vérifiez la syntaxe, puis redémarrez Apache :
sudo apache2ctl configtest
Syntax OK
sudo systemctl restart apache2
Accédez à https://acme.test — le cadenas s'affiche dans votre navigateur 🔒
7. Renouveler le certificat
Les certificats Let's Encrypt expirent au bout de 90 jours. Pour éviter toute interruption, il faut les renouveler régulièrement. Acme PHP ne gère pas le renouvellement automatique, mais vous pouvez l'automatiser avec un cron job.
Éditez la crontab de votre utilisateur :
crontab -e
Ajoutez la ligne suivante pour relancer la demande de certificat tous les 60 jours (30 jours avant expiration) :
0 3 */60 * * php ~/acmephp.phar request acme.test && sudo systemctl reload apache2
Pourquoi 60 jours ? Let's Encrypt recommande de renouveler au moins 30 jours avant expiration. Un renouvellement toutes les 60 jours vous laisse une marge confortable sans solliciter inutilement leurs serveurs.
Récapitulatif
Votre VPS sert maintenant votre site en HTTPS avec un certificat valide :
- ✅ Script Acme PHP installé
- ✅ Compte Let's Encrypt enregistré
- ✅ Propriété du domaine prouvée
- ✅ Certificat SSL généré
- ✅ Apache configuré pour le port 443
- ✅ Renouvellement automatique planifié
La suite
Votre serveur est sécurisé et accessible en HTTPS. Il est maintenant temps de le rendre vraiment opérationnel pour un projet PHP : dans le prochain article, nous installerons MariaDB, PhpMyAdmin et Composer pour disposer d'un environnement PHP complet, prêt pour la production.
Ressources :
Français
English
Add a comment