
Dans cet article, nous allons voir comment générer un certificat SSL gratuit avec Let's Encrypt, pour votre serveur web et vos API webservices pour vos applications Android et iPhone.
Dans ce tutoriel, nous utiliserons CertBot sur notre serveur Debian pour générer un certificat multi-domaines.
1 – Installer Let's Encrypt
Il faut d'abord installer l'application qui génère les certificats.
Exécutez les commandes suivantes dans un terminal :
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
./certbot-auto
2 – Générer le certificat SSL
Génération manuelle
La meilleure option est de spécifier le WebRoot pour permettre le renouvellement automatique, mais dans certains cas il faut le faire manuellement.
Cette commande lance un serveur local temporaire :
./certbot-auto certonly --manual
Renseignez le nom de votre site avec et sans "www.", par exemple :
www.example.com example.com
Puis exécutez la commande indiquée dans la console dans un nouveau terminal.
Génération automatique
Le mode automatique est le meilleur car il permet le renouvellement automatique :
./certbot-auto certonly --webroot -w /var/www/example-server/ -d example.com -d www.example.com -d api.example.com
3 – Configurer Nginx
Utiliser les certificats générés
Quelques étapes pour utiliser les certificats dans le répertoire /etc/letsencrypt/live/example.com :
cd /etc/letsencrypt/live/example.com
cp fullchain.pem key.crt
cp privkey.pem ssl.key
Configurer le serveur web
Modifiez votre fichier de configuration Nginx pour activer SSL :
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
}
4 – Configurer Apache
Utiliser les certificats générés
cd /etc/letsencrypt/live/example.com
cp cert.pem key.crt
cp chain.pem ssl.ca
cp privkey.pem ssl.key
Configurer le serveur web
Modifiez votre fichier de configuration Apache pour activer SSL :
<VirtualHost *>
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/example.com/ssl.cert
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/ssl.key
SSLCACertificateFile /etc/letsencrypt/live/example.com/ssl.ca
</VirtualHost>
5 – Tester le certificat
Il est crucial de vérifier que votre certificat est correctement installé avec la chaîne complète. Parfois ça ne fonctionne pas sur Android si la chaîne de certificats n'est pas complète !
openssl s_client -connect nolimitdevelopment.com:443
Voici à quoi devrait ressembler une bonne chaîne de certificats dans la sortie openssl :
---
Certificate chain
0 s:/CN=www.nolimitdevelopment.com
i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
1 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
i:/O=Digital Signature Trust Co./CN=DST Root CA X3
---
6 – Tester le renouvellement automatique
certbot-auto renew --dry-run
7 – Configurer le renouvellement automatique quotidien avec cron
Il est recommandé de vérifier une à deux fois par jour. Le processus ne fera rien tant que vos certificats ne sont pas à renouveler ou révoqués.
crontab -e
Ajoutez la ligne suivante :
0 5 * * * certbot-auto renew --quiet --no-self-upgrade && sudo service nginx reload
Conclusion
Vous savez maintenant comment générer un certificat SSL gratuit qui fonctionne sur votre serveur et sur les applications mobiles Android et iPhone.
Dépannage : erreur 403 sur WordPress pendant le renouvellement
Si vous utilisez Apache, créez un fichier .htaccess dans votre racine web à /.well-known/.htaccess avec le contenu suivant :
# Contourner le .htaccess trop restrictif
RewriteEngine On
Satisfy Any