Date de publication: le Samedi 12 Mai 2007 à 16h50
Dernière modification: par Pascal BOYER le Dimanche 15 Juillet 2007 à 08h10
« Article précédent: Cyrus IMAP : le fichier imapd-local.conf
» Article suivant: Cyrus IMAP : Plus encore...
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.7e-3 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 52 drwxr-xr-x 3 root root 4096 2004-11-26 15:08 . drwxr-xr-x 108 root root 45056 2004-11-26 13:36 .. lrwxrwxrwx 1 root root 14 2004-11-26 13:37 certs -> /etc/ssl/certs drwxr-xr-x 2 root root 4096 2004-11-26 13:37 misc lrwxrwxrwx 1 root root 20 2004-11-26 13:37 openssl.cnf -> /etc/ssl/openssl.cnf lrwxrwxrwx 1 root root 16 2004-11-26 13:37 private -> /etc/ssl/private ./misc: total 44 drwxr-xr-x 2 root root 4096 2004-11-26 13:37 . drwxr-xr-x 3 root root 4096 2004-11-26 15:08 .. -rwxr-xr-x 1 root root 5281 2004-11-14 20:43 CA.pl -rwxr-xr-x 1 root root 3505 2004-11-14 20:43 CA.sh -rwxr-xr-x 1 root root 119 2004-11-14 20:43 c_hash -rwxr-xr-x 1 root root 152 2004-11-14 20:43 c_info -rwxr-xr-x 1 root root 112 2004-11-14 20:43 c_issuer -rwxr-xr-x 1 root root 110 2004-11-14 20:43 c_name -rwxr-xr-x 1 root root 6733 2004-11-14 20:43 der_chop
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 que fournit Openssl.
:
Dans cet article, je vais utiliser les 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 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 acceuillera les certificats et clefs publiques que l’on va créer.
- mon_AC/newcerts acceuillera les CSR (Certificate Signing Request/Demande de signature de certificat).
- mon_AC/private acceuillera 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 2004-11-26 15:17 .
drwxr-xr-x 4 root root 4096 2004-11-26 15:16 ..
drwxr-xr-x 2 root root 4096 2004-11-26 15:16 certs
-rw-r--r-- 1 root root 0 2004-11-26 15:17 index.txt
drwxr-xr-x 2 root root 4096 2004-11-26 15:17 newcerts
drwxr-xr-x 2 root root 4096 2004-11-26 15:27 private
-rw-r--r-- 1 root root 3 2004-11-26 15:17 serial
mon_AC/certs:
total 8
drwxr-xr-x 2 root root 4096 2004-11-26 15:16 .
drwxr-xr-x 5 root root 4096 2004-11-26 15:17 ..
mon_AC/newcerts:
total 8
drwxr-xr-x 2 root root 4096 2004-11-26 15:17 .
drwxr-xr-x 5 root root 4096 2004-11-26 15:17 ..
mon_AC/private:
total 12
drwxr-xr-x 2 root root 4096 2004-11-26 15:27 .
drwxr-xr-x 5 root root 4096 2004-11-26 15:17 ..
-rw-r--r-- 1 root root 1751 2004-11-26 15:30 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:
vi mon_AC/private/mon_AC.key
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,6ECEC5FB712CBD7D
QA1qSeAAvxAi6/tHP9/agv5RPpfRY2Z0TVzXZ6+uL7ejdsSl9tC7ajJxaIAFubYD
qaHP4UXt6AlYR+fVM3v29SJsRubrlRB4f2yEl8l7QQrLPHR0X7+3G1nPoWfNby3z
oUFsS2jnBVNBQ65+wa365F0qqr8aSYbsy3Bdt2+Bawq1J6wI4H836QGVWg4Zee3u
uKFE5x3BAWaB24uYW3AKnvO1C+asEGPf3QIUy+b4b/6yDUyVepZVezkVXaxvNyX3
kxgHTnEzsmpFhM1fONmhaMf065Ki22WieSRIniGVlFgUrDNq4BYum3b85MRbN100
TxOHSjzf+EAzLKfncttqt8V0wITe6cB0O3k8LNCNdOK9QozaIc6wPVIL4tg2L8TC
FFhP43q1N1kNmvErN2Cta2f+O3IuSOb5lOnQTImPnXqvtK7rcwIitMROF4I/MLVK
pz5gOOJ/9zVd4hc59UVs7wpedi+Zvv5imzZ5FteZ9jY6fD1PsbMPxauuHOQq9BTV
jl0Y6s2BP2WliE8/XmlBxtVT0i8XljEvWBGgeUn5+VS7+p3CMs+xstig9Ifvyyrv
6b8d8OiHDOU+zDHi1ZksjpkUqnSghqdBVgve7FYqavNooTdzjlZcP2zwrnhQuOf6
v7Ma/NnFoTd3ncihZuGjVpL0FlXbLyPKBDpRATRqQasNH/Yz/junFc8mFbI6JL+I
z0pdQYSNPmKcYdoRXXeF6Tshp37i5G3jqON6EvrYx5hUTv79ONFl62BCREW5fV36
XRZc7ktUdGYDQPOu7Mqshp2p+qPPz/eEpEWm+GU5KzN/JBO5CHGXDG0UFxF7Ww6m
6dVzNVTR9p+KH1oqshlMGvyWT+TWmrKdshcMynHXCHfLHuhQcPenUcxmNo7vUH/4
RfyRIxSOo2s8mBEHbBowoPQKKIRQA6z6zPBfVZER+uUWAY1W5DOX0pmz1WLh111K
jqJQlGmdCYJi63y2Ws+jaKnJ0bQGGGRQw+0nNobudIt3JrEiVKb9nSIhwj4Mww1G
KWid2qSKtDwH6QR78CrbGSSbgggPH4DdfTneYzBRoiQZt07OQ23n8AKVPVxFEhu7
GQLbAHAPZgJbqS6AEh7H+awgNx4Bs5VEjehv7cSwJZtrr4eF7TJ4+Ll5Z2TOTkOj
Y4dzOdvKEcGp+3QxwlGBe4juwNjHPPLjUtR9bh7kwgn9wiJKrZpr4u6fbJWAKlhd
uBWbcLHQEhmTXLCk0Ry0vzSKrQr+7jSv88+CM/8EwmHQ6PCBP/Nn+UZ7SHCE3Oxh
xfzXsoSTqIuK/E8mmCUlx159rOz0YXUF74LdJOs6kBo49L7ikXcsd4IvNLHv5hmo
YfaI3KnM2JOSN0C9QMHRg9Fsi2O9VXiC8BpXqPRtHz7eyQDxKLFK/byFovk4KFn/
wh30QcEWnRUGDclR9GoPQGTvGnPePphuwQ/PTiqby/V8dufZS6KmF4Oi9g7cRF35
-----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 2004-11-26 15:17 .
drwxr-xr-x 4 root root 4096 2004-11-26 15:16 ..
drwxr-xr-x 2 root root 4096 2004-11-26 15:16 certs
-rw-r--r-- 1 root root 0 2004-11-26 15:17 index.txt
drwxr-xr-x 2 root root 4096 2004-11-26 15:17 newcerts
drwxr-xr-x 2 root root 4096 2004-11-26 15:48 private
-rw-r--r-- 1 root root 3 2004-11-26 15:17 serial
mon_AC/certs:
total 8
drwxr-xr-x 2 root root 4096 2004-11-26 15:16 .
drwxr-xr-x 5 root root 4096 2004-11-26 15:17 ..
mon_AC/newcerts:
total 8
drwxr-xr-x 2 root root 4096 2004-11-26 15:17 .
drwxr-xr-x 5 root root 4096 2004-11-26 15:17 ..
mon_AC/private:
total 16
drwxr-xr-x 2 root root 4096 2004-11-26 15:48 .
drwxr-xr-x 5 root root 4096 2004-11-26 15:17 ..
-rw-r--r-- 1 root root 1761 2004-11-26 15:48 mon_AC.crt <=== New !!!
-rw-r--r-- 1 root root 1751 2004-11-26 15:30 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:
vi mon_AC/private/mon_AC.crt
-----BEGIN CERTIFICATE-----
MIIE6DCCA9CgAwIBAgIJAMTboZ5FemkOMA0GCSqGSIb3DQEBBAUAMIGoMQswCQYD
VQQGEwJMWDEOMAwGA1UECBMFc3RhdGUxETAPBgNVBAcTCGxvY2FsaXR5MRUwEwYD
VQQKEwxvcmdhbml6YXRpb24xGjAYBgNVBAsTEW9yZ2FuaXphdGlvbiB1bml0MRww
GgYDVQQDExN3d3cubGludXhvcmFibGUubmV0MSUwIwYJKoZIhvcNAQkBFhZwYXNj
YWxAbGludXhvcmFibGUubmV0MB4XDTA0MTEyNjE0NDgwOVoXDTE0MTEyNDE0NDgw
OVowgagxCzAJBgNVBAYTAkxYMQ4wDAYDVQQIEwVzdGF0ZTERMA8GA1UEBxMIbG9j
YWxpdHkxFTATBgNVBAoTDG9yZ2FuaXphdGlvbjEaMBgGA1UECxMRb3JnYW5pemF0
aW9uIHVuaXQxHDAaBgNVBAMTE3d3dy5saW51eG9yYWJsZS5uZXQxJTAjBgkqhkiG
9w0BCQEWFnBhc2NhbEBsaW51eG9yYWJsZS5uZXQwggEiMA0GCSqGSIb3DQEBAQUA
A4IBDwAwggEKAoIBAQDMmK0fsBgwOkQ35ivJGW+4GtnbZf7Ymn+d4dYHLR1bpiiT
pLHd5M0OTXohPJgGtuBwoAPz8fN8Aqa21GS+R3sDZwEc7Z3HwORPdicvpD2zresB
PQDk2AXiQ51RkQrWZHJgL4fHtZXF+HPAsWRETYmN2b9nyhBY1RFxgbE+8EsLl7aT
jragIok4txd9edN6EmpHqfpW0NsUV4MOoZUmCuNDciUp2NaarGfk8H61WvC5RA8p
la+bM1YZbGEcEi0z+pXoTpWMNxu1OG8C2p+DiQ4nAgMBAAGjggERMIIBDTAdBgNV
HQ4EFgQUSSqpJQ/Wtsi/E7ostmehxuOWx6wwgd0GA1UdIwSB1TCB0oAUSSqpJQ/W
tsi/E7ostmehxuOWx6yhga6kgaswgagxCzAJBgNVBAYTAkxYMQ4wDAYDVQQIEwVz
MBgGA1UECxMRb3JnYW5pemF0aW9uIHVuaXQxHDAaBgNVBAMTE3d3dy5saW51eG9y
YWJsZS5uZXQxJTAjBgkqhkiG9w0BCQEWFnBhc2NhbEBsaW51eG9yYWJsZS5uZXSC
CQDE26GeRXppDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBAUAA4IBAQBB+bkP
HSl85iFUvYpxKGWWibE7ooFE0rXQy9N3msIewEmH5tdno3oly9N2k7pXTKeybZE1
MyKywF/c2DCBuK75YTfRwSNBD7hkKUIV95RAGDLsliSgyo2BAmviT6oaF6sns8hh
PSyZe2EoEE7KfrfpxTnkzjKtvhvvo0sL7OTuqEqZK0Fuqj5ZXyuiEPVZdL0KlrN
iJbjRF5wCs6GGcq64P21wUHh5v+FkvQsMHG9qDfszwck4MXPrR6iyr8qLhtksWmO
TdNmcXik6xZE2mFSzIHwob8CDj7P1kcLBW3v/IstEGBxC1EMYFH/VSc7Dv+rzUbs
PFnLb7ex94S99kF3
-----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à maintenant 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 28 drwxr-xr-x 6 root root 4096 2005-01-05 04:22 . drwxr-xr-x 4 root root 4096 2005-01-05 01:17 .. drwxr-xr-x 2 root root 4096 2005-01-05 04:20 certs drwxr-xr-x 2 root root 4096 2005-01-05 04:20 crl -rw-r--r-- 1 root root 0 2005-01-05 04:22 index.txt drwxr-xr-x 2 root root 4096 2005-01-05 04:20 newcerts drwxr-xr-x 2 root root 4096 2005-01-05 08:42 private -rw-r--r-- 1 root root 3 2005-01-05 04:22 serial mon_AC/certs: total 8 drwxr-xr-x 2 root root 4096 2005-01-05 04:20 . drwxr-xr-x 6 root root 4096 2005-01-05 04:22 .. mon_AC/crl: total 8 drwxr-xr-x 2 root root 4096 2005-01-05 04:20 . drwxr-xr-x 6 root root 4096 2005-01-05 04:22 .. mon_AC/newcerts: total 8 drwxr-xr-x 2 root root 4096 2005-01-05 04:20 . drwxr-xr-x 6 root root 4096 2005-01-05 04:22 .. mon_AC/private: total 20 drwxr-xr-x 2 root root 4096 2005-01-05 08:42 . drwxr-xr-x 6 root root 4096 2005-01-05 04:22 .. -rw-r--r-- 1 root root 1346 2005-01-05 04:31 mon_AC.crt -rw-r--r-- 1 root root 951 2005-01-05 04:31 mon_AC.key -rw-r--r-- 1 root root 1675 2005-01-05 08:42 server_tls.pem <== NEW !!!
Regardons à quoi ressemble cette clef privée de serveur:
vi 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 ou 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 []: <=== password An optional company name []: <== Neant
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 28 drwxr-xr-x 6 root root 4096 2005-01-05 04:22 . drwxr-xr-x 4 root root 4096 2005-01-05 01:17 .. drwxr-xr-x 2 root root 4096 2005-01-05 04:20 certs drwxr-xr-x 2 root root 4096 2005-01-05 04:20 crl -rw-r--r-- 1 root root 0 2005-01-05 04:22 index.txt drwxr-xr-x 2 root root 4096 2005-01-05 10:08 newcerts drwxr-xr-x 2 root root 4096 2005-01-05 10:06 private -rw-r--r-- 1 root root 3 2005-01-05 04:22 serial mon_AC/certs: total 8 drwxr-xr-x 2 root root 4096 2005-01-05 04:20 . drwxr-xr-x 6 root root 4096 2005-01-05 04:22 .. mon_AC/crl: total 8 drwxr-xr-x 2 root root 4096 2005-01-05 04:20 . drwxr-xr-x 6 root root 4096 2005-01-05 04:22 .. mon_AC/newcerts: total 12 drwxr-xr-x 2 root root 4096 2005-01-05 10:08 . drwxr-xr-x 6 root root 4096 2005-01-05 04:22 .. -rw-r--r-- 1 root root 1135 2005-01-05 10:08 server_CSR.pem <== NEW !!! mon_AC/private: total 20 drwxr-xr-x 2 root root 4096 2005-01-05 10:06 . drwxr-xr-x 6 root root 4096 2005-01-05 04:22 .. -rw-r--r-- 1 root root 1346 2005-01-05 04:31 mon_AC.crt -rw-r--r-- 1 root root 951 2005-01-05 04:31 mon_AC.key -rw-r--r-- 1 root root 1675 2005-01-05 08:42 server_tls.pem <== NEW !!!
On regarde à quoi ressemble une CSR:
vi 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 !!!
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 1 (0x1) <== N° de serie (fichier mon_AC/serial) !!!
Validity
Not Before: Jan 5 10:17:29 2005 GMT
Not After : Jan 3 10:17:29 2015 GMT <== Date butoire 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:
8E:BB:79:5F:4D:A9:FF:DC:93:32:10:54:0F:FA:B2:BA:1F:22:E2:12
X509v3 Authority Key Identifier:
keyid:B2:FA:C0:EA:8A:CA:4C:F8:D9:81:F5:FB:E1:57:51:3D:DC:D4:A2:58
DirName:/C=Fr/ST=Ardeche/L=Le Teil/O=Linuxorable/OU=Mort a M$/CN=pascal boyer/emailAddress=pascal@linuxorable.fr
serial:C3:45:42:D8:66:66:87:A7
Certificate is to be certified until Jan 3 10:17:29 2015 GMT (3650 days)
Sign the certificate? [y/n]:y <== IÇI !!!
1 out of 1 certificate requests certified, commit? [y/n]y <== IÇI !!!
Write out database with 1 new entries
Data Base Updated
Voyons ce qui a été produit:
ls -laR mon_AC/
mon_AC/: total 40 drwxr-xr-x 6 root root 4096 2005-01-05 11:17 . drwxr-xr-x 4 root root 4096 2005-01-05 01:17 .. drwxr-xr-x 2 root root 4096 2005-01-05 11:17 certs drwxr-xr-x 2 root root 4096 2005-01-05 04:20 crl -rw-r--r-- 1 root root 124 2005-01-05 11:17 index.txt -rw-r--r-- 1 root root 21 2005-01-05 11:17 index.txt.attr -rw-r--r-- 1 root root 0 2005-01-05 11:15 index.txt.old drwxr-xr-x 2 root root 4096 2005-01-05 11:17 newcerts drwxr-xr-x 2 root root 4096 2005-01-05 10:06 private -rw-r--r-- 1 root root 3 2005-01-05 11:17 serial -rw-r--r-- 1 root root 3 2005-01-05 11:15 serial.old mon_AC/certs: total 16 drwxr-xr-x 2 root root 4096 2005-01-05 11:17 . drwxr-xr-x 6 root root 4096 2005-01-05 11:17 .. -rw-r--r-- 1 root root 4476 2005-01-05 11:17 server_signed.pem <== NEW !!! mon_AC/crl: total 8 drwxr-xr-x 2 root root 4096 2005-01-05 04:20 . drwxr-xr-x 6 root root 4096 2005-01-05 11:17 .. mon_AC/newcerts: total 20 drwxr-xr-x 2 root root 4096 2005-01-05 11:17 . drwxr-xr-x 6 root root 4096 2005-01-05 11:17 .. -rw-r--r-- 1 root root 4476 2005-01-05 11:17 01.pem <== NEW !!! (identique à server_signed.crt) -rw-r--r-- 1 root root 1139 2005-01-05 11:17 server_CSR.pem mon_AC/private: total 20 drwxr-xr-x 2 root root 4096 2005-01-05 10:06 . drwxr-xr-x 6 root root 4096 2005-01-05 11:17 .. -rw-r--r-- 1 root root 1346 2005-01-05 04:31 mon_AC.crt -rw-r--r-- 1 root root 951 2005-01-05 04:31 mon_AC.key -rw-r--r-- 1 root root 1675 2005-01-05 08:42 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: md5WithRSAEncryption
Issuer: C=Fr, ST=Ardeche, L=Le Teil, O=Linuxorable, OU=Mort a M$, CN=linuxorable.fr boyer/emailAddress=pascal@linuxorable.fr <= ligne relative à l'AC !!!
Validity
Not Before: Jan 5 10:17:29 2005 GMT
Not After : Jan 3 10:17:29 2015 GMT
Subject: C=Fr, ST=Ardeche, O=Linuxorable, OU=Mort a M$, CN=linuxorable.fr boyer/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:b1:58:92:48:af:31:96:55:c4:16:c4:4c:98:30:
ac:b9:0c:8a:22:eb:55:bf:fd:ac:eb:12:ba:b8:4e:
b1:56:14:6c:96:31:ca:89:9c:ac:ed:98:ca:7e:79:
a1:8f:cd:48:50:f8:40:2e:63:92:4f:80:84:2f:87:
9c:48:ad:7f:75:26:35:88:b0:aa:b9:74:63:86:62:
0a:80:7f:a8:27:80:f9:11:1c:a0:31:ca:75:b0:c7:
ce:48:46:1e:b3:54:71:39:0a:79:d3:09:64:53:ba:
f6:01:ed:0a:44:db:c5:be:89:72:41:7b:88:f7:9f:
00:36:0d:bf:87:2b:54:b4:1f:28:64:3d:24:6f:f0:
c2:af:92:e0:17:f9:86:ce:63:23:e5:1a:c7:b4:d6:
4a:17:eb:0b:61:13:f8:26:b6:35:9a:7a:86:d5:eb:
ac:e3:68:a2:6e:1b:b6:9e:f8:95:79:ad:e6:4e:01:
ef:d1:35:14:14:a9:06:69:a6:51:29:09:ec:0e:c2:
13:4d:35:be:98:14:ef:ca:41:d5:50:a4:5c:8b:bf:
81:ea:a2:f1:5a:8c:ec:7c:d7:6a:36:5e:2b:70:0f:
cc:80:30:2b:9b:11:d9:1d:d2:92:29:6e:2d:f3:1c:
2e:59:44:3c:8d:16:d4:b1:1f:05:cf:df:2b:f2:f9:
4a:47
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
8E:BB:79:5F:4D:A9:FF:DC:93:32:10:54:0F:FA:B2:BA:1F:22:E2:12
X509v3 Authority Key Identifier:
keyid:B2:FA:C0:EA:8A:CA:4C:F8:D9:81:F5:FB:E1:57:51:3D:DC:D4:A2:58
DirName:/C=Fr/ST=Ardeche/L=Le Teil/O=Linuxorable/OU=Mort a M$/CN=pascal boyer/emailAddress=pascal@linuxorable.fr
serial:C3:45:42:D8:66:66:87:A7
Signature Algorithm: md5WithRSAEncryption
31:35:19:01:b3:20:f9:db:8e:57:39:49:ea:f5:1a:20:89:dc:
d0:de:e6:c0:b5:1c:b9:d4:9d:6f:03:58:44:6a:6c:fa:70:c8:
e3:fb:bc:8f:f3:8b:93:48:b8:0a:e0:43:1d:3b:78:a8:21:56:
c4:91:e3:96:fd:f9:d6:28:41:f0:e8:54:6b:41:08:5c:c7:a9:
b6:ae:d7:9f:df:c0:a1:72:4b:0b:6c:f4:29:3f:77:6c:9e:12:
aa:ff:50:34:b8:d9:0b:29:14:c1:62:72:2b:d2:4f:85:ee:9b:
b5:71:ba:1e:eb:0d:98:8f:11:0e:20:a2:4b:72:5e:0d:31:d2:
01:dd
-----BEGIN CERTIFICATE-----
MIIESzCCA7SgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCRnIx
EDAOBgNVBAgTB0FyZGVjaGUxEDAOBgNVBAcTB0xlIFRlaWwxFDASBgNVBAoTC0xp
bnV4b3JhYmxlMRIwEAYDVQQLFAlNb3J0IGEgTSQxFTATBgNVBAMTDHBhc2NhbCBi
b3llcjElMCMGCSqGSIb3DQEJARYWcGFzY2FsQGxpbnV4b3JhYmxlLm5ldDAeFw0w
NTAxMDUxMDE3MjlaFw0xNTAxMDMxMDE3MjlaMIGHMQswCQYDVQQGEwJGcjEQMA4G
A1UECBMHQXJkZWNoZTEUMBIGA1UEChMLTGludXhvcmFibGUxEjAQBgNVBAsUCU1v
cnQgYSBNJDEVMBMGA1UEAxMMcGFzY2FsIGJveWVyMSUwIwYJKoZIhvcNAQkBFhZw
YXNjYWxAbGludXhvcmFibGUubmV0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
CgKCAQEAsViSSK8xllXEFsRMmDCsuQyKIutVv/2s6xK6uE6xVhRsljHKiZys7ZjK
fnmhj81IUPhALmOST4CEL4ecSK1/dSY1iLCquXRjhmIKgH+oJ4D5ERygMcp1sMfO
SEYes1RxOQp50wlkU7r2Ae0KRNvFvolyQXuI958ANg2/hytUtB8oZD0kb/DCr5Lg
F/mGzmMj5RrHtNZKF+sLYRP4JrY1mnqG1eus42iibhu2nviVea3mTgHv0TUUFKkG
aaZRKQnsDsITTTW+mBTvykHVUKRci7+B6qLxWozsfNdqNl4rcA/MgDArmxHZHdKS
KW4t8xwuWUQ8jRbUsR8Fz98r8vlKRwIDAQABo4IBLTCCASkwCQYDVR0TBAIwADAs
BglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYD
VR0OBBYEFI67eV9Nqf/ckzIQVA/6srofIuISMIHOBgNVHSMEgcYwgcOAFLL6wOqK
ykz42YH1++FXUT3c1KJYoYGfpIGcMIGZMQswCQYDVQQGEwJGcjEQMA4GA1UECBMH
QXJkZWNoZTEQMA4GA1UEBxMHTGUgVGVpbDEUMBIGA1UEChMLTGludXhvcmFibGUx
EjAQBgNVBAsUCU1vcnQgYSBNJDEVMBMGA1UEAxMMcGFzY2FsIGJveWVyMSUwIwYJ
KoZIhvcNAQkBFhZwYXNjYWxAbGludXhvcmFibGUubmV0ggkAw0VC2GZmh6cwDQYJ
KoZIhvcNAQEEBQADgYEAMTUZAbMg+duOVzlJ6vUaIInc0N7mwLUcudSdbwNYRGps
+nDI4/u8j/OLk0i4CuBDHTt4qCFWxJHjlv351ihB8OhUa0EIXMeptq7Xn9/AoXJL
C2z0KT93bJ4Sqv9QNLjZCykUwWJyK9JPhe6btXG6HusNmI8RDiCiS3JeDTHSAd0=
-----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, sont corrects.
:
La commande ci-dessous ne marche que si: tls_imap_require_cert: false dans /etc/imapd.conf
Relancer le serveur:
/etc/init.d/cyrus reload
ou
/etc/init.d/cyrus restart
ceci fait, 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:
tls_imap_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 règles tls_require_cert:, tls_imap_require_cert: et tls_lmtp_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 Cyrus-IMAP: "installer Cyrus" )
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 9 - 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 2: 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.
Une fois que vous avez entré 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"
Commentaires













