Aller au contenu principal
Blog@sp
CAPTCHA
5 + 4 =
Trouvez la solution de ce problème mathématique simple et saisissez le résultat. Par exemple, pour 1 + 3, saisissez 4.
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.

Main navigation

  • Accueil
CAPTCHA
1 + 13 =
Trouvez la solution de ce problème mathématique simple et saisissez le résultat. Par exemple, pour 1 + 3, saisissez 4.
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.

Fil d'Ariane

  1. Accueil

Créer un ou des certificats SSL

On veut sécuriser l'accès à nos sites et nos solutions de webmail en HTTPS (port TCP 443) et sécuriser également la réception et l'envoi des e-mails depuis notre serveur, pour cela nous avons besoin de certificats SSL.

Des certificats "auto-signés" (nous verrons ce que cela veut dire) ont été automatiquement générés par le script d'installation de la solution iRedMail mais on peut aussi soit acheter un ou plusieurs certificats SSL auprès d'une autorité de certification officielle soit créer sa propre autorité de certification et générer ses propres certificats. Nous verrons qu'il existe une troisième solution.

Certificats payants

Il existe un grand nombre d'autorités de certifications officielles (GeoTrust, Thawte, etc...) chez qui on peut acheter son certificat SSL. Par exemple, la société Namecheap propose une solution "PositiveSSL Wildcard" qui, pour environ 80€ ou 90€ par an, permet d'obtenir un certificat SSL unique qui marche pour n'importe quel nom d'hôte appartenant à un même domaine.

Par exemple, pour le domaine spou.net, le même certificat marchera pour les noms d'hôte autodiscover.spou.net, patate.spou.net, pmail.spou.net, etc...

Il faut commencer par créer, sur le serveur, un fichier "/etc/ssl/STAR_spou_net.conf" avec ce type de contenu (à noter que les indications de pays, ville, etc... données dans ce fichier n'ont pas forcément besoin d'être véridiques) :

