GNU/Linux >> Tutoriels Linux >  >> Linux

Émettez des certificats SSL gratuits et signés par une autorité de certification pour les serveurs Web de LetsEncrypt

Présentation :
Les certificats SSL offrent deux fonctions :
1. Authentification
2. Cryptage

Le chiffrement peut être réalisé sans authentification mais, pour une raison quelconque, quelqu'un a décidé de les réunir dans un seul certificat. Cela semble logique pour les banques et les sites de commerce électronique sérieux qui doivent être correctement authentifiés. Par conséquent, lorsque le protocole HTTPS a été développé, il n'était pas possible de chiffrer uniquement le flux HTTP. Cette situation nous a rendus dépendants des autorités d'authentification des certificats pour obtenir un certificat même si nous ne voulions que le cryptage. Maintenant, un groupe de personnes géniales sur https://letsencrypt.org/ a finalement créé la possibilité d'obtenir des certificats qui effectuent une vérification d'authentification simple, en appelant l'URL et en attendant une réponse spécifique, et en cas de succès, émet une validité gratuite de 90 jours et une autorité de certification signée Certificat SSL. Pour les administrateurs système, ce processus de demande et d'installation d'un tel certificat gratuit est donc devenu assez simple. Voici une méthode pour faire exactement cela dans un serveur Web Debian/Ubuntu.
Références :http://www.admin-magazine.com/Articles/Getting-a-free-TLS-certificate-from-Let- s-Encrypt?utm_source=ADMIN+Newsletter&utm_campaign=ADMIN_Update_Free_Certificates_with_Let%27s_Encrypt_2016-20-07&utm_medium=email

ÉTAPES :

Installer LetsEncrypt

apt-get update && apt-get install git
cd /usr/local/lib/
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto --email [email protected] --agree-tos --help
echo "export PATH=$PATH:/usr/local/lib/letsencrypt" >> /root/.bashrc
. /root/.bashrc

REMARQUE : Assurez-vous que le site Web auquel vous souhaitez ajouter HTTPS est déjà configuré et réside sur votre serveur Web.
La raison en est que pendant le processus de demande de certificat, LetsEncrypt créera un sous-répertoire supplémentaire ({htdocs}/ .well-known/acme-challenge/) et un fichier temporaire spécial dans les htdocs du site (pointé par la directive DocumentRoot dans Apache) puis appelez ce fichier sur le site à partir du serveur LetsEncrypt pour authentifier l'URL. Si l'URL appelée n'est pas valide, le certificat ne sera pas émis. Pour cette raison, votre site doit être en ligne et vous devez donner le chemin des htdocs. Après le processus d'authentification, le fichier temporaire sera effacé mais pas les sous-répertoires. Ils resteront vides.

Dépannage :

Avertissement de plate-forme non sécurisée
Si vous obtenez le message d'erreur suivant, dans Debian Wheezy, vous pouvez le résoudre en important SSl dans Python. Voir ci-dessous.
InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
InsecurePlatformWarning

Importer la prise en charge de Python SSL :
python
>>> import ssl
>>> (CTRL-D)

Mettre à niveau le programme client LetsEncrypt

rm -rf /root/.local/share/letsencrypt
rm -rf /usr/local/lib/letsencrypt.old &>/dev/null
mv /usr/local/lib/letsencrypt /usr/local/lib/letsencrypt.old
cd /usr/local/lib/
git clone https://github.com/letsencrypt/letsencrypt

Demande du certificat

Par exemple. pour le domaine blog.mondomaine.com
REMARQUE :lors de la première demande, le script vous demandera de fournir une adresse e-mail à des fins de contact ainsi que d'accepter les termes et conditions d'utilisation de cet outil. Ensuite, il ne vous posera pas ces questions.
letsencrypt-auto certonly --webroot -w /www/clients/blog.mydomain.com/htdocs -d blog.mydomain.com
Les certificats et la clé seront stockés dans /etc/letsencrypt/live/blog.mydomain.com/ as:
cert.pem : Certificate
chain.pem : CA Certificate
privkey.pem : Private key
fullchain.pem : Combination of the certificate and the CA Certificate

