Retour au blog

Générer un certificat SSL gratuit pour vos WebServices

Générer un certificat SSL gratuit pour vos WebServices

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