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 (...)

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>

Dans la même rubrique

  1. Linux Comment supprimer une imprimante en ligne de commande
  2. Accéder à une page de manuel : man
  3. Accélérer le processus de compilation et de build avec GNU make
  4. Affichage du calendrier en ligne de commande : cal
  5. Archivage et compression de données : tar
  6. Chronométrer une tâche : time
  7. Comment chiffrer/déchiffrer un fichier ou un répertoire sous Linux ?
  8. Comment définir un timeout lors d’une tentative de connexion SSH ?
  9. Comment éteindre ou redémarrer son pc : shutdown
  10. Comment faire un déni de service en BASH à l’aide de fork ?
  11. Comment générer des certificats auto-signés OpenSSL sous Linux CentOs/RedHat pour Apache/httpd
  12. Comment synchroniser les données mémoire sur le disque : sync
  13. Effacer l’écran et enlever certains caractères bizarres : clear reset
  14. Faire un diff sur des fichiers distants en utilisant ssh
  15. Historique des commandes : history
  16. How to shut down or reboot: shutdown command
  17. Lancer une commande un jour donné, à une heure donnée : at
  18. Linux comment se connecter à Windows via remote desktop RDP en CentOS 7 / RedHat 7
  19. Nombre de lignes, de mots d’un fichier : wc
  20. Ouverture et fermeture de session : login, logout et password
  21. phpMyAdmin : rechercher et remplacer dans une base MySQL
  22. Programmation des actions(tâches) régulières : crontab
  23. Quelle est la version de mon noyau Linux : uname
  24. Rechercher un fichier : locate, find et which
  25. SVN — Comment ignorer des fichiers ou des répertoires avec subversion ?
  26. Taille du disque et de répertoire : df du
  27. Télécharger de la musique et des vidéos .mp3, .wma, .avi, .mpg , divx avec google
  28. Trouver les processus consommant le plus de cpu/mémoire à l’aide de la commande ps
  29. Trouver/déterminer la version de numpy de numpy que j’utilise
  30. Trouver/déterminer les options avec lesquelles python a été compilé