Math-Linux.com

Knowledge base dedicated to Linux and applied mathematics.

Accueil > Linux > Commande du jour > Comment générer des certificats auto-signés OpenSSL sous Linux CentOs/RedHat (...)

Comment générer des certificats auto-signés OpenSSL sous Linux CentOs/RedHat pour Apache/httpd

Toutes les versions de cet article : <English> <français>

Petit tuto pour montrer comment on génère des certificats auto-signés. C’est désormais encore plus simple avec les Makefile mise à disposition par Linux CentOS/RedHat. Je présente ici de manière succincte la manière de générer un certificat auto-signé. Mais avant je vais expliquer en pratique comment fonctionne ces histoires de certificats.

Comment fonctionne un certificat

SSL ou TLS son successeur sont des protocoles de sécurisation des échanges sur internet. Lorsque vous vous connectez sur votre site favori, par exemple, vous pouvez voir que ce protocole est activé lorsqu’il y a un cadenas à gauche de https://. Votre navigateur va envoyer une demande de connexion sécurisée auprès du site web. Le site web répond en envoyant à vote navigateur son certificat. Ce dernier contient une clé publique, les informations du site (nom, pays,mail, etc.) et une signature numérique. Le navigateur va alors essayer de vérifier la signature numérique du certificat du site en utilisant les clés publiques contenues dans les certificats des autorités de certifications (AC) intégrés par défaut dans le navigateur.

  • Cas 1 : une d’entre elle fonctionne, votre navigateur trouve alors le nom de l’autorité de certification qui a signé le certificat envoyé par le serveur. Il vérifie que celui-ci n’est pas expiré puis envoie une demande à cette autorité pour vérifier que le certificat du serveur n’a pas été révoqué.
    • Sous cas 1 , le certificat est expiré, un message d’avertissement s’affiche vous indiquant que l’identité du serveur n’a pas été vérifiée par une autorité de certification et qu’il peut donc s’agir potentiellement d’un site frauduleux, Réussite quand même !!!
    • Sous cas 2, le certificat est valide , Réussite !!!!
  • Cas 2 aucune ne fonctionne, votre navigateur tente de vérifier la signature numérique du certificat du serveur à l’aide de la clé publique contenue dans celui-ci.
    • Sous cas 1 Échec, le certificat est invalide, pas de connexion possible.
    • Sous cas 2 Réussite, le serveur web a lui-même signé son certificat. Un message d’avertissement s’affiche vous indiquant que l’identité du serveur n’a pas été vérifiée par une autorité de certification et qu’il peut donc s’agir potentiellement d’un site frauduleux. C’est ce cas que nous allons étudier à travers cet article.

Ensuite, votre navigateur génère une clé de session via un chiffrement symétrique en utilisant la clé publique contenue dans le certificat. Puis, il transmet cette clé de session au serveur. Le serveur déchiffre alors la clé de session envoyée par votre navigateur grâce à sa clé privée. D’où l’intérêt de bien protéger cette clé privée !!!! Les échanges sont initiés et vous pouvez naviguer.

Génération d’une clé privée

[root@osboxes ~]# cd /etc/pki/tls/certs/
[root@osboxes certs]# make math-linux.key
umask 77 ; \
/usr/bin/openssl genrsa -aes128 2048 > math-linux.key
Generating RSA private key, 2048 bit long modulus
...........................................+++
............................+++
e is 65537 (0x10001)
Enter pass phrase:
Verifying - Enter pass phrase:
[root@osboxes certs]# openssl rsa -in math-linux.key -out math-linux.key
Enter pass phrase for math-linux.key:
writing RSA key

Générer un CSR (Certificate Signing Request)

[root@osboxes certs]# make math-linux.csr
umask 77 ; \
/usr/bin/openssl req -utf8 -new -key math-linux.key -out math-linux.csr
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) []:
Locality Name (eg, city) [Default City]:Paris
Organization Name (eg, company) [Default Company Ltd]:Math-Linux.com
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:math-linux.com
Email Address []:adm@math-linux.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Retirer la passphrase

[root@osboxes certs]# openssl rsa -in math-linux.key -out math-linux.key

Générer un certificat auto-signé

[root@osboxes certs]# openssl x509 -in math-linux.csr -out math-linux.crt -req -signkey math-linux.key -days 3650
Signature ok
subject=/C=FR/L=Paris/O=Math-Linux.com/CN=math-linux.com/emailAddress=adm@math-linux.com
Getting Private key
[root@osboxes certs]#

Configurer le serveur Apache/httpd associé

Dans le répertoire /etc/httpd ou /etc/apache2 doit se trouve un fichier de configuration *ssl.conf ou un environnement dédié à la configuration de ssl

La commande suivante

[root@osboxes certs]# grep -iR SSLCertificateFile /etc/httpd/*
ou
[root@osboxes certs]# grep -iR SSLCertificateFile /etc/apache*/*

vous permettra alors de déterminer le fichier en question. Il faudra alors paramétrer le serveur apache pour qu’il puisse intégrer les certificats que vous venez de générer :

<VirtualHost 192.168.0.1:443>
   DocumentRoot /var/www/html2
   ServerName www.math-linux.com
       SSLEngine on
       SSLCertificateFile /etc/pki/tls/certs/math-linux.crt
       SSLCertificateKeyFile /etc/pki/tls/certs/math-linux.key
</VirtualHost>