Au lieu de déplacer le certificat, configurez simplement Apache ou un autre serveur Web pour qu'il pointe vers les fichiers de certificats où ils se trouvent.
De cette façon, une tâche cron peut être créée pour renouveler régulièrement le certificat automatiquement sans intervention manuelle.
Le certificat sera valide pendant 90 jours seulement ; aucune exception.
Cela signifie que la même commande ci-dessus devra être exécutée tous les 3 mois ou plus tôt avec l'ajout de l'option –renew-by-default .
La limite de certificats que vous pouvez demander pour un certain domaine est :actuellement de 5 certificats / 7 jours.

Renouveler un certificat unique :

Afin de renouveler le certificat automatiquement, il est suggéré d'utiliser une tâche cron et d'ajouter l'option –renew-by-default dans la commande, par ex. comme suit :
letsencrypt-auto certonly --renew-by-default --webroot -w /www/clients/blog.mydomain.com/htdocs -d blog.mydomain.com

Renouveler tous certificats Letsencrypt installés :

/usr/local/lib/letsencrypt/letsencrypt-auto renew
Remarque : Il est recommandé d'envoyer la sortie de la commande par e-mail pour vérifier si le processus a réussi.

Informations supplémentaires

Les certificats de LetsEncrypt sont stockés dans les répertoires /etc/letsencrypt/ de différentes manières. Il n'est tout simplement PAS recommandé de supprimer les certificats, fichiers ou liens symboliques de ces répertoires, car les fichiers des répertoires "keys" et "csr" ne sont pas identifiés pour faire référence à un certificat spécifique. Ainsi, le simple fait de supprimer certains fichiers, mais pas d'autres liés au même certificat, peut confondre la commande client et vous ne pouvez alors plus demander de certificats. Le message d'erreur du programme client est quelque chose comme :
letsencrypt TypeError: coercing to Unicode: need string or buffer, NoneType found
Si jamais vous arrivez à ce point de non-retour, supprimez simplement tous les répertoires :archive , rese , touches , en direct et renouvellement MAIS pas les comptes . Réémettez ensuite les demandes de certificats pour les sites déjà existants. Les certificats seront alors renouvelés et vous pourrez alors également en demander de nouveaux.

Pour plus d'informations sur le sujet, voir :
https://letsencrypt.readthedocs.org/en/latest/using.html

Script confortable

