29-11-2011 : Remettre dans le débat politique les principes du Conseil National de la Résistance
17-02-2012 : Pétition pour une protection de l’apiculture et des consommateurs face au lobby des OGM
Logo de mon site
Logo de mon site
Faire un don

Luxpopuli / Internet / Installer Cyrus IMAP + SSL + LDAP / SSL/TLS : créer une autorité de certification et des certificats





Right menu

Logo du site ez.no  Logo XHTML 1.O du W3C  Logo XHTML 1.O du W3C  Site francophone officiel de Firefox
zero papier grâce aux catalogues et promos en ligne de bonial

Installer Cyrus IMAP + SSL + LDAP

Table des matières

  1. Installer Cyrus IMAP + SSL + LDAP
  2. Installer Cyrus IMAP
  3. Le fichier cyrus.conf
  4. Le fichier imapd.conf
  5. Le fichier imapd-local.conf
  6. Création d'une Autorité de certification et de certificats
  7. Boîte à lettres partagée
  8. 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

Socrate

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

  1. Installer Cyrus IMAP + SSL + LDAP
  2. Installer Cyrus IMAP
  3. Le fichier cyrus.conf
  4. Le fichier imapd.conf
  5. Le fichier imapd-local.conf
  6. Création d'une Autorité de certification et de certificats
  7. Boîte à lettres partagée
  8. Cyrus IMAP : authentification auprès d'un annuaire LDAP

Commentaires

  • 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