Basculer le menu
Changer de menu des préférences
Basculer le menu personnel
Non connecté(e)
Votre adresse IP sera visible au public si vous faites des modifications.

Httpd certificate security

De The Linux Craftsman
Version datée du 31 mai 2026 à 11:57 par Jc.forton (discussion | contributions) (Page créée avec « Assurez-vous d'avoir correctement configuré votre serveur Apache httpd avant d'aller plus loin ! = Pour quoi faire ? = C'est la première chose que les utilisateurs vont voir lorsqu'ils se connectent à votre site, alors autant en prendre soin. On n'est pas en confiance lorsque l'on se connecte à un serveur qui fait parti de l'entreprise ''SomeOrganization'' et du département ''SomeOrganizationUnit''... On va remédier à cela ! = A... »)
(diff) ← Version précédente | Version actuelle (diff) | Version suivante → (diff)

Assurez-vous d'avoir correctement configuré votre serveur Apache httpd avant d'aller plus loin !

Pour quoi faire ?

C'est la première chose que les utilisateurs vont voir lorsqu'ils se connectent à votre site, alors autant en prendre soin. On n'est pas en confiance lorsque l'on se connecte à un serveur qui fait parti de l'entreprise SomeOrganization et du département SomeOrganizationUnit... On va remédier à cela !

Auto-signé

Génération

Pour ce faire, nous allons utiliser openssl et notamment la commande suivante:

# mkdir /opt/ssl
# cd /opt/ssl
# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout www.tala-informatique.fr.key -out www.tala-informatique.fr.crt
Generating a 2048 bit RSA private key
...............+++
..........................................+++
writing new private key to 'www.tala-informatique.fr.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:FR
State or Province Name (full name) []:Herault
Locality Name (eg, city) [Default City]:Juvignac
Organization Name (eg, company) [Default Company Ltd]:Tala
Organizational Unit Name (eg, section) []:Informatique
Common Name (eg, your name or your server's hostname) []:www.tala-informatique.fr
Email Address []:tala.informatique@gmail.fr

Utilisation de la clé et du certificat

Il faut maintenant les faire utiliser par Apache, ce qui se fait dans le fichier où vous avez déclaré vos hôtes virtuels.

...

SSLEngine on
SSLCertificateFile /opt/ssl/www.tala-informatique.fr.crt
SSLCertificateKeyFile /opt/ssl/www.tala-informatique.fr.key

...

On n’oublie pas de donner les droits à Apache:

# chown -R apache. /opt/ssl

Automatisation

Maintenant nous allons faire un script Shell, que j'ai nommé gen_ssl_tokens.sh, pour automatiser tout cela:

#!/bin/bash

###########################
# Key name
KEY=valhalla.tala-informatique.fr.key
# Cert name
CRT=valhalla.tala-informatique.fr.crt
# Validity period
VALIDITY=365
# Destination directory
DST_DIR="/opt/ssl"
###########################

echo -n "Generating key and certificate: "
openssl req -x509 -nodes -days ${VALIDITY} -newkey rsa:2048 -keyout ${KEY} -out ${CRT} << EOF
FR
Herault
Juvignac
Tala
Informatique
www.tala-informatique.fr
tala.informatique.fr

EOF

echo ""
echo "ok."

echo -n "Copying key and certificate: "
mv -f ${KEY} ${DST_DIR}/
mv -f ${CRT} ${DST_DIR}/
echo "ok."

echo -n "Giving rights to Apache: "
chown -R apache. ${DST_DIR}
echo "ok."

On n'aura plus qu'à lancer le script pour générer automatiquement la clé et le certificat pour le renouvellement... Vous pouvez également utiliser cron !

Let's Encrypt

On peut également utiliser une autorité de certification pour générer le certificat à notre place. L'avantage est que le certificat sera reconnu par les navigateurs.

acme.sh (obsolète avec mod_md)

Installation

Pour cela nous allons utiliser un script qui va faire le travail à notre place :

# wget -O - --no-check-certificate https://get.acme.sh | sh 
--2016-10-10 15:10:16--  https://get.acme.sh/
Résolution de get.acme.sh... 195.154.91.106
Connexion vers get.acme.sh|195.154.91.106|:443...connecté.
AVERTISSEMENT : impossible de vérifier l'attribut get.acme.sh du certificat, émis par «/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3» :
  Le certificat émis a expiré.
requête HTTP transmise, en attente de la réponse...200 OK
Longueur: 671 [text/plain]
Sauvegarde en : «STDOUT»

100%[======================================================>] 671         --.-K/s   ds 0s      

2016-10-10 15:10:16 (95,3 MB/s) - envoi vers sortie standard [671/671]

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  100k  100  100k    0     0   478k      0 --:--:-- --:--:-- --:--:-- 1277k
[lun. oct. 10 15:10:17 CEST 2016] Installing from online archive.
[lun. oct. 10 15:10:17 CEST 2016] Downloading https://github.com/Neilpang/acme.sh/archive/master.tar.gz
[lun. oct. 10 15:10:18 CEST 2016] Extracting master.tar.gz
[lun. oct. 10 15:10:18 CEST 2016] It is recommended to install nc first, try to install 'nc' or 'netcat'.
[lun. oct. 10 15:10:18 CEST 2016] We use nc for standalone server if you use standalone mode.
[lun. oct. 10 15:10:18 CEST 2016] If you don't use standalone mode, just ignore this warning.
[lun. oct. 10 15:10:18 CEST 2016] Installing to /root/.acme.sh
[lun. oct. 10 15:10:18 CEST 2016] Installed to /root/.acme.sh/acme.sh
[lun. oct. 10 15:10:18 CEST 2016] OK, Close and reopen your terminal to start using acme.sh
[lun. oct. 10 15:10:18 CEST 2016] Installing cron job
[lun. oct. 10 15:10:19 CEST 2016] Good, bash is found, so change the shebang to use bash as prefered.
[lun. oct. 10 15:10:19 CEST 2016] OK
[lun. oct. 10 15:10:19 CEST 2016] Install success!

Une fois le script acme.sh installé, il suffit de recharger le contexte en exécutant la commande :

# cd
# . .bash_profile

Création des certificats

Mainteant le script acme.sh est accessible dans le shell:

acme.sh --issue -d tala-informatique.fr -d www.tala-informatique.fr -w /var/www/html

Vous devriez voir la commande se finir par : Cert success.

= Utilisation de la clé et du certificat

Il faut maintenant les faire utiliser par Apache, ce qui se fait dans le fichier où vous avez déclaré vos hôtes virtuels.

...

SSLEngine on
SSLCertificateFile /opt/ssl/www.tala-informatique.fr.crt
SSLCertificateKeyFile /opt/ssl/www.tala-informatique.fr.key

...

Installation des certificats

Il ne reste plus qu'a les installer dans le répertoire /opt/ssl/ :

# acme.sh --installcert -d www.tala-informatique.fr --certpath /opt/ssl/www.tala-informatique.fr.crt --keypath /opt/ssl/www.tala-informatique.fr.key --reloadcmd "service httpd restart"

Cela va installer les certificats et redémarrer le serveur Apache !

Maintenant, lorsque l'on se connecte on peut vérifier que le certificat est approuvé :

Automatisation avec mod_md

Il est possible de faire toutes les étapes précédentes de manière transparente grâce au module Apache mod_md.

Commençons par l'installer:

# yum -y install mod_md

Une fois le module installé, nous allons ajouter la configuration suivante dans le fichier de votre hôte virtuel:

# Répertoire de stockage des certificats
MDStoreDir "/opt/ssl"
# Acceptation des accords de licence
MDCertificateAgreement accepted
# Domaine utilisé pour l’enrôlement, doit correspondre à votre DNS 
MDomain www.tala-informatique.fr
# Administrateur du serveur, obligatoire pour Let's Encrypt
ServerAdmin tala.informatique@gmail.com
<VirtualHost *:443>
    ...
    # Nom de l'hôte virtuel
    ServerName www.tala-informatique.fr
    # Démarrage du moteur SSL/TLS sans préciser de certificats (mod_md s'en charge)
    SSLEngine on
    ...

Vous devez maintenant redémarrer votre serveur et nous allons le faire sans couper les connexions actives :

# httpd -k graceful

vous devriez apercevoir dans les logs /var/log/httpd/error_log les lignes suivantes:

...
AH10085: Init: www.tala-informatique.fr:443 will respond with '503 Service Unavailable' for now. There are no SSL certificates configured and no other module contributed any.
...
AH10059: The Managed Domain www.tala-informatique.fr has been setup and changes will be activated on next (graceful) server restart.
...

Si vous ne voyez pas ces lignes, il y a une problème à l'enrôlement et vous devrez certainement activer le protocole HTTP sur le port 80.

Il ne reste plus qu'a relancer le serveur pour prendre en compte les certificats :

# httpd -k graceful

Il ne vous reste plus qu'a tester avec un navigateur !

Un peu de sécurité

Pour tester le niveau de sécurité offert par votre serveur, vous pouvez le faire tester par ssllabs. Gardez à l'esprit que plus le niveau de sécurité et élevé et plus les clients auront de mal à visiter votre site.

A la fin de vos modifications, vous devriez avoir quelque chose comme ça !

Modification des algorithmes de chiffrement

Cette modification permet la suppression des protocoles SSL-V2, SSL-V3 et TLS-V1 dont certains comportent la faille POODLE ainsi que le retrait de tous les algorithmes reposant en partie sur RC4 et CBC (cipher block chain) vulnérables à l'attaque Lucky13.

Dans votre fichier de configuration d'Apache, de préférence dans une section globale, ajoutez les lignes suivantes :

SSLProtocol All -SSLv2 -SSLv3 -TLSv1
SSLCipherSuite HIGH:!aNULL:!MD5
SSLHonorCipherOrder on

Ajout de la chaine de certification

Certain navigateur ne vont pas avoir confiance si le serveur ne fournit pas la chaine de certification complète en plus du certificat. Pour éviter ce problème, il suffit de l'inclure dans le fichier de configuration d'Apache mais, avant ça, de demander la génération de ce fichier. Ci dessous un exemple pour Let's Encrypt:

/root/.acme.sh/acme.sh --force --issue -d www.tala-informatique.fr -w /var/www/html
/root/.acme.sh/acme.sh --installcert -d www.tala-informatique.fr --certpath /opt/ssl/www.tala-informatique.fr.crt --keypath /opt/ssl/www.tala-informatique.fr.key --fullchain-file /opt/ssl/www.tala-informatique.fr.pem

On voit l'ajout de --fullchain-file /opt/ssl/www.tala-informatique.fr.pem pour avoir la chaine de certification complète !

Maintenant on peut modifier le fichier de configuration d'Apache. En dessous des lignes:

SSLEngine on
SSLCertificateFile /opt/ssl/www.tala-informatique.fr.crt
SSLCertificateKeyFile /opt/ssl/www.tala-informatique.fr.key

On ajoute :

SSLCertificateChainFile /opt/ssl/www.tala-informatique.fr.pem

Agrafage OCSP

Le protocole de contrôle du statut des certificats en ligne (Online Certificate Status Protocol) est un mécanisme permettant de déterminer si un certificat a été révoqué ou non. L'agrafage OCSP permet au serveur de maintenir une liste des réponses OCSP actuelles pour ses certificats et de les envoyer aux clients. Cela permet au client de vérifier, très rapidement, si le certificat est valide sans avoir besoin d'ouvrir une nouvelle connexion vers l'autorité OSCP.

Pour activer cette fonctionnalité ajoutez les lignes suivantes dans la section globale:

SSLUseStapling On
SSLStaplingCache "shmcb:ssl_stapling(32768)"

Attention, la mémoire de 32768 Ko doit être modifiée en fonction du nombre de certificats que vous possédez sur le serveur. Certain certificats, avec la chaine complète, peuvent peser jusqu'à 10Ko...

Vous pouvez tester le bon fonctionnement de l’agrafage avec la commande suivante :

# openssl s_client -connect www.tala-informatique.fr:443 -status -servername www.tala-informatique.fr

Dans le résultat, cherchez les lignes suivantes :

OCSP Response Data:
    OCSP Response Status: successful (0x0)
    Response Type: Basic OCSP Response
...
    Cert Status: good
...