[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no
[req_distinguished_name]
C = FR
ST = Poulpe State
L = Poulpeville
O = Poulpe Corp.
OU = Poulpe Corp. special unit
CN = *.spou.net
[v3_req]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth, clientAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = spou.net
DNS.2 = *.spou.net

Toujours sur le serveur, on crée maintenant une clé privée et un fichier de demande de certificat (CSR) en exécutant la commande ci-dessous :

# sudo openssl req -nodes -newkey rsa:2048 -keyout /etc/ssl/STAR_spou_net.key -out /etc/ssl/STAR_spou_net.csr -config /etc/ssl/STAR_spou_net.conf

Il suffit ensuite de suivre les instructions sur le site internet du fournisseur de certificat.

Dans le cas de Namecheap, il faudra notamment copier le contenu du fichier "/etc/ssl/STAR_spou_net.csr" obtenu avec la commande précédente pour recevoir ensuite un e-mail contenant un fichier ZIP dans lequel se trouvera un certain nombre de fichiers dont un nommé "STAR_spou_net.crt".

On copie et on décompresse l'archive ZIP en question sur le serveur, s'il y a un deuxième fichier nommé "STAR_spou_net.ca-bundle" en plus du fichier "STAR_spou_net.crt", on renomme le fichier en question en "STAR_spou_net.ca".

Si par contre il n'y a pas de tel fichier mais à la place une multitude de fichiers se terminant par l'extension ".crt" autres que "STAR_spou_net.crt", on combine ces fichiers en un seul, en faisant ce genre de commande depuis le répertoire où se trouvent les fichiers dézippés (à adapter selon les fichiers présents pour vous) :

# cat COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt >> STAR_spou_net.ca

On va également combiner le fichier "STAR_spou_net.crt" et "STAR_spou_net.ca" en un seul fichier "STAR_spou_net.fullchain", cela nous sera notamment utile pour nos serveurs Nginx, Postfix et Dovecot :

# cat STAR_spou_net.crt STAR_spou_net.ca >> STAR_spou_net.fullchain

Enfin, il faut mettre tous ces fichiers dans le dossier "/etc/ssl" :

# sudo mv STAR_spou_net.* /etc/ssl

Certains matériels réseau, comme des firewalls, qui fournissent une interface web pour les gérer, et pour lesquels on souhaiterait utiliser notre certificat SSL pour protéger l'accès à cette interface (si bien sûr on a créé au préalable un nom d'hôte depuis l'interface du fournisseur de nom de domaine spou.net qui pointe vers l'adresse IP d'administration de ce type de matériel), ont besoin du certificat au format PKCS#12.

La conversion de notre certificat en un fichier unique au format PKCS#12 peut se faire grâce à la commande suivante (il nous sera demandé de choisir un mot de passe pour protéger ce fichier, il ne restera plus qu'à importer le fichier "/etc/ssl/STAR_spou_net.p12" produit et de donner le mot de passe choisi précédemment lors de l'importation sur le matériel réseau) : 

# sudo openssl pkcs12 -export -out /etc/ssl/STAR_spou_net.p12 -inkey /etc/ssl/STAR_spou_net.key -in /etc/ssl/STAR_spou_net.crt -certfile /etc/ssl/STAR_spou_net.ca

Certificats gratuits "auto-signés"

Dans le cas où on veut générer nous même nos propres certificats gratuitement, on parle alors de certificats SSL "auto-signés" (sachant que de tels certificats ont déjà été générés par le script d'installation de la solution iRedMail), on exécute les commandes ci-dessous qui vont créer tout d'abord un certificat "général" qui nous servira en tant qu'autorité de certification non-officielle (auto-dénommée "Poulpe CA") pour générer et signer ensuite autant de certificats SSL qu'on le souhaite (mais ici on va en générer un seul qui fonctionne pour tous les noms d'hôte du domaine spou.net et qui sera valable 10 ans, soit 3650 jours) :

# sudo openssl genrsa -out /etc/ssl/CA_spou_net.key 2048
# sudo openssl req -new -x509 -days 3650 -key /etc/ssl/CA_spou_net.key -subj "/C=FR/ST=Poulpe State/L=Poulpeville/O=Poulpe Corp./CN=Poulpe CA" -out /etc/ssl/CA_spou_net.crt
# sudo openssl req -newkey rsa:2048 -nodes -keyout /etc/ssl/STAR_spou_net.key -subj "/C=FR/ST=Poulpe State/L=Poulpeville/O=Poulpe Corp./CN=*.spou.net" -out /etc/ssl/STAR_spou_net.csr
# sudo bash -c 'openssl x509 -req -extfile <(printf "subjectAltName=DNS.1:spou.net,DNS.2:*.spou.net,IP:172.31.253.254") -days 3650 -in /etc/ssl/STAR_spou_net.csr -CA /etc/ssl/CA_spou_net.crt -CAkey /etc/ssl/CA_spou_net.key -CAcreateserial -out /etc/ssl/STAR_spou_net.crt'
# sudo ln -sf /etc/ssl/CA_spou_net.crt /etc/ssl/STAR_spou_net.ca
# sudo sh -c 'cat /etc/ssl/STAR_spou_net.crt /etc/ssl/STAR_spou_net.ca >> /etc/ssl/STAR_spou_net.fullchain'

Par contre, un certificat auto-signé provoquera des erreurs lorsque les utilisateurs visiteront nos différents sites web. Il faut obligatoirement envoyer à chacun des utilisateurs (par e-mail, clé USB ou autre) le fichier "/etc/ssl/CA_spou_net.crt" créé précédemment et qui permet d'authentifier notre autorité de certification non-officielle. Les utilisateurs devront ensuite aller dans leur navigateur internet préféré et ajouter ce certificat racine "CA_spou_net.crt".

Sur Google Chrome, par exemple, il faut aller dans les paramètres, cliquer sur "paramètres avancés", cliquer sur "Gérer les certificats", cliquer sur le bouton "importer" et suivre les instructions. Il faut notamment cocher le bouton "Placer tous les certificats dans le magasin suivant", cliquer sur le bouton "Parcourir" et choisir le  dossier "Autorités de certification racines de confiance" (il faut peut-être un compte utilisateur avec des droits d'administration sur le poste, sur Windows notamment, pour faire cela) et on redémarre le navigateur internet.

Si besoin, la conversion de notre certificat auto-signé en un fichier au format PCKS#12 se fait grâce à la commande suivante :

# sudo openssl pkcs12 -export -out /etc/ssl/STAR_spou_net.p12 -inkey /etc/ssl/STAR_spou_net.key -in /etc/ssl/STAR_spou_net.crt -certfile /etc/ssl/CA_spou_net.crt

Let's Encrypt : certificats gratuits et reconnus 

Il existe heureusement une solution qui réunie le meilleur des deux mondes précédents en permettant de générer des certificats SSL gratuits ET reconnus officiellement par les navigateurs internet. Ceci peut être obtenu grâce au service Let's Encrypt qui fournit l'outil Certbot que l'on installe grâce à cette commande :

# sudo apt install -y certbot python3-certbot-apache python3-certbot-nginx

Avant de lancer l'outil Certbot que l'on vient d'installer, il faut tout d'abord arrêter tout serveur qui écoute sur le port HTTP 80, c'est le cas de Nginx qui a été installé précédemment grâce au script d'installation de la solution iRedMail :

# sudo service nginx stop

On peut alors lancer la commande ci-dessous pour créer les différents certificats SSL pour nos sites web :

# sudo certbot certonly

Contrairement à un certificat auto-signé ou acheté auprès d'une autorité de certification officielle, on ne peut pas créer avec Certbot un certificat "wildcard" unique qui marcherait pour n'importe quel nom d'hôte appartenant à un même domaine. On est obligé de prévoir en avance tous les noms d'hôte pour lesquels on souhaite créer un certificat.

Dans l'exemple ci-dessous, on va créer un certificat pour tous les noms d'hôte que l'on a configuré précédemment auprès de notre fournisseur de nom de domaine, à savoir patate.spou.net, p.spou.net, patate2.spou.net et pmail.spou.net. Ce qui donne l'affichage ci-dessous lorsque l'on exécute la commande précédente.

Cela nous demandera au début de saisir une adresse e-mail, on indique l'adresse postmaster@p.spou.net qui a été configurée grâce au script d'installation de la solution iRedMail, et cela nous dira à la fin que l'on pourra retrouver tous les fichiers du certificat SSL généré dans le dossier  "/etc/letsencrypt/live/patate.spou.net" et que ce certificat est valable jusqu'au 10 février 2024 sachant que nous avions exécuté la commande le 10 novembre 2023 (les certificats Let's Encrypt sont valables 3 mois mais renouvelables à volonté et de manière automatique comme nous le verrons plus tard) :

Saving debug log to /var/log/letsencrypt/letsencrypt.log
How would you like to authenticate with the ACME CA?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Apache Web Server plugin (apache)
2: Nginx Web Server plugin (nginx)
3: Spin up a temporary webserver (standalone)
4: Place files in webroot directory (webroot)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-4] then [enter] (press 'c' to cancel): 3
Plugins selected: Authenticator standalone, Installer None
Enter email address (used for urgent renewal and security notices)
 (Enter 'c' to cancel): postmaster@p.spou.net
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: y
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: n
Account registered.
Please enter in your domain name(s) (comma and/or space separated)  (Enter 'c'
to cancel): patate.spou.net p.spou.net patate2.spou.net pmail.spou.net
Requesting a certificate for patate.spou.net and 3 more domains
Performing the following challenges:
http-01 challenge for p.spou.net
http-01 challenge for patate.spou.net
http-01 challenge for patate2.spou.net
http-01 challenge for pmail.spou.net
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/patate.spou.net/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/patate.spou.net/privkey.pem
   Your certificate will expire on 2024-02-10. To obtain a new or
   tweaked version of this certificate in the future, simply run
   certbot again. To non-interactively renew *all* of your
   certificates, run "certbot renew"
 - If you like Certbot, please consider supporting our work by:
   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Normalement, les certificats créés avec Certbot sont renouvelés automatiquement grâce au fichier "/etc/cron.d/certbot" qui a du être installé automatiquement, mais si ce fichier n'existe pas ou ne fonctionne pas, on exécute la commande suivante :

# sudo crontab -e

Et on ajoute la ligne suivante à la fin du fichier (suivie d'une ligne vide) :

@daily /usr/bin/certbot renew --quiet

Remplacer les certificats SSL générés par le script d'installation d'iRedMail

Si on souhaite remplacer les certificats SSL générés précédemment par le script d'installation de la solution iRedMail (et qui ne sont pas officiellement reconnus par les navigateurs internet puisque ce sont des certificats auto-signés) par un certificat gratuit généré grâce à Certbot comme nous l'avons vu précédemment, on exécute les commandes suivantes :  

# sudo ln -sf /etc/letsencrypt/live/patate.spou.net/privkey.pem /etc/ssl/private/iRedMail.key
# sudo ln -sf /etc/letsencrypt/live/patate.spou.net/fullchain.pem /etc/ssl/certs/iRedMail.crt

Dans le cas d'un certificat auto-signé et surtout d'un certificat que l'on a acheté auprès d'une autorité de certification officielle comme vu précédemment, on exécutera plutôt les commandes suivantes :

# sudo ln -sf /etc/ssl/STAR_spou_net.key /etc/ssl/private/iRedMail.key
# sudo ln -sf /etc/ssl/STAR_spou_net.fullchain /etc/ssl/certs/iRedMail.crt

Liens transversaux de livre pour Créer un ou des certificats SSL

  • Lancement du script d'installation de la solution iRedMail
  • Haut
  • Configurer les serveurs et proxy web (Apache, Varnish et Nginx)

Commentaires

À propos des formats de texte
CAPTCHA
6 + 9 =
Trouvez la solution de ce problème mathématique simple et saisissez le résultat. Par exemple, pour 1 + 3, saisissez 4.
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.

Book navigation

  • Paquets à installer avant de lancer le script d'installation de la solution iRedMail
  • Ports réseau à ouvrir sur le serveur
  • Configurer les noms de domaine
  • Lancement du script d'installation de la solution iRedMail
  • Créer un ou des certificats SSL
  • Configurer les serveurs et proxy web (Apache, Varnish et Nginx)
  • Défense supplémentaire du serveur grâce à l'outil Fail2ban
  • Rendre légitime le serveur d'e-mails avec SPF, DKIM et DMARC
  • Accès aux outils installés par la solution iRedMail et mises à jour
  • Message d'absence, filtres sur les e-mails et configuration du compte de messagerie côté utilisateur
  • Solution de stockage en ligne auto-hébergée ownCloud couplée à la solution bureautique web Collabora Online
  • Configurer un serveur et des clients VPN et mettre en place un site web privé
RSS feed