Si vous souhaitez pouvoir émettre un certificat et que vous souhaitez qu'il se renouvelle automatiquement après 80 jours, ce script peut être utile.
#!/bin/bash
# Purpose: Issue or renew a certificate from LetsEncrypt
# It will also issue an 'at'command which will be responsible to automatically renew the certificate automatically
# This script also issues a new at comand which will do the same in around 3 Months days depending on the settings here
# Syntax: cert_request.sh -s SITE_NAME -d SITE_HTDOCS
# Changes: 30.12.2015 First implementation of the script
# 10.01.2016 Took out the read of wpinstall.cfg config file. Added checks for the letsencrypt and at programs
#--------------------------------------------------------------
. /root/.bashrc
RENEW_DAYS="80"
# Absolute path to this script.
SCRIPT=$(readlink -f $0)
CERTS_DIR="/etc/letsencrypt/live"
# Absolute path this script is in.
scriptdir=$(dirname $SCRIPT)
encryptprgm="/usr/local/lib/letsencrypt/letsencrypt-auto"
atprgm="/usr/bin/at"
EMAIL="[email protected]"
#
# Check the syntax
function usage () {
echo "Usage: cert_request.sh -s SITE_NAME -d SITE_HTDOCS"
echo "-s SITE_NAME Full web site address WITHOUT the 'http://' eg.: www.myblog.com"
echo "-d SITE_HTDOCS The absolute path where WordPress will be installed. eg. /www/sites/www.mysite.com/htdocs"
exit 1
}
#
if [ $# -ne 4 ]; then
echo "ERROR: Wrong number of given argunents."
usage
fi
# Make sure the letsencrypt client prgm is installed
if ! [ -e $encryptprgm ] ; then
echo "ERROR: the letsencrypt program isn not installed. Install it and retry."
echo "See instructions at: //tipstricks.itmatrix.eu/install-new-and-signed-ssl-certificate-for-web-servers"
exit 1
fi
# Make sure the at is installed
if ! [ -e $atprgm ] ; then
echo "ERROR: the 'AT' program isn not installed. Install it and retry."
echo "apt-get install at"
exit 1
fi
# Everything look good so far. Lets start.
# get the command options
while getopts "s:d:" OPTION
do
case $OPTION in
s) SITE_NAME=$OPTARG
;;
d) SITE_HTDOCS=$OPTARG
;;
h|?|*)
echo "ERROR: argument(s) unknown."
usage
;;
esac
done
echo "Requesting certificate at LetsEncrypt"
# Does it exist already, then renew only, otherwise request renewing the cert
if [ -d $CERTS_DIR/${SITE_NAME} ] ; then
echo "The certificate already exists. Requesting a renewal"
RENEW="--renew-by-default"
else
RENEW=""
fi
#
if ($encryptprgm certonly $RENEW --webroot -w $SITE_HTDOCS -d ${SITE_NAME} &>/dev/null); then
# Enable the Apache SSL configuration and restart Apache
(echo "Certificate request successful."
echo "Issuing a renewal of the certificate in 80 days using 'at' command"
service apache2 restart
echo "$SCRIPT -s $SITE_NAME -d $SITE_HTDOCS" | $atprgm now + $RENEW_DAYS days)| tee /tmp/cert_request.sh.log \
| mail -s "Request/Renewal of Certificate for $SITE_NAME" [email protected]
echo -e "------- SITES LIST --------\n$(ls -1 /etc/apache2/sites-enabled/ | egrep -v '^00|^wptest1')\n\n--------- CERTIFICATES LIST ---------$(ls -l /etc/letsencrypt/live/ | cut -c29-)\n\n------- AT Jobs LIST -------\n$(/root/bin/atlist.sh)" | mail -s "Request/Renewal of Certificate request LIST" $EMAIL
cat /tmp/cert_request.sh.log
exit 0
else
(echo "ERROR: The certificate request/renewal FAILED.")| tee /tmp/cert_request.sh.log \
| mail -s "Request/Renewal of Certificate for $SITE_NAME" $EMAIL
cat /tmp/cert_request.sh.log
exit 2
fi

Statut des certificats

