Table des matières
- Installer Cyrus IMAP + SSL + LDAP
- Installer Cyrus IMAP
- Le fichier cyrus.conf
- Le fichier imapd.conf
- Le fichier imapd-local.conf
- Création d'une Autorité de certification et de certificats
- Boîte à lettres partagée
- Cyrus IMAP : authentification auprès d'un annuaire LDAP
SSL/TLS : créer une autorité de certification et des certificats
Date de publication: le dimanche 13 mars 2011 à 20h01
Dernière modification: par Pascal BOYER le jeudi 5 mai 2011 à 07h21
Nous ne nous approchons de la vérité que dans la mesure où nous nous éloignons de la vie
Avant propos
Vous trouverez dans cet article toutes les informations nécessaires à la création d'une Autorité de Certification (AC/CA), des certificats d’AC, de serveurs et les jeux de clefs publique/privée.
Voici un des sites qui m’ont aidé dans la rédaction de cet article: www.int-evry.fr
J’ai depuis acheté le livre PKI Open source, ed O’REILLY que je n’ai toujours pas eu le temps de parcourir. Lorsque cela sera fait, je remanierai cet article et en écrirai un pour décrire le fonctionnement du protocole «SSL/TLS».
Dans un premier temps, il m’importait de présenter, de façon détaillée, la marche à suivre et les commandes à connaître pour l’utilisation de OpenSSL. Voilà. C’est fait.
Les commandes
Pré-requis:
Avant de vouloir taper une quelconque commande, il est nécessaire d’installer Openssl.
Voici la version utilisée sur mon système:
dpkg -l '*openssl*'
Souhait=inconnU/Installé/suppRimé/Purgé/H=à garder | État=Non/Installé/fichier-Config/dépaqUeté/échec-conFig/H=semi-installé |/ Err?=(aucune)/H=à garder/besoin Réinstallation/X=les deux (État,Err: majuscule=mauvais) ||/ Nom Version Description +++-===========-================================================ ii openssl 0.9.8o-4squeeze1 Secure Socket Layer (SSL) binary and related cryptographic tools
Puis on va dans le répertoire /usr/lib/ssl/ et on regarde ce qui est installé par défaut:
cd /usr/lib/ssl
ls -laR
.: total 136 drwxr-xr-x 4 root root 4096 2 mai 15:19 . drwxr-xr-x 169 root root 122880 3 mai 17:58 .. lrwxrwxrwx 1 root root 14 2 mai 13:53 certs -> /etc/ssl/certs drwxr-xr-x 2 root root 4096 2 mai 14:11 engines drwxr-xr-x 2 root root 4096 2 mai 15:19 misc lrwxrwxrwx 1 root root 20 2 mai 15:19 openssl.cnf -> /etc/ssl/openssl.cnf lrwxrwxrwx 1 root root 16 2 mai 13:53 private -> /etc/ssl/private ./engines: total 196 drwxr-xr-x 2 root root 4096 2 mai 14:11 . drwxr-xr-x 4 root root 4096 2 mai 15:19 .. -rw-r--r-- 1 root root 20160 10 févr. 20:20 lib4758cca.so -rw-r--r-- 1 root root 20432 10 févr. 20:20 libaep.so -rw-r--r-- 1 root root 16144 10 févr. 20:20 libatalla.so -rw-r--r-- 1 root root 4408 10 févr. 20:20 libcapi.so -rw-r--r-- 1 root root 25000 10 févr. 20:20 libchil.so -rw-r--r-- 1 root root 21232 10 févr. 20:20 libcswift.so -rw-r--r-- 1 root root 4408 10 févr. 20:20 libgmp.so -rw-r--r-- 1 root root 12464 10 févr. 20:20 libnuron.so -rw-r--r-- 1 root root 24720 10 févr. 20:20 libsureware.so -rw-r--r-- 1 root root 20432 10 févr. 20:20 libubsec.so ./misc: total 40 drwxr-xr-x 2 root root 4096 2 mai 15:19 . drwxr-xr-x 4 root root 4096 2 mai 15:19 .. -rwxr-xr-x 1 root root 5875 10 févr. 20:20 CA.pl -rwxr-xr-x 1 root root 5175 10 févr. 20:20 CA.sh -rwxr-xr-x 1 root root 119 10 févr. 20:20 c_hash -rwxr-xr-x 1 root root 152 10 févr. 20:20 c_info -rwxr-xr-x 1 root root 112 10 févr. 20:20 c_issuer -rwxr-xr-x 1 root root 110 10 févr. 20:20 c_name
1°/ Création d’une Autorité de Certification: AC/CA
1.1°/ De quoi ai-je besoin ?
Pour créer une AC, on peut soit utiliser le script perl suivant: /usr/lib/ssl/misc/CA.pl soit utiliser les commandes fournies par Openssl.
:
Dans cet article, je vais utiliser des commandes openssl qui seront toutes lancées à partir de /usr/lib/ssl/
Ce choix de passer par les commandes (et non par des scripts) permet de mieux/bien comprendre ce que l’on fait à chaque étape.
Une fois que l’on est familiarisé avec les commandes en ligne, il peut être intéressant d’utiliser les scripts perl après y avoir apporté les modifications nécessaires pour qu’ils soient personnalisés.
Et bien c’est parti...
Donc, dans le répertoire /usr/lib/ssl/ je crée les répertoires suivants:
mkdir mon_AC
mkdir mon_AC/certs
mkdir mon_AC/newcerts
mkdir mon_AC/private
- mon_AC est un nom totalement arbitraire.
- mon_AC/certs accueillera les certificats et clefs publiques que l’on va créer.
- mon_AC/newcerts accueillera les CSR (Certificate Signing Request/Demande de Signature de Certificat).
- mon_AC/private accueillera les clefs privées du serveur et de l’AC ainsi que le certificat de l’AC.
Puis il faut créer deux fichiers:
touch mon_AC/serial
touch mon_AC/index.txt
echo 01 > mon_AC/serial
- La commande echo 01 > mon_AC/serial initialise avec la valeur hexadécimale 01 le fichier serial.
- La commande touch mon_AC/index.txt crée le fichier index.txt qui maintiendra à jour la liste des certificats créés et/ou révoqués. Ce fichier contient le prochain numéro de série à utiliser pour la signature d’une CSR ( man ca ).
Enfin, j’apporte les modifications nécessaires au fichier de configuration de Openssl pour que mon répertoire mon_AC soit pris en compte:
vi openssl.cnf
et je modifie:
"dir = ./demoCA # Where everything is kept" en "dir = ./mon_AC # Where everything is kept" "certificate = $dir/cacert.pem # The CA certificate" en "certificate = $dir/private/mon_AC.crt # The CA certificate" "private_key = $dir/private/cakey.pem # The private key" en "private_key = $dir/private/mon_AC.key # The private key"
1.2°/ Création de la clef privée de l’AC ( man genrsa )
openssl genrsa -des3 -out mon_AC/private/mon_AC.key 2048
Generating RSA private key, 2048 bit long modulus
.........................+++
....................+++
e is 65537 (0x10001)
Enter pass phrase for mon_AC/private/mon_AC.key: <=== SERA DEMANDÉE LORS DE LA SIGNATURE DU CSR serveur ! (linuxvaincra)
Verifying - Enter pass phrase for mon_AC/private/mon_AC.key: <=== linuxvaincra
Explication de la commande et de ses options:
- openssl genrsa génère une clé privée RSA.
- -des3 encode la clé privée avec l’algorithme de chiffrement triple DES.
- -out est suivi du nom du fichier qui contiendra la clef privée et de l’emplacement où doit être déposé ce fichier.
- 2048 est la taille, en bits, de la clef. Par défaut c’est 512. Cette option doit être placée en dernier.
Voyons ce qui a été produit:
ls -laR mon_AC/
mon_AC/: total 24 drwxr-xr-x 5 root root 4096 4 mai 13:39 . drwxr-xr-x 5 root root 4096 4 mai 13:46 .. drwxr-xr-x 2 root root 4096 4 mai 13:34 certs -rw-r--r-- 1 root root 0 4 mai 13:39 index.txt drwxr-xr-x 2 root root 4096 4 mai 13:34 newcerts drwxr-xr-x 2 root root 4096 4 mai 13:48 private -rw-r--r-- 1 root root 3 4 mai 13:39 serial mon_AC/certs: total 8 drwxr-xr-x 2 root root 4096 4 mai 13:34 . drwxr-xr-x 5 root root 4096 4 mai 13:39 .. mon_AC/newcerts: total 8 drwxr-xr-x 2 root root 4096 4 mai 13:34 . drwxr-xr-x 5 root root 4096 4 mai 13:39 .. mon_AC/private: total 12 drwxr-xr-x 2 root root 4096 4 mai 13:48 . drwxr-xr-x 5 root root 4096 4 mai 13:39 .. -rw-r--r-- 1 root root 1743 4 mai 13:51 mon_AC.key <=== NEW !!!
On a donc bien créé une clef privée pour notre AC.
Cette clef privée, comme toutes les suivantes, est placée dans ./mon_AC/private/
Observons maintenant à quoi ressemble une clef privée:
cat mon_AC/private/mon_AC.key
-----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: DES-EDE3-CBC,5CAF80CC09D98FE4 zSrL+a5ltVsuz5nupk5O6P31u7VV8DN17Qhp5iyuO/10r+O+IagbchVdhQJvwXxM hGnHHUEC0Jusyh1nDzn3CgQQ1Sku2HB8O3Dy67sJMMNyu8whEupJ3p9lZA47Dffi kWWylBpHqUL/gzr7oT7PMthVSxOCg9vzcO07ARSx+G2bdKDCmONxVM+rnX5Sxtup T+0Fuqs27Ic+SO5t+oSgEW9oA7whkjv/2OgL1ENtU+q/Icz0DGYuDxr387eWakHI FhbMB4nWQFh4bYA7xwTvcjmfO3NCkHe/jny/VNiqC3qLXH48cGJpCb5itKc7DvOh 9+2vj1juT6kdmCbxKEBy97ZPg1/m7Se2kpmOhllQ/UoDH8DFaeDIdbWhn34BCrjd lKatZzW9nRXFOW28iskaVRF+OrTiynSlcsoDy3kEWhLNJHHbxSLziIMcLS+ca2FQ 8+dIdrl6ON/S4oThMvVX9uWFpH9MQxne0NDCd5sCc/aiXn0iI2ZhCyEkYlQD9leO bpGuzDlHPDlcOnrOjWgzd63MsYFCGIJxIVmDgMRAlQp37EGyIDuM30HE72a7sWgp oL4tY1dlxEAP0xzqQ7FHJoRmyaRo+W2jOGlX8Lgtinmb6X45hlBNv/BVBg8mqtZD m7FqdGMxp+LaKqkppnz1cRf9/e+RIi1uiOH+8c0c8VDxZYQiYoSlMc6faHh9pXoW 28gncxsdZoJ2CoVWy7mNme1B1qzTcbXxiN4B0BwiLq8g1eP6VSIQvJ21RAniIqYj vqq27+HkeKGJSHNIdEbDDNq0bggSooDCd0rtdtcDVdTPndopxKx5Ns8daIUQBmWX d3ABEcGl/YwXa7A/HgdpyrEfDABWberXC+pTMVfhrIh7Eq0Griapc+tW8Ozi6cuX msxkFcIfua67mSXi5ofGeTMp0QvtAEZP2K45uJIwwGdGB65VBTHNxIXjDpv9Mqgb RS4Nv6xvDg/5PmEx1AphTycfML70CfxbQ7CMIPnnzT5hmrY5UtFvtvjz01z2Mp3M 1xRYnHW6OO2Nz8kg/Z+JbfzvTzzZUfmGxCpUHMgN/PxIhrJQgBffTBbiE6p8NCRK MNq2W6Drly6+ss0XJdyI5xrN8H6cITkhmUdYCFKhq+rau7Ay3BuR9gl47G7U3xj9 g2PA4QN7A6aIHD+67IflUSMP0cne7qBoukvINRNLFvQKH+86DRf0/VAlzqw3Dlg/ /0AQyk7xZ8EjyRAZYayZWcrL7z2xWSgaf1aI76lnikgt/CP0EgC3QHM/QslalVve O8f+Uqn5aqBCl9hxEb7a8XldX5K6XzSj540YZCCEXKS9bX6zSHZVWw0+re51k7GE ALfxlrzAuMkX1q5AuTMKJooKHGfDkKmtMX/JBpVaPrRbd3sRfZDz3k7lEAmqag2C p067BKHlVMzVF8KUScqu6KvceyCFNLb4ysbpnJuXutonwDCllwin0cUDDDmHM43K +EOoXBcvqpVgfj8zsK+01YaFBK8FTvRwCkDt7Ia8nefIORGwvu2w6sBrrxjANr4r QgrEnzxaZU9ueUXNezRspdzvlZ7btJZ0XttjHalikhcHsSdkYqjVBg== -----END RSA PRIVATE KEY-----
1.3°/ Création du certificat de l’AC ( man openssl )
:
Je pense qu’il est préférable de ne pas utiliser de caractères accentués dans les réponses faites aux questions posées lors de la création des certificats.
openssl req -new -x509 -days 3650 -key mon_AC/private/mon_AC.key -out mon_AC/private/mon_AC.crt
Enter pass phrase for mon_AC/private/mon_AC.key: <=== linuxvaincra (DOIT ÊTRE LE MEME QU'AU 1.2°/ !!! ) 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) [AU]: <=== Fr (DEVRA ÊTRE LE MEME LORS DE LA CREATION DU CSR !!!) State or Province Name (full name) [Some-State]: <=== Ardeche (DEVRA ÊTRE LE MEME LORS DE LA CREATION DU CSR !!!) Locality Name (eg, city) []: <=== Le Teil (DEVRA ÊTRE LE MEME LORS DE LA CREATION DU CSR !!!) Organization Name (eg, company) [Internet Widgits Pty Ltd]: <=== Linuxorable (DEVRA ÊTRE LE MEME LORS DE LA CREATION DU CSR !!!) Organizational Unit Name (eg, section) []: <=== Mort a M$ (DEVRA ÊTRE LE MEME LORS DE LA CREATION DU CSR !!!) Common Name (eg, YOUR name) []: <=== linuxorable.fr (DEVRA ÊTRE LE MEME LORS DE LA CREATION DU CSR !!!) Email Address []: <=== pascal@linuxorable.fr (DEVRA ÊTRE LE MEME LORS DE LA CREATION DU CSR !!!)
:
Ci-dessus, l'avant dernière ligne Common Name (eg, YOUR name) []: doit être le FQDN de la machine !!!
Explications:
-
openssl req crée et traite des demandes de certificats au format PKCS#10.
De plus, elle peut créer des certificats autosignés servant à une AC racine. - -new génère une nouvelle demande de certificat.
- -x509 génère un certificat auto-signé à la place d’une demande de certificat.
-
-days n si l’option -x509 est utilisée, spécifie le nombre de jours durant lesquels le certificat sera certifié/valide. Ici le certificat sera valable 10 ans.
Est utilisée typiquement pour générer des certificats de test ou auto-signé pour une AC racine. - -key spécifie le fichier contenant la clef privée à lire pour auto-signer le certificat de l’AC.
- -out est suivi du nom du fichier qui contiendra le certificat et de l’emplacement où doit être déposé ce fichier. Il sera demandé à l’utilisateur de fournir les valeurs de champs nécessaires.
Voyons ce qui a été produit:
ls -laR mon_AC/
mon_AC/: total 24 drwxr-xr-x 5 root root 4096 4 mai 13:39 . drwxr-xr-x 5 root root 4096 4 mai 14:15 .. drwxr-xr-x 2 root root 4096 4 mai 13:34 certs -rw-r--r-- 1 root root 0 4 mai 13:39 index.txt drwxr-xr-x 2 root root 4096 4 mai 13:34 newcerts drwxr-xr-x 2 root root 4096 4 mai 14:19 private -rw-r--r-- 1 root root 3 4 mai 13:39 serial mon_AC/certs: total 8 drwxr-xr-x 2 root root 4096 4 mai 13:34 . drwxr-xr-x 5 root root 4096 4 mai 13:39 .. mon_AC/newcerts: total 8 drwxr-xr-x 2 root root 4096 4 mai 13:34 . drwxr-xr-x 5 root root 4096 4 mai 13:39 .. mon_AC/private: total 16 drwxr-xr-x 2 root root 4096 4 mai 14:19 . drwxr-xr-x 5 root root 4096 4 mai 13:39 .. -rw-r--r-- 1 root root 1704 4 mai 14:19 mon_AC.crt <=== NEW !!! -rw-r--r-- 1 root root 1743 4 mai 14:16 mon_AC.key
:
Les deux commandes ci-dessus (celle du 1.2°/ et celle du 1.3°/) peuvent être remplacées par une seule:
openssl req -new -x509 -keyout mon_AC/private/mon_AC.key -out mon_AC/private/mon_AC.crt -days 3650
Explications:
-
openssl req crée et traite des demandes de certificats au format PKCS#10.
De plus, elle peut créer des certificats autosignés servant à une AC racine. - -new génère une nouvelle demande de certificat.
- -x509 génère un certificat auto-signé à la place d’une demande de certificat.
-
-days n si l’option -x509 est utilisée, spécifie le nombre de jours durant lesquels le certificat sera certifié/valide. Ici le certificat sera valable 10 ans.
Est utilisé typiquement pour générer des certificats de test ou auto-signé pour une AC racine. - -keyout est suivit du nom du fichier où la clé privée créée sera écrite.
-
-out est suivit du nom du fichier qui contiendra le certificat et de l’emplacement où doit être déposé ce fichier.
Il sera demandé à l’utilisateur de fournir les valeurs de champs nécessaires.
Observons maintenant à quoi ressemble le certificat de l’AC:
cat mon_AC/private/mon_AC.crt
-----BEGIN CERTIFICATE----- MIIEvTCCA6WgAwIBAgIJAM/oZRiypuJ+MA0GCSqGSIb3DQEBBQUAMIGaMQswCQYD VQQGEwJmcjEQMA4GA1UECBMHQXJkZWNoZTEQMA4GA1UEBxMHTGUgVGVpbDEUMBIG A1UEChMLTGludXhvcmFibGUxEjAQBgNVBAsUCU1vcnQgYSBNJDEXMBUGA1UEAxMO bGludXhvcmFibGUuZnIxJDAiBgkqhkiG9w0BCQEWFXBhc2NhbEBsaW51eG9yYWJs ZS5mcjAeFw0xMTA1MDQxMjE5MjNaFw0yMTA1MDExMjE5MjNaMIGaMQswCQYDVQQG EwJmcjEQMA4GA1UECBMHQXJkZWNoZTEQMA4GA1UEBxMHTGUgVGVpbDEUMBIGA1UE ChMLTGludXhvcmFibGUxEjAQBgNVBAsUCU1vcnQgYSBNJDEXMBUGA1UEAxMObGlu dXhvcmFibGUuZnIxJDAiBgkqhkiG9w0BCQEWFXBhc2NhbEBsaW51eG9yYWJsZS5m cjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALXs9h7SCHf+unwpsliT RktHL8UZv79iuXmQ2snYVK7lsBig4zwpWCWXjPzdrdYLTF3BmEqeHh9vb8lxdp4r KkBqYNslyMZTCxfLdh8JbBCqj389F0OJ7V7nCUL/R5x367eSbj7nsdMy8uleYjwJ 1H7gQrPLTVq2JrPtKAsyt1W/IrsAMy50cOCalQemit2svn98Se5R2czBsbwsLcIk Nb5xcTSjhifBhh5Zfc/n5/RHvSt10Fv+t8NDgl9hLsHR54V6k1UaVc684u66/Yqq gzEciuNtGTh3H7byiYI7w+mdPGMWM0CM0vKqO6G+SwuV/vloW4XjdS3qccb2EtKK Sn0CAwEAAaOCAQIwgf8wHQYDVR0OBBYEFMmdpPMueKmnncrp7KOOY+30uPBZMIHP BgNVHSMEgccwgcSAFMmdpPMueKmnncrp7KOOY+30uPBZoYGgpIGdMIGaMQswCQYD VQQGEwJmcjEQMA4GA1UECBMHQXJkZWNoZTEQMA4GA1UEBxMHTGUgVGVpbDEUMBIG A1UEChMLTGludXhvcmFibGUxEjAQBgNVBAsUCU1vcnQgYSBNJDEXMBUGA1UEAxMO bGludXhvcmFibGUuZnIxJDAiBgkqhkiG9w0BCQEWFXBhc2NhbEBsaW51eG9yYWJs ZS5mcoIJAM/oZRiypuJ+MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB AGX3qwiTDbcEH9y1rWeb0xX3nlIS2H1KmuGiM/oMZhZ/t4PrKAcm43/CMhPt88Ly srU5CTKi+88R8/HWFEDQpEo6Qu+NYhUxk3wqzyNwKKa6e3LU4qCw6HpnuTqddQtQ khbxqMN+IdesoPPEXd0x+rpDLtD7XO0l8GKVHQlhxtxVHFEuvrwwEeMLvYQpBCVd Fe0cqMALK0n+hKh1/o0Uq4wd9dRizZNcKd0GLDY4NaQ7qZGjO+rQ4U73XCU1DHQ6 uc3iQ+ky+ShDuFlNXjhCi3QtnRiL46j2lKjn4rfID3vHATu0lR3+62BaCBHL+ioA NvNIKdal0xAMPMxjVJbC1vE= -----END CERTIFICATE-----
On peut aussi vérifier l’usage qui peut être fait du certificat de l’AC:
openssl x509 -purpose -in mon_AC/private/mon_AC.crt -noout [-text pour plus de détails]
Certificate purposes: SSL client : Yes SSL client CA : Yes SSL server : Yes SSL server CA : Yes Netscape SSL server : Yes Netscape SSL server CA : Yes S/MIME signing : Yes S/MIME signing CA : Yes S/MIME encryption : Yes S/MIME encryption CA : Yes CRL signing : Yes CRL signing CA : Yes Any Purpose : Yes Any Purpose CA : Yes OCSP helper : Yes OCSP helper CA : Yes
Bien. Nous voilà à présent nantis d’une AC.
2°/ Génération de la bi-clef privée/publique du serveur
2.1°/ Génération de la clef privée de serveur ( man genrsa )
:
Que ce soit pour le serveur smtpd Postfix, pour le serveur local lmtpd "local" ou pour le serveur imapd Cyrus-IMAP, il faut toujours renseigner ces trois questions:
- indiquez quel fichier contient la clef PRIVÉE RSA NON CHIFFRÉE au format .pem du serveur SMTP/LMTP/IMAP.
- indiquez quel fichier contient la clef PUBLIQUE RSA NON CHIFFRÉE au format .pem du serveur SMTP/LMTP/IMAP
- indiquez quel fichier contient le certificat de l’AC.
Si tous les services ( imapd, smtpd, lmtpd) tournent sur la même machine, alors un seul jeu de clefs publique/privée de serveur (serveur au sens machine et non pas service !) est suffisant.
:
Pour Postfix il faut créer des certificats (clef publique signée) au format .pem et non chiffrés. (p168-169)
Par défaut, Openssl produit un tel format mais chiffré.
On ne placera donc pas d’option de chiffrage dans la commande ci-dessous.
openssl genrsa -out mon_AC/private/server_tls.pem 2048
Generating RSA private key, 2048 bit long modulus .....+++ ......................+++ e is 65537 (0x10001)
Explications:
- openssl genrsa génère une clé privée RSA.
- -out est suivi du nom du fichier qui contiendra la clef privée et de l’emplacement où doit être déposé ce fichier.
- 2048 est la taille, en bit, de la clef. Par défaut c’est 512. Cette option doit être placée en dernier.
:
Comme aucune de ces options (-des|-des3|-idea) n’est assignée alors la cléf n’est pas chiffrée.
man genrsa
Observons ce qui a été créé:
ls -laR mon_AC/
mon_AC/: total 24 drwxr-xr-x 5 root root 4096 4 mai 13:39 . drwxr-xr-x 5 root root 4096 4 mai 14:15 .. drwxr-xr-x 2 root root 4096 4 mai 13:34 certs -rw-r--r-- 1 root root 0 4 mai 13:39 index.txt drwxr-xr-x 2 root root 4096 4 mai 13:34 newcerts drwxr-xr-x 2 root root 4096 4 mai 14:36 private -rw-r--r-- 1 root root 3 4 mai 13:39 serial mon_AC/certs: total 8 drwxr-xr-x 2 root root 4096 4 mai 13:34 . drwxr-xr-x 5 root root 4096 4 mai 13:39 .. mon_AC/newcerts: total 8 drwxr-xr-x 2 root root 4096 4 mai 13:34 . drwxr-xr-x 5 root root 4096 4 mai 13:39 .. mon_AC/private: total 20 drwxr-xr-x 2 root root 4096 4 mai 14:36 . drwxr-xr-x 5 root root 4096 4 mai 13:39 .. -rw-r--r-- 1 root root 1704 4 mai 14:19 mon_AC.crt -rw-r--r-- 1 root root 1743 4 mai 14:16 mon_AC.key -rw-r--r-- 1 root root 1679 4 mai 14:36 server_tls.pem <== NEW !!!
Regardons à quoi ressemble cette clef privée de serveur:
cat mon_AC/private/server_tls.pem
-----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEAsViSSK8xllXEFsRMmDCsuQyKIutVv/2s6xK6uE6xVhRsljHK iZys7ZjKfnmhj81IUPhALmOST4CEL4ecSK1/dSY1iLCquXRjhmIKgH+oJ4D5ERyg Mcp1sMfOSEYes1RxOQp50wlkU7r2Ae0KRNvFvolyQXuI958ANg2/hytUtB8oZD0k b/DCr5LgF/mGzmMj5RrHtNZKF+sLYRP4JrY1mnqG1eus42iibhu2nviVea3mTgHv 0TUUFKkGaaZRKQnsDsITTTW+mBTvykHVUKRci7+B6qLxWozsfNdqNl4rcA/MgDAr mxHZHdKSKW4t8xwuWUQ8jRbUsR8Fz98r8vlKRwIDAQABAoIBACRDgT4dnN0p0nv5 TdQ898SrHMABMTqeC7LR1J6FcNuyN3YK3mh/QhkfiiCMjI3UIzpzWORjdfKNy/nQ GBQAbjStSHsX7QEZHJTJDW6zK9ZQGB34pYUo6iHo6XR76iEvXiuUyc5ueDZq340L RHNKIUhR4KwlL5+6wpdK/mQMZzihYzb6lEJ+TYX/5gORxZVJm37Y7ZbciX418otA nTDWTZWq39x/sgXy0njPr+qyt0DEd4z600CO+byUdkqrrXYzHUSyfINYn/IJmb0E ahHKGakCgYEA3IZcM3plbTvYS5fY9VspL1FfcLEoOcVqm7tB9M3WnLufHCg4kvyu skwnVgxHs3Pm5xck9HLQc0UTRPr9ljPSoXikcJSOc5o+M1FEfOw/z34umIVA/mnM Z9sQZD3wVRHmabs+2OnBI9OQun18gtG4n9VKUHfuk/OMPF2m5T1hF5sCgYEAzeAF Qwh+5SRdS3t1SY+3SKCR2yPih6f3U7rU6yIYg0XVutqWmysw81w4Xe7ANe5gPmN4 wlybpNAINgTjbyYxHZ6+i7/IdvE8mSRQjfW4YMUCgYEA12gnB+G20UxzquNYedHi GOZTY7CoqkW8LQJtGsM1r0NV2Bsxp+JKgr8AbXzxTMkZ8wEYh+7ezrnaaLcCnYVh aXh+p7l0rFcuCtKHI79hVTzcJv+CzQBrOccx67jU2UPy3bSZXyh2EJjH9mI9DUvu G7IsNQ3xbXOouA6Cx8l83aECgYBoyuI4NU4pnRReBD5/vzXau06U1LTnCgswQcL3 oGFX2KE9Nmy42RhWl5d9gLzH9ul4eEuMq3TyRI4ZaQ2XkxonGJmnKtzQZmTREuIK EIxkfQKBgDsCBXZrRGi7gQEPkC6Ife83COcLYemx6x+CuG4V/C+4//qbWPlp3Ei0 LExyK2A222LiOHEUeZ1NeJDxmI3kYD21/q3I6n5BD0Yp1Q3JerukesAEzY7LfzPI rFNY0crc/j0Dpx8GW+NA8BqNco6fUJ3hL2o6OlGxSU8aiaDLlW2+ -----END RSA PRIVATE KEY-----
2.2°/ Création de la CSR
Une CSR (Certificate Signing Request / Demande de Signature de Certificat) doit être créée puis signée par l’AC avec sa clef privée.
openssl req -new -nodes -key mon_AC/private/server_tls.pem -out mon_AC/newcerts/server_CSR.pem
Generating a 1024 bit RSA private key .......++++++ .................++++++ writing new private key to 'server_tls.pem' ----- 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) [AU]: <=== Fr (DOIT ETRE IDENTIQUE A 1.3°/ !!! ) State or Province Name (full name) [Some-State]: <=== Ardeche (DOIT ETRE IDENTIQUE A 1.3°/ !!! ) Locality Name (eg, city) []: <=== Le Teil (DOIT ETRE IDENTIQUE A 1.3°/ !!! ) Organization Name (eg, company) [Internet Widgits Pty Ltd]: <=== Linuxorable (DOIT ETRE IDENTIQUE A 1.3°/ !!! ) Organizational Unit Name (eg, section) []: <=== Mort a M$ (DOIT ETRE IDENTIQUE A 1.3°/ !!! ) Common Name (eg, YOUR name) []: <=== linuxorable.fr (DOIT ETRE IDENTIQUE A 1.3°/ !!! ) Email Address []: <=== pascal@linuxorable.fr Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: <=== SAISIR UN MOT DE PASSE An optional company name []: <== NÉANT
Explications: man req
-
openssl req crée et traite des demandes de certificats au format PKCS#10.
De plus, elle peut créer des certificats autosignés servant à une AC racine. - -new génère la demande de certificat.
- -key est suivi du nom du fichier qui contient la clef privée du serveur.
- -out est suivi du nom du fichier qui contiendra la CSR et de l’emplacement où il doit être déposé.
On regarde ce qui a été créé:
ls -laR mon_AC/
mon_AC/: total 24 drwxr-xr-x 5 root root 4096 4 mai 13:39 . drwxr-xr-x 5 root root 4096 4 mai 14:15 .. drwxr-xr-x 2 root root 4096 4 mai 13:34 certs -rw-r--r-- 1 root root 0 4 mai 13:39 index.txt drwxr-xr-x 2 root root 4096 4 mai 14:43 newcerts drwxr-xr-x 2 root root 4096 4 mai 14:36 private -rw-r--r-- 1 root root 3 4 mai 13:39 serial mon_AC/certs: total 8 drwxr-xr-x 2 root root 4096 4 mai 13:34 . drwxr-xr-x 5 root root 4096 4 mai 13:39 .. mon_AC/newcerts: total 12 drwxr-xr-x 2 root root 4096 4 mai 14:43 . drwxr-xr-x 5 root root 4096 4 mai 13:39 .. -rw-r--r-- 1 root root 1110 4 mai 14:43 server_CSR.pem <=== NEW !!! mon_AC/private: total 20 drwxr-xr-x 2 root root 4096 4 mai 14:36 . drwxr-xr-x 5 root root 4096 4 mai 13:39 .. -rw-r--r-- 1 root root 1704 4 mai 14:19 mon_AC.crt -rw-r--r-- 1 root root 1743 4 mai 14:16 mon_AC.key -rw-r--r-- 1 root root 1679 4 mai 14:36 server_tls.pem
On regarde à quoi ressemble une CSR:
cat mon_AC/newcerts/server_CSR.pem
-----BEGIN CERTIFICATE REQUEST----- MIIDDDCCAfQCAQAwgZkxCzAJBgNVBAYTAkZyMRAwDgYDVQQIEwdBcmRlY2hlMRAw DgYDVQQHEwdMZSBUZWlsMRQwEgYDVQQKEwtMaW51eG9yYWJsZTESMBAGA1UECxQJ TW9ydCBhIE0kMRUwEwYDVQQDEwxwYXNjYWwgYm95ZXIxJTAjBgkqhkiG9w0BCQEW FnBhc2NhbEBsaW51eG9yYWJsZS5uZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw ggEKAoIBAQCxWJJIrzGWVcQWxEyYMKy5DIoi61W//azrErq4TrFWFGyWMcqJnKzt mMp+eaGPzUhQ+EAuY5JPgIQvh5xIrX91JjWIsKq5dGOGYgqAf6gngPkRHKAxynWw x85IRh6zVHE5CnnTCWRTuvYB7QpE28W+iXJBe4j3nwA2Db+HK1S0HyhkPSRv8MKv kuAX+YbOYyPlGse01koX6wthE/gmtjWaeobV66zjaKJuG7ae+JV5reZOAe/RNRQU qQZpplEpCewOwhNNNb6YFO/KQdVQpFyLv4HqovFajOx812o2XitwD8yAMCubEdkd 0pIpbi3zHC5ZRDyNFtSxHwXP3yvy+UpHAgMBAAGgLTAUBgkqhkiG9w0BCQIxBxMF TmVhbnQwFQYJKoZIhvcNAQkHMQgTBnNlY3JldDANBgkqhkiG9w0BAQQFAAOCAQEA ZVqNzl1ZjND25q0/INxE0i6lXf9S8ETYkc4Tqf6J9CVHEJJfJYm+qErNS3kVHPay yB9cBnbYgoU6sq8lJKZY2djcqML74Q8RShQj7KFvOrfJJMV8dgcTK5eDEo1otCiT 6OSgo6pGYp8uVjhPxYbe9MKt1EJxJW7GEc8N2RFYNSDc3KaFqkSU2f/vXXJJlvut lM8/jmZU18OilsI+Zmb6w3+iTu01ASkurUZJnVW6g8174XMQZg+OXvavvwts+zmt xh2AL4MN0B3HieJxLKJwhfyuxh8w1Su8lbbv0OxR8EP82rlf04p437KdSVwLvhBL UdUu6jmFzqG5OG3/qCapsg== -----END CERTIFICATE REQUEST-----
2.3°/ L’AC doit signer la CSR ( man ca )
openssl ca -in mon_AC/newcerts/server_CSR.pem -out mon_AC/certs/server_signed.pem -keyfile mon_AC/private/mon_AC.key -cert mon_AC/private/mon_AC.crt -days 3650
Using configuration from /usr/lib/ssl/openssl.cnf
Enter pass phrase for mon_AC/private/mon_AC.key: linuxvaincra <== IÇI SAISIR LE MOT DE PASSE !!!
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 1 (0x1) <== C'EST LE N° DE SÉRIE CONTENU PAR LE FICHIER mon_AC/serial !!!
Validity
Not Before: May 4 12:50:00 2011 GMT
Not After : May 1 12:50:00 2021 GMT <=== DATE BUTOIR DE VALIDITÉ (3650 JOURS) !!!
Subject:
countryName = fr
stateOrProvinceName = Ardeche
organizationName = Linuxorable
organizationalUnitName = Mort a M$
commonName = linuxorable.fr
emailAddress = pascal@linuxorable.fr
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
28:4F:69:2C:FB:FB:7D:A4:D3:97:A8:A6:5F:AB:A6:16:FB:7A:06:FB
X509v3 Authority Key Identifier:
keyid:C9:9D:A4:F3:2E:78:A9:A7:9D:CA:E9:EC:A3:8E:63:ED:F4:B8:F0:59
Certificate is to be certified until May 1 12:50:00 2021 GMT (3650 days)
Sign the certificate? [y/n]:y <== RÉPONDRE y ICI !!!
1 out of 1 certificate requests certified, commit? [y/n]y <== RÉPONDRE y ICI !!!
Write out database with 1 new entries
Data Base Updated
Voyons ce qui a été produit:
ls -laR mon_AC/
mon_AC/: total 36 drwxr-xr-x 5 root root 4096 4 mai 14:50 . drwxr-xr-x 5 root root 4096 4 mai 14:15 .. drwxr-xr-x 2 root root 4096 4 mai 14:50 certs -rw-r--r-- 1 root root 125 4 mai 14:50 index.txt <== NEW !!! -rw-r--r-- 1 root root 21 4 mai 14:50 index.txt.attr <== NEW !!! -rw-r--r-- 1 root root 0 4 mai 13:39 index.txt.old <=== A ÉTÉ RENOMMÉ EN .old drwxr-xr-x 2 root root 4096 4 mai 14:50 newcerts drwxr-xr-x 2 root root 4096 4 mai 14:36 private -rw-r--r-- 1 root root 3 4 mai 14:50 serial <=== A ÉTÉ MODIFIÉ (01->02) !!! -rw-r--r-- 1 root root 3 4 mai 13:39 serial.old mon_AC/certs: total 16 drwxr-xr-x 2 root root 4096 4 mai 14:50 . drwxr-xr-x 5 root root 4096 4 mai 14:50 .. -rw-r--r-- 1 root root 4685 4 mai 14:50 server_signed.pem <== NEW !!! mon_AC/newcerts: total 20 drwxr-xr-x 2 root root 4096 4 mai 14:50 . drwxr-xr-x 5 root root 4096 4 mai 14:50 .. -rw-r--r-- 1 root root 4685 4 mai 14:50 01.pem <== NEW !!! (IDENTIQUE À server_signed.crt) -rw-r--r-- 1 root root 1110 4 mai 14:43 server_CSR.pem mon_AC/private: total 20 drwxr-xr-x 2 root root 4096 4 mai 14:36 . drwxr-xr-x 5 root root 4096 4 mai 14:50 .. -rw-r--r-- 1 root root 1704 4 mai 14:19 mon_AC.crt -rw-r--r-- 1 root root 1743 4 mai 14:16 mon_AC.key -rw-r--r-- 1 root root 1679 4 mai 14:36 server_tls.pem
Regardons à quoi ressemble le certificat du serveur:
vi mon_AC/certs/server_signed.pem
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 1 (0x1)
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=fr, ST=Ardeche, L=Le Teil, O=Linuxorable, OU=Mort a M$, CN=linuxorable.fr/emailAddress=pascal@linuxorable.fr <=== LIGNE RELATIVE À L'AC !!!
Validity
Not Before: May 4 12:50:00 2011 GMT
Not After : May 1 12:50:00 2021 GMT
Subject: C=fr, ST=Ardeche, O=Linuxorable, OU=Mort a M$, CN=linuxorable.fr/emailAddress=pascal@linuxorable.fr <=== LIGNE RELATIVE AU SERVEUR !!!
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (2048 bit)
Modulus (2048 bit):
00:b6:fe:42:2f:ea:56:cb:9d:3c:c4:6a:f8:86:ae:
94:47:90:60:28:38:e1:62:c0:fc:d4:0d:42:57:fe:
9e:43:7a:19:a6:c0:99:51:a2:f5:c8:d3:4e:46:b0:
00:f9:2e:ae:ff:4c:c3:cc:a6:f4:f7:29:52:9d:d7:
93:fd:f8:0f:39:66:18:31:f2:13:f3:ea:e3:e6:fe:
5b:40:be:6a:62:2c:91:f7:dc:9d:36:e0:bc:66:ed:
c3:69:f1:67:4e:a5:cd:bc:9b:10:e1:86:9d:50:7e:
51:7f:2a:2f:b2:f7:94:ef:58:7f:01:1f:a5:8f:3d:
05:5f:25:ab:55:42:d6:16:b8:bb:07:59:2a:64:16:
b0:3d:88:d8:d8:19:cb:d0:48:4a:f0:5f:38:51:6c:
82:4e:b0:44:d9:94:84:1b:83:9b:a0:b5:30:42:a3:
a8:8c:b6:18:ed:9b:2b:0c:9d:fe:90:fd:11:10:51:
46:42:54:0c:21:29:1e:f5:9b:94:23:0f:d5:50:7f:
91:16:a7:ad:10:78:e6:c4:db:e2:8d:e6:03:62:d4:
98:8b:38:26:93:c9:c2:a3:07:ca:c9:6d:f4:42:06:
20:74:88:79:c0:80:79:5e:68:89:a8:6a:37:91:23:
60:00:73:28:74:dd:f2:9d:6f:f0:e9:cb:34:8e:45:
06:1d
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
28:4F:69:2C:FB:FB:7D:A4:D3:97:A8:A6:5F:AB:A6:16:FB:7A:06:FB
X509v3 Authority Key Identifier:
keyid:C9:9D:A4:F3:2E:78:A9:A7:9D:CA:E9:EC:A3:8E:63:ED:F4:B8:F0:59
Signature Algorithm: sha1WithRSAEncryption
54:62:58:de:2d:02:68:3a:ce:86:be:1e:f8:fb:1d:41:d7:a8:
0f:8c:67:5b:05:c3:58:3f:8f:c9:c5:3e:09:a9:f2:6e:0f:6d:
88:9c:4c:44:74:16:d7:73:41:5f:63:12:1c:4d:0b:b5:29:8d:
26:0e:3f:3a:19:69:00:cb:6f:e5:2b:26:0a:eb:cb:39:7f:6f:
00:cd:9f:24:cb:6f:45:6a:26:03:2e:83:c6:63:d7:9b:e9:fa:
50:4f:bd:ce:42:92:ec:0a:69:57:72:56:14:de:3f:41:e9:f4:
1a:d8:3b:a1:69:3b:f9:9c:0d:5a:14:72:c7:f9:80:c0:00:40:
ac:13:5f:e1:4f:83:ef:b5:9f:0d:ff:39:ce:f3:a6:36:f9:57:
23:cd:e6:c2:72:b7:ad:f7:1d:b1:19:b1:56:89:4a:62:6a:76:
b4:c0:4a:4f:de:00:cb:86:9a:a4:82:33:6c:10:a2:c3:ab:df:
e4:fa:ee:ad:ba:43:a0:c9:55:7a:fb:a8:20:c1:9f:6a:5d:05:
3f:75:d7:63:9b:ac:99:24:63:cc:18:2f:64:81:af:83:00:ef:
8d:04:f6:62:57:d1:88:cb:47:0e:0e:b0:8a:7f:bb:2b:41:e2:
79:a6:62:a0:5e:cc:7e:50:0d:ae:d6:52:66:38:43:ec:55:e0:
34:b6:15:1e
-----BEGIN CERTIFICATE-----
MIIEGjCCAwKgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBmjELMAkGA1UEBhMCZnIx
EDAOBgNVBAgTB0FyZGVjaGUxEDAOBgNVBAcTB0xlIFRlaWwxFDASBgNVBAoTC0xp
bnV4b3JhYmxlMRIwEAYDVQQLFAlNb3J0IGEgTSQxFzAVBgNVBAMTDmxpbnV4b3Jh
YmxlLmZyMSQwIgYJKoZIhvcNAQkBFhVwYXNjYWxAbGludXhvcmFibGUuZnIwHhcN
MTEwNTA0MTI1MDAwWhcNMjEwNTAxMTI1MDAwWjCBiDELMAkGA1UEBhMCZnIxEDAO
BgNVBAgTB0FyZGVjaGUxFDASBgNVBAoTC0xpbnV4b3JhYmxlMRIwEAYDVQQLFAlN
b3J0IGEgTSQxFzAVBgNVBAMTDmxpbnV4b3JhYmxlLmZyMSQwIgYJKoZIhvcNAQkB
FhVwYXNjYWxAbGludXhvcmFibGUuZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
ggEKAoIBAQC2/kIv6lbLnTzEaviGrpRHkGAoOOFiwPzUDUJX/p5DehmmwJlRovXI
005GsAD5Lq7/TMPMpvT3KVKd15P9+A85Zhgx8hPz6uPm/ltAvmpiLJH33J024Lxm
7cNp8WdOpc28mxDhhp1QflF/Ki+y95TvWH8BH6WPPQVfJatVQtYWuLsHWSpkFrA9
iNjYGcvQSErwXzhRbIJOsETZlIQbg5ugtTBCo6iMthjtmysMnf6Q/REQUUZCVAwh
KR71m5QjD9VQf5EWp60QeObE2+KN5gNi1JiLOCaTycKjB8rJbfRCBiB0iHnAgHle
aImoajeRI2AAcyh03fKdb/DpyzSORQYdAgMBAAGjezB5MAkGA1UdEwQCMAAwLAYJ
YIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1Ud
DgQWBBQoT2ks+/t9pNOXqKZfq6YW+3oG+zAfBgNVHSMEGDAWgBTJnaTzLnipp53K
6eyjjmPt9LjwWTANBgkqhkiG9w0BAQUFAAOCAQEAVGJY3i0CaDrOhr4e+PsdQdeo
D4xnWwXDWD+PycU+Canybg9tiJxMRHQW13NBX2MSHE0LtSmNJg4/OhlpAMtv5Ssm
CuvLOX9vAM2fJMtvRWomAy6DxmPXm+n6UE+9zkKS7AppV3JWFN4/Qen0Gtg7oWk7
+ZwNWhRyx/mAwABArBNf4U+D77WfDf85zvOmNvlXI83mwnK3rfcdsRmxVolKYmp2
tMBKT94Ay4aapIIzbBCiw6vf5PrurbpDoMlVevuoIMGfal0FP3XXY5usmSRjzBgv
ZIGvgwDvjQT2YlfRiMtHDg6win+7K0HieaZioF7MflANrtZSZjhD7FXgNLYVHg==
-----END CERTIFICATE-----
Explications:
- openssl ca est une application CA minimale. Elle peut être utilisée pour signer des demandes de certificats
- -in est suivi du nom du fichier qui contient la CRS.
- -out est suivi du nom du fichier qui contiendra le certificat signé avec la clef privée de l’AC.
- -keyfile est suivi du nom du fichier qui contient la clef privée de l’AC pour signer le certificat.
- -cert est suivi du nom du fichier qui contient le certificat de notre AC
- -days periode, en jours, pendant laquelle le certificat va rester valide.
- -config est suivi du fichier de configuration de openssl (/etc/ssl/openssl.cnf) (non utilisé içi).
Nous voilà donc en possession d’une clef privée de serveur, d’une clef publique de serveur que l’on va pouvoir largement diffuser auprès des clients et d’un certificat d’AC qui peut attester de l’appartenance et de la validité du certificat du serveur.
Il va falloir encore créer des certificats pour les utilisateurs, mais avant faisons quelques tests.
3°/ Quelques commandes de contrôle
3.1°/ Contrôler le certificat serveur
Avant de contrôler que le certificat serveur est correct, il faut relancer le serveur imaps Cyrus-IMAP pour qu’il prenne en compte les documments que nous venons de créer.
Il est également important de bien vérifier, dans /etc/imapd.conf, que les chemins, inclus dans les régles relatives à l’utilisation de TLS, soient corrects et ainsi définis:
Configuration tls correct:
- tls_require_cert: false ou #tls_require_cert: false
- tls_cert_file: /usr/lib/ssl/mon_AC/certs/server_signed.pem
- tls_key_file: /usr/lib/ssl/mon_AC/private/server_tls.pem
- tls_ca_path: /usr/lib/ssl/mon_AC/private/
- tls_ca_file: /usr/lib/ssl/mon_AC/private/mon_AC.crt
- #imap_tls_require_cert: false
- #imap_tls_cert_file: /usr/lib/ssl/mon_AC/certs/server_signed.pem
- #imap_tls_key_file: /usr/lib/ssl/mon_AC/private/server_tls.pem
La configuration ci-dessus est générique (elle met en place TLS/SSL pour tous les services: imap, lmtp, pop3 et sieve). Mais pour une raison que j'ignore, cette configuration:
Configuration tls incorrect:
- tls_require_cert: false ou #tls_require_cert: false
- #tls_cert_file: /usr/lib/ssl/mon_AC/certs/server_signed.pem
- #tls_key_file: /usr/lib/ssl/mon_AC/private/server_tls.pem
- tls_ca_path: /usr/lib/ssl/mon_AC/private/
- tls_ca_file: /usr/lib/ssl/mon_AC/private/mon_AC.crt
- imap_tls_require_cert: false
- imap_tls_cert_file: /usr/lib/ssl/mon_AC/certs/server_signed.pem
- imap_tls_key_file: /usr/lib/ssl/mon_AC/private/server_tls.pem
qui normalement devrait ne mettre en place TLS/SSL que pour imap, fait échouer le test ci-dessous et engendre ce type de log dans /var/log/mail.log:
May 5 00:14:20 euphorie cyrus/imaps[10555]: imaps: required OpenSSL options not present May 5 00:14:20 euphorie cyrus/imaps[10555]: Fatal error: imaps: required OpenSSL options not present
J'ai tester plusieurs combinaisons sans succès. Si quelqu'un fait mieux, qu'il laisse un commentaire ;-)
Relancer le serveur après avoir modifié le fichier /etc/imapd.conf:
/etc/init.d/cyrus reload
ou
/etc/init.d/cyrus restart
et testons le certificat de serveur:
openssl s_client -connect localhost:imaps -crlf (Cette commande peut être lancée à travers une connexion SSH)
CONNECTED(00000003)
depth=1 /C=Fr/ST=Ardeche/L=Le Teil/O=Linuxorable/OU=Mort a M$/CN=euphorie/emailAddress=pascal@linuxorable.fr
verify error:num=19:self signed certificate in certificate chain
verify return:0
---
Certificate chain
0 s:/C=Fr/ST=Ardeche/O=Linuxorable/OU=Mort a M$/CN=euphorie/emailAddress=pascal@linuxorable.fr
i:/C=Fr/ST=Ardeche/L=Le Teil/O=Linuxorable/OU=Mort a M$/CN=euphorie/emailAddress=pascal@linuxorable.fr
1 s:/C=Fr/ST=Ardeche/L=Le Teil/O=Linuxorable/OU=Mort a M$/CN=euphorie/emailAddress=pascal@linuxorable.fr
i:/C=Fr/ST=Ardeche/L=Le Teil/O=Linuxorable/OU=Mort a M$/CN=euphorie/emailAddress=pascal@linuxorable.fr
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIEwDCCA6igAwIBAgIBATANBgkqhkiG9w0BAQQFADCBlTELMAkGA1UEBhMCRnIx
EDAOBgNVBAgTB0FyZGVjaGUxEDAOBgNVBAcTB0xlIFRlaWwxFDASBgNVBAoTC0xp
bnV4b3JhYmxlMRIwEAYDVQQLFAlNb3J0IGEgTSQxETAPBgNVBAMTCGV1cGhvcmll
MSUwIwYJKoZIhvcNAQkBFhZwYXNjYWxAbGludXhvcmFibGUubmV0MB4XDTA1MDEw
NjAyNDMwNVoXDTE1MDEwNDAyNDMwNVowgYMxCzAJBgNVBAYTAkZyMRAwDgYDVQQI
EwdBcmRlY2hlMRQwEgYDVQQKEwtMaW51eG9yYWJsZTESMBAGA1UECxQJTW9ydCBh
IE0kMREwDwYDVQQDEwhldXBob3JpZTElMCMGCSqGSIb3DQEJARYWcGFzY2FsQGxp
bnV4b3JhYmxlLm5ldDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKBI
zbcO5W1ElAK6LlpLQW3y1E5znH0haasVe7nSsd4M4Ogwr5OUo7fGF1dRgtgpUG1U
dUZUowCEzYn+QlrL2nLpXUZGxx2fuIsl3qyq/4Rc0r5HIG31NbISTLb2ShG9qYan
Z1TTn2cAzbQ1IPmb/+vXrUDxwvy/DtfTR4o8meBbA8DWVgrNhRvUxWCSTXJ4OCDV
IU9hyjcRuNN+XZEilMR1x57eYq0oiHllmzs9u9Izsssd2myYvwC7xVeLNi9wXTOH
FjvtvOx1SnVMHFOJabXLBGW9lPgk5ZCpIYTzpwc21r5/WorwTnXfMbrHZ9z3bt1W
5+o33e+Z4fGWFtcVcxUCAwEAAaOCASkwggElMAkGA1UdEwQCMAAwLAYJYIZIAYb4
QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBSn
vTvLqZxBzPMbeHX+ONfmkn4XVDCBygYDVR0jBIHCMIG/gBQH3slNm8/nFLvAorhZ
s+M4iYNc46GBm6SBmDCBlTELMAkGA1UEBhMCRnIxEDAOBgNVBAgTB0FyZGVjaGUx
EDAOBgNVBAcTB0xlIFRlaWwxFDASBgNVBAoTC0xpbnV4b3JhYmxlMRIwEAYDVQQL
FAlNb3J0IGEgTSQxETAPBgNVBAMTCGV1cGhvcmllMSUwIwYJKoZIhvcNAQkBFhZw
YXNjYWxAbGludXhvcmFibGUubmV0ggkA+kPH84ONpEswDQYJKoZIhvcNAQEEBQAD
ggEBAD366UypJNKUqrnXrQU+PFEtbyP0eG4prkndi38B1atKqh0L6IoYySU89dOm
eGT6zXPZOe/Myr4nE3QeuQ6xowYIuGjOneSDPmYOz/waHB7z+vcijCWLiYzUmQQM
0qQtUeLw6yPR9gvkdqB/rtDnRsn1JUcC+6MzyZn1u2G0i8xufSifjabI5z2GLk7h
ytmur90kLc6ju0YN+uWVU2BMdfOhqUPMC+CvURKteRw6NHbp6iEzXkiOao3mz8vO
dLbmuiLPDoJXIC5XNEwKDNTvEvyUyVhoiKpDSdXrMolYCzIFhqnqhuBquUlz9Dfr
GQjetVI0UsgbH2bt4seL6S2ErfY=
-----END CERTIFICATE-----
subject=/C=Fr/ST=Ardeche/O=Linuxorable/OU=Mort a M$/CN=euphorie/emailAddress=pascal@linuxorable.fr
issuer=/C=Fr/ST=Ardeche/L=Le Teil/O=Linuxorable/OU=Mort a M$/CN=euphorie/emailAddress=pascal@linuxorable.fr
---
No client certificate CA names sent
---
SSL handshake has read 2586 bytes and written 468 bytes
---
New, TLSv1/SSLv3, Cipher is AES256-SHA
Server public key is 2048 bit
SSL-Session:
Protocol : TLSv1
Cipher : AES256-SHA
Session-ID: 2AC229A862C1AE9977F93A4A998EB4D374A95E2284D5B0C93D541F1A671D1F2F
Session-ID-ctx:
Master-Key: 3D537D833F826DBAF3426639FCE309BBD929A17C1127806317CE725C945219CA139EEE5983617B9126F8D6CA6E077FE4
Key-Arg : None
Start Time: 1104991461
Timeout : 300 (sec)
Verify return code: 19 (self signed certificate in certificate chain)
---
* OK euphorie.linuxorable.fr Cyrus IMAP4 v2.1.17-IPv6-Debian-2.1.17-3 server ready
Pour les commandes ci-dessous voir sur cette page .
- Pour les clefs RSA: ~$ openssl rsa -in key
- Pour les clefs DSA: ~$ openssl dsa -in key
- Utilisez -passin pour les clefs avec passphrases: ~$ openssl dsa -in key -passin file:pp
- Pour lire l’empreinte d’un certificat X.509: ~$ openssl x509 -in cert -fingerprint
-
La commande suivante permet de lire le CN (Common Name) d’un certificat. Le CN doit correspondre au ServerName:
Pour lire l’objet d’un certificat X.509: ~$ openssl x509 -in cert -subject
4°/ Générer des certificats pour les utilistaeurs
Si l’on souhaite mettre en place une politique d’authentification des utilisateurs (ce qui peut s’avérer très lourd à gérer) il est nécessaire de générer un certificat pour chacun d’eux.
D’autre part, pour mettre en place cette politique d’authentification, il faut initialiser, dans /etc/impad.conf, la règle suivante:
imap_tls_require_cert: true
Si cette règle est en place et que l’on a pas de certificat utilisateur ou un mauvait certificat alors on obtient un message d’erreur dont le code est -12227 et qui veut dire:
Ce problème arrive par exemple lors de tentative d'accès à un site sécurisé exigeant un certificat client. Son origine est en général la mauvaise installation de votre certifcat dans votre navigateur.
Générer la CSR
openssl req -new -nodes -keyout mon_AC/private/pascal_key.pem -out mon_AC/newcerts/pascal_CSR.pem -days 3650
On fait signer la CSR par l’AC:
openssl ca -in mon_AC/newcerts/pascal_CSR.pem -out mon_AC/certs/pascal_signed.pem -keyfile mon_AC/private/mon_AC.key -cert mon_AC/private/mon_AC.crt
Puis on convertit au format PKCS12 le certificat obtenu:
openssl pkcs12 -in mon_AC/certs/pascal_signed.pem -inkey mon_AC/private/pascal_key.pem -certfile mon_AC/private/mon_AC.crt -out pascal.p12 -export -name "pascal"
On modifie les droits du certificat pour lui donner ceux de l’utilisateur:
chown user:user pascal.p12
Et il ne reste plus qu’à le donner à l’utilisateur final pour qu’il l’importe dans son logiciel de gestion de mails.
:
Lors de l’importation du certificat dans Thunderbird, un premier mot de passe est demandé:
Please enter the master passord for the Software Security Device
Il s'agit du mot de passe du compte IMAP !!!
Configuration de Thunderbird
La configuration présentée ici suppose que ne sont pas requis de certificats clients, c’est à dire que les directives tls_require_cert, imap_tls_require_cert et lmtp_tls_require_cert du fichier /etc/imapd.conf sont toutes positionnées à false
Et bien sûr, pour l’instant TLS n’est pas configuré pour le serveur SMTP.
Pour bien comprendre ce qui ce passe, je vous suggère de créer une deuxième BàL pour un utilisateur test1 (voir 10°/ de l’article Installer Cyrus-IMAP )
Ceci fait, ajoutez une entrée test1 au fichier /etc/postfix/aliases et dans Thunderbird un compte pour test1
Puis configurez le serveur IMAP ainsi:
Fig 1: Configuration du serveur imaps pour test1
Pour l’utilisateur test0 on conserve la configuration présentée à la fin de l’article Postfix: "master.cf" à savoir:
Fig 2: Configuration du serveur imapd pour test0
Maintenant que Thunderbird contient les comptes de test0 et test1 vous (re)lancez Thunderbird et voici ce que vous devez obtenir:
Fig 3: Présentation du certificat serveur Cyrus-IMAP
- Si vous acceptez définitivement le certificat, il ne vous sera plus présenté.
- Si vous acceptez temporairement le certificat il vous sera présenté à chaque démarrage de Thunderbird.
Après avoir saisi les mots de passe de test0 et test1, voici les logs produits par /var/log/mail.log lors de l’authentification de ces deux utilisateurs:
cyrus/imapd[3219]: starttls: TLSv1 with cipher AES256-SHA (256/256 bits new) no authentication cyrus/master[3207]: process 3425 exited, status 0 cyrus/imapd[3215]: login: mutualite-2-82-67-64-88.fbx.proxad.net[82.67.64.88] test0 plaintext cyrus/imapd[3219]: login: mutualite-2-82-67-64-88.fbx.proxad.net[82.67.64.88] test1 plaintext+TLS cyrus/imapd[3215]: seen_db: user test0 opened /var/lib/cyrus/user/t/test0.seen cyrus/imapd[3215]: open: user test0 opened INBOX cyrus/imapd[3219]: seen_db: user test1 opened /var/lib/cyrus/user/t/test1.seen cyrus/imapd[3219]: open: user test1 opened INBOX
On voit très clairement que l’utilisateur test1 bénéficie d’une authentification et d’une connexion cryptée et pas test0
Ce qui est important, c’est de remarquer que la communication sécurisée se met en place avant l’envoi des mots de passe. En effet, la commande starttls: TLSv1 with cipher AES256-SHA intervient avant la réception des mots de passe. Et d’ailleurs, vous avez reçu le certificat serveur avant de taper les mots de passe.
Le mot de passe de test0 circule en clair sur le réseau mais pas celui de test1
:
Le message no authentication de la première ligne indique que test1 n’a pas été authentifié par un certificat client, ce qui est logique, je n’en ai pas fait un.
Vous pouvez tester le bon fonctionnement du serveur Cyrus-IMAP: vous devez être en mesure d’envoyer et de recevoir des mails pour chacun des deux comptes.
Pour rappel, le serveur d’authentification saslauthd n’est pas nécessaire.
Il est maintenant temps de passer à la configuration de SSL/TLS pour SMTP: Postfix: "main.cf"
Table des matières
- Installer Cyrus IMAP + SSL + LDAP
- Installer Cyrus IMAP
- Le fichier cyrus.conf
- Le fichier imapd.conf
- Le fichier imapd-local.conf
- Création d'une Autorité de certification et de certificats
- Boîte à lettres partagée
- Cyrus IMAP : authentification auprès d'un annuaire LDAP














