Retourner en haut de la page Aller au bas de la page
Logo de mon site
Logo de mon site

Yasser Arafat

Item 1 Description

Yasser Arafat

Hugo Chávez

Item 1 Description

Hugo Chávez

Mikhaïl Gorbatchev

Item 1 Description

Mikhail Sergueievitch Gorbatchev

L'Abbé Pierre

Item 1 Description

Abbe Pierre

Salvadore Allende

Item 1 Description

Salvadore Allende

Angela Yvonne Davis

Item 1 Description

Angela Yvonne Davis

Jean Moulin

Item 1 Description

Jean Moulin

Nelson Mandela

Item 1 Description

Nelson Mandela

Martin Luther King

Item 1 Description

Martin Luther King

Gamal Abdel Nasser

Item 1 Description

Gamal Abdel Nasser

Richard Stallman

Item 1 Description

Richard Stallman

Simone Veil

Item 1 Description

Simone Veil

Hand Shake

Item 1 Description

Hand Shake

Wangari Muta Maathai

Item 1 Description

Wangari Muta Maathai

Michel Colucci

Item 1 Description

Coluche

Mère Teresa

Item 1 Description

Mère Térésa

Charles de Gaulle

Item 1 Description

Charles de Gaulle

Che Guevara

Item 1 Description

Ernesto Rafael Guevara

Mohandas Gandhi

Item 1 Description

Mohandas Karamchand Gandhi

Lech Walesa

Item 1 Description

Lech Walesa

Linus Benedict Torvalds

Item 1 Description

Linus Benedict Torvalds

Sous-commandant Marcos

Item 1 Description

Sous commandant Insurge Marcos

Ahmed Shah Massoud

Item 1 Description

Ahmed Shah Massoud

Luxpopuli / Internet / Postfix + Cyrus IMAP + SSL + LDAP / SSL/TLS : autorité de certification et certificats





Right menu

OBLIGATOIRE

Un professeur témoigne

La brigade canine dans un collège du Gers.
Réaction d'une internaute Québécoise:
«quand on est rendu à accepter que (...) les autorité mettent leurs sales pattes dans les culottes de vos enfants (...) il est temps (...) de vous réveiller.»
OBLIGATOIRE

Les mensonges de R. Dati

La note de recadrage statistique du sociologue L. Mucchielli recadre également les mensonges de la propagande sécuritaire dont on nous rabat les oreilles depuis déjà trop longtemps et dont les mineurs de France sont à présents la cible.
Le rapport de L. Mucchielli
OBLIGATOIRE

L'aveu de Jean-Marc Sylvestre

«Le système financier s'effondre aujourd'hui comme un jeu de carte... parce que... il a été géré d'une part.... par les États-Unis sans règle... et il a été d'autre part géré... par une bande de voyous... qui se sont gouinfrés... au détriment des autres.»
VOIR LES VIDÉOS

OBLIGATOIRE

prev prev prev prev


SSL/TLS : autorité de certification et certificats

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"

Lien vers l'article précédent
Cyrus IMAP : le fichier imapd-local.conf
Cyrus IMAP : Plus encore...
Lien vers l'article suivant

Commentaires

Alex
Vendredi 10 Juillet 2009 13:13:49
Remarque sur génération certificat server pour Cyrus

Merci pour ce tutorial vraiment complet et qui m'a bien aidé

Concernant la génération de la demande de certificat serveur, j'ai néanmoins du modifier la valeur du "Common Name".
En effet, même si lors de la génération, je n'ai pas d'erreur, lors de l'utilisation du certificat dans Cyrus, celui-ci n'est jamais identifié comme auto-signé et lorsque j'utilise la commande de vérification "openssl s_client -connect localhost:imaps -crlf" j'obtiens à la toute fin de l'affichage "Verify return code: 7 (certificate signature failure)" au lieu du "Verify return code: 19 (self signed certificate in certificate chain)" attendu.

Il m'a fallu avoir un Common Name différent de celui de l'autorité pour que cela fonctionne correctement.
Ainsi, j'ai utilisé comme Common Name d'autorité : nomdedomaine.fr et comme Common Name de serveur : mx1.nomdedomaine.fr