Voici un script utile qui affichera les informations suivantes :
– Liste des tâches AT prêtes à démarrer à l'heure requise
– Liste des certificats présents et leurs horodatages de fichiers
Depuis chaque permet de chiffrer n'est valide que pendant 90 jours, cela vous donnera un aperçu de l'ancienneté des certificats actuels et de la prochaine fois que les demandes de certificats seront effectuées.
#!/bin/bash
# Description: Displays all 'at' jobs and their respective commands
# Systax: atlist.sh
# Changes: 05.11.2016 First inplementation
########################################################################
# Get the short jobs list and expand from there
echo "================ AT Jobs ready to start at the required times ==============="
atq | while read line ; do
jobnr=$(echo $line | awk '{print $1}')
echo $line
# Pickup all the command lines after first line matching '}'.
# This excludes all the environment variables and the at exit line.
# Exclude the matching '}' line and empty lines
# Add an offset of 8 chars to each command line.
# at -c $jobnr | grep -A100 -m1 -e '^\}' | grep -v '^\}' | sed -e '/^$/d' -e 's/^/ /'
at -c $jobnr | at -c $jobnr | sed -e '1,/^\}/d' -e '/^$/d' -e 's/^/ /'
done
echo ; echo
echo "=============== Age of present certificates ====================="
ls -l /etc/letsencrypt/live/*/cert.pem | awk '{print $6" "$7" "$8" "$9}' | sed -e 's|/etc/letsencrypt/live/||' -e 's|/cert.pem||'

Installation et utilisation de CERBOT

Présentation :
L'outil Cerbot ajoute simplement des fonctionnalités plus conviviales à Lestencrypt original vu ci-dessus.
Consultez ce site pour plus d'informations :
https://certbot.eff.org/docs/install.html

Utiliser :
Il peut faire une demande de certificat au serveur Letsencryp et également créer un serveur web temporaire pour permettre de vérifier la connexion HTTP d'un site pour lequel le certificat est demandé. Ces fonctionnalités peuvent être appelées simplement en ajoutant une option sur la ligne de commande.
Par exemple :si je veux qu'un site Web soit uniquement SSL, l'hôte virtuel HTTP effectuera généralement une redirection vers HTTPS automatiquement pour toute requête HTTP. Dans ce cas, il bloque la vérification du site Web à partir du serveur Letsencrypt. Je connais 2 façons d'éviter cette difficulté.
1) Créez une condition sur la directive de redirection dans Apache qui ne redirige pas vers HTTPS si l'URI est /.well-known/…..
Pour :Aucun temps d'arrêt du serveur Web
Contre :Une condition supplémentaire dans la directive de redirection doit être effectuée pour chaque site SSL.
2) Arrêtez le serveur Web. Exécutez cerbot avec l'option –standalone . Redémarrez le serveur Web.
Cette solution ne serait bonne pour un environnement de cluster de serveurs Web que si vous ne voulez pas avoir de temps d'arrêt sur votre site.
Avantage :Aucune condition de redirection supplémentaire n'est nécessaire pour les sites. Vraiment bien pour les serveurs Nginx où les conditions de redirection sont difficiles à créer
Inconvénient :le site subit un temps d'arrêt pendant cette procédure qui peut durer longtemps si vous avez de nombreux sites nécessitant la création/le renouvellement de certificats.

Installation :
wget https://dl.eff.org/certbot-auto
chmod a+x ./certbot-auto

Ou si vous avez Ubuntu 16.04 ou une version ultérieure, les commandes suivantes seront également préférables pour l'installation :
apt-get install certbot python-certbot-apache
Puis pour obtenir de l'aide sur 'certbot'
certbot --help
Un exemple de ‘certbot ' en utilisant son propre serveur web pour l'authentification, évitant ainsi les difficultés d'avoir à interférer avec Apache/NginX pour le processus d'authentification.
L'exemple suivant demandera un seul certificat qui sera valide pour ces 4 sous-domaines en utilisant la (SAN).
certbot certonly --standalone -d www.mydomain.com -d www.mydomain2.com -d mailman.mydomain.com -d mail.mydomain.com
Dans cet exemple ci-dessus, vous devez vous assurer qu'Apache/NginX n'utilise pas le port 80. Si c'est le cas, arrêtez le serveur Web avant cette commande et redémarrez-le juste après. Cela entraînera une courte interruption de l'accès au Web. Ce temps d'arrêt peut être acceptable selon que vous avez le serveur Web derrière un équilibreur de charge ou que le service Web peut autoriser un tel temps d'arrêt.
Exemple :
service apache2 stop
certbot certonly --standalone -d www.mydomain.com -d www.mydomain2.com -d mailman.mydomain.com -d mail.mydomain.com
service apache2 start


Linux
  1. SSL gratuit pour Nginx sur Centos par Let's encrypt

  2. Comment générer une clé CSR et installer un certificat SSL à partir de CWP ?

  3. Comment générer une clé et un CSR dans cPanel pour votre certificat SSL

  4. Erreur de navigateur de certificat SSL

  5. Comment résoudre le problème de protocole SSL Curl TLS à partir du code CLI et PHP

Comment installer un certificat SSL gratuit pour Apache sur CentOS 8

Comment installer un certificat SSL gratuit pour Nginx sur CentOS 8

Installer des certificats SSL sur un serveur Windows

Comment activer le certificat SSL gratuit Let's encrypt pour mon domaine dans Plesk ?

Sécurisez ISPConfig 3 et les services avec le certificat signé GoDaddy sur CentOS

Utilisation de Cockpit pour surveiller et gérer graphiquement plusieurs serveurs Linux à partir d'un navigateur Web