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'utilisateur johndoe sur 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.test et www.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 :

Article précédent Article suivant


Ajouter un commentaire