Modifications entre les versions 1 et 22 (s'étendant sur 21 versions)
Version 1 à la date du 2008-02-25 00:04:29
Taille: 3514
Éditeur: ThomasNoël
Commentaire: ça a l'air bon pour la CA racine... reste 98712983 étapes à franchir ;)
Version 22 à la date du 2008-03-12 21:10:19
Taille: 6154
Éditeur: ThomasNoël
Commentaire: précisions autour de openssl-auf.cnf
Texte supprimé. Texte ajouté.
Ligne 1: Ligne 1:
Fichier openssl.cnf modèle : [[attachment:openssl.cnf]] = Préliminaires =

Dans tout ce qui suit `openssl-auf.cnf` est le fichier disponible [[http://git.auf.org/?p=pki;a=blob;f=ca-certificates-auf/openssl-auf.cnf;hb=HEAD|sur le dépôt git]] associé au projet PKI. Ce fichier sera inclus dans le paquet `ca-certificates-auf`, à venir.

Pour éviter d'avoir à préciser systématiquement `-config openssl-auf.cnf` lors de l'appel à openssl, on peut fixer la variable d'environnement `OPENSSL_CONF`. On peut par exemple le faire dans le script de connexion de l'utilisateur qui devra gérer l'autorité de certification :
 {{{
# (... à ajouter à la fin de ~∕.bashrc ...)
# pour éviter de devoir systématiquement préciser -config ...
export OPENSSL_CONF=/etc/ssl/openssl-auf.cnf
}}}
Ligne 7: Ligne 16:
$ mkdir racine
$
cd racine
$
mkdir keys requests certs newcerts
$
echo 01 > serial
$
echo 01 > crlnumber
$
touch index.txt .rand
$ chmod 400 .rand
$ cp /modele/openssl.cnf .
racine$ mkdir racine; cd racine; mkdir certs newcerts ; echo 01 > serial ; echo 01 > crlnumber ; touch index.txt .rand
Ligne 16: Ligne 18:

 2. Création de la clé et du certificat auto-signé :
 1. Création d'une clef privée 2048 bits (cryptée par un mot de passe) et d'une requête de certificat :
Ligne 19: Ligne 20:
$ openssl req -config ./openssl.cnf -new -x509 -text -out ca-cert.pem -days $((20*365))
Generating a 1024 bit RSA private key
.........++++++
.....................................................++++++
writing new private key to 'ca-key.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
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.
-----
Code ISO pays (2 lettres) [CA]:
Province ou Region (nom complet) [Quebec]:
racine$ openssl req -config openssl-auf.cnf -newkey rsa:2048 -out request-ca-racine.pem
Generating RSA private key, 2048 bit long modulus
......................+++
e is 65537 (0x10001)
Enter pass phrase for ca-key.pem:
Verifying - Enter pass phrase for ca-key.pem:
(...)
Code ISO du pays (2 lettres) [CA]:
Province ou region (nom complet) [Quebec]:
Ligne 40: Ligne 33:
Adresse e-mail [rpv@auf.org]: Adresse electronique (email) [rpv@auf.org]:
Ligne 42: Ligne 35:
 1. Résultats  1. Auto-signature du certificat (on est sur la racine) avec les extensions spécifiques (ca_racine):
Ligne 44: Ligne 37:
$ ls
ca-cert.pem ca-key.pem certs crlnumber index.txt keys newcerts openssl.cnf requests serial
racine$ openssl ca -config openssl-auf.cnf -selfsign -extensions ca_racine -in request-ca-racine.pem -out ca-cert.pem
Using configuration from openssl-auf.cnf
Enter pass phrase for ca-key.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
    (...)
Certificate is to be certified until Mar 5 10:20:49 2018 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
Ligne 47: Ligne 50:
 1. La clé privée est bien encryptée :  1. Un peu de protection contre les mauvaise manipulations :
Ligne 49: Ligne 52:
$ cat ca-key.pem
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,2ECD333F18F369EB
$ chmod 0400 ca-key.pem
$ chmod 0444 ca-cert.pem
}}}
 1. Initialisation de la CRL (sera forcément vite) :
 {{{
$ openssl ca -config openssl-auf.cnf -gencrl -out ca-crl.pem <-- au format PEM
$ openssl crl -inform PEM -in ca-crl.pem -outform DER -out ca-crl.der <-- et transformation en format DER (pour diffusion)
}}}
Ligne 54: Ligne 61:
hsGEs99W6Rll5+x2WJlkcoeMpMXihgFaeKErvT/UWor/sJuMkLAZsnP1sRyd/vPf
(...)
DoO4h8lbMXwA6TtOC9uklFghpAmPQpbaYJ8IQMD+YMM=
-----END RSA PRIVATE KEY-----
Note : pour ceux qui connaissent openssl, on pourrait faire le tout en une seule étape, sans passer par une requête de certificat. Mais en utilisant la technique requête + auto-signature, le certificat auto-signé se retrouve dans la ligne des certificats signés par l'AC (fichier `index.txt`). Je trouve ça plus cohérent.

'''Pour résumer :'''
 {{{
$ export OPENSSL_CONF=/etc/ssl/openssl-auf.cnf
$ mkdir racine; cd racine; mkdir certs newcerts ; echo 01 > serial ; echo 01 > crlnumber ; touch index.txt .rand
$ openssl req -newkey rsa:2048 -out request-ca-racine.pem
$ openssl ca -selfsign -extensions ca_racine -in request-ca-racine.pem -out ca-cert.pem
$ chmod 0400 ca-key.pem ; chmod 0444 ca-cert.pem
$ openssl ca -gencrl -out ca-crl.pem ; openssl crl -inform PEM -in ca-crl.pem -outform DER -out ca-crl.der
Ligne 59: Ligne 72:
 1. Examen du certificat produit (vérification dates et extensions) :
==
Vérification des résultats ==

Examen du certificat produit (vérification des dates et des extensions) :
Ligne 61: Ligne 77:
$ cat ca-cert.pem
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            ab:21:06:a3:13:fd:5e:57
        Signature Algorithm: sha1WithRSAEncryption
        Issuer: C=CA, ST=Quebec, L=Montreal, O=AUF, OU=DRI, CN=AUF-AC-RACINE/emailAddress=rpv@auf.org
        Validity
            Not Before: Feb 25 00:01:16 2008 GMT
            Not After : Feb 20 00:01:16 2028 GMT
        Subject: C=CA, ST=Quebec, L=Montreal, O=AUF, OU=DRI, CN=AUF-AC-RACINE/emailAddress=rpv@auf.org
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (1024 bit)
                Modulus (1024 bit):
                    00:af:08:7d:88:73:55:ba:f2:8e:ce:c0:de:d8:a5:
                    (...)
                    c3:3e:07:98:c7:b7:0d:ba:a7
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                4B:C5:0B:8E:8B:65:F2:6F:05:21:46:B9:16:B7:A8:52:C5:CB:55:33
            X509v3 Authority Key Identifier:
                keyid:4B:C5:0B:8E:8B:65:F2:6F:05:21:46:B9:16:B7:A8:52:C5:CB:55:33
                DirName:/C=CA/ST=Quebec/L=Montreal/O=AUF/OU=DRI/CN=AUF-AC-RACINE/emailAddress=rpv@auf.org
                serial:AB:21:06:A3:13:FD:5E:57
racine$ openssl x509 -text -in ca-cert.pem -noout # liste de toutes les données du certificat, notamment dates et extensions
racine$ openssl x509 -purpose -in ca-cert.pem -noout # liste des utilisations possibles du certificat
}}}
Ligne 89: Ligne 81:
            X509v3 Basic Constraints: critical
                CA:TRUE
    Signature Algorithm: sha1WithRSAEncryption
        24:2f:3b:fa:fc:e0:d8:80:75:73:86:b7:0f:07:1f:05:26:d9:
        (...)
        79:e7
-----BEGIN CERTIFICATE-----
MIIDbzCCAtigAwIBAgIJAKshBqMT/V5XMA0GCSqGSIb3DQEBBQUAMIGBMQswCQYD
(...)
mrdR/A2z3wCg34MlrhXnh+t55w==
-----END CERTIFICATE-----
= Création d'une AC régionale =

Dans ce qui suit, remplacer `regionX` par le nom abrégé de la région.

 1. Préparation
 {{{
region$ mkdir regionX; cd regionX; mkdir certs newcerts ; echo 01 > serial ; echo 01 > crlnumber ; touch index.txt .rand
Ligne 101: Ligne 89:
 1. Création de la clé (cryptée par un mot de passe) et établissement de la demande de certificat :
 {{{
region$ openssl req -config openssl-auf.cnf -newkey rsa:2048 -out request-ca-region.pem
Generating RSA private key, 2048 bit long modulus
......................+++
e is 65537 (0x10001)
Enter pass phrase for ca-key.pem:
Verifying - Enter pass phrase for ca-key.pem:
(... exemple pour le BAO ...)
Code ISO du pays (2 lettres) [CA]:SN
Province ou region (nom complet) [Quebec]:.
Ville (nom complet) [Montreal]:Dakar
Organisation [AUF]:
Unite (implantation, service, programme, ...) [DRI]:
Nom canonique (TOUJOURS TRES IMPORTANT) [AUF-AC-RACINE]:AUF-AC-BAO
Adresse electronique (email) [rpv@auf.org]:
}}}
 1. Le fichier `request-ca-regionX.pem` est la demande : il doit être envoyé à l'autorité de certification racine
 1. '''Sur l'AC racine''' : la demande est signée et devient un certificat `certs/ca-regionX.pem` qui possède les extensions x509 requises pour une autorité de certification :
 {{{
racine$ openssl ca -config openssl-auf.cnf -in request-ca-regionX.pem -extensions ca_region -out certs/ca-regionX.pem
}}}
 1. '''Retour à l'AC régionale''' : le fichier `certs/ca-regionX.pem` est renvoyé à l'autorité régionale, qui le renomme `ca-cert.pem` : c'est le certificat, placé à côté de `ca-key.pem` qui est la clé privée correspondante.
 1. Un peu de protection contre les mauvaise manipulations :
 {{{
$ chmod 0400 ca-key.pem
$ chmod 0444 ca-cert.pem
}}}
 1. Initialisation de la CRL (sera forcément vite). Noter qu'on indique à `openssl` la variable d'environnement `REGION` qui doit contenir le nom de la région (typiquement `bao` ou `beom`, en minuscules), cette variable est utilisée dans des extensions ajoutées à la CRL :
 {{{
$ REGION=xxxx openssl ca -config openssl-auf.cnf -gencrl -out ca-crl.pem <-- au format PEM
$ openssl crl -inform PEM -in ca-crl.pem -outform DER -out ca-crl.der <-- et transformation en format DER (pour diffusion)
}}}

Préliminaires

Dans tout ce qui suit openssl-auf.cnf est le fichier disponible sur le dépôt git associé au projet PKI. Ce fichier sera inclus dans le paquet ca-certificates-auf, à venir.

Pour éviter d'avoir à préciser systématiquement -config openssl-auf.cnf lors de l'appel à openssl, on peut fixer la variable d'environnement OPENSSL_CONF. On peut par exemple le faire dans le script de connexion de l'utilisateur qui devra gérer l'autorité de certification :

  • # (... à ajouter à la fin de ~∕.bashrc ...)
    # pour éviter de devoir systématiquement préciser -config ... 
    export OPENSSL_CONF=/etc/ssl/openssl-auf.cnf

Création d'une AC racine

  1. Préparation
    racine$ mkdir racine; cd racine; mkdir certs newcerts ; echo 01 > serial ; echo 01 > crlnumber ; touch index.txt .rand
  2. Création d'une clef privée 2048 bits (cryptée par un mot de passe) et d'une requête de certificat :
    racine$ openssl req -config openssl-auf.cnf -newkey rsa:2048 -out request-ca-racine.pem
    Generating RSA private key, 2048 bit long modulus
    ......................+++
    e is 65537 (0x10001)
    Enter pass phrase for ca-key.pem:
    Verifying - Enter pass phrase for ca-key.pem:
    (...)
    Code ISO du pays (2 lettres) [CA]:
    Province ou region (nom complet) [Quebec]:
    Ville (nom complet) [Montreal]:
    Organisation [AUF]:
    Unite (implantation, service, programme, ...) [DRI]:
    Nom canonique (TOUJOURS TRES IMPORTANT) [AUF-AC-RACINE]:
    Adresse electronique (email) [rpv@auf.org]:
  3. Auto-signature du certificat (on est sur la racine) avec les extensions spécifiques (ca_racine):
    racine$ openssl ca -config openssl-auf.cnf -selfsign -extensions ca_racine -in request-ca-racine.pem -out ca-cert.pem
    Using configuration from openssl-auf.cnf
    Enter pass phrase for ca-key.pem:
    Check that the request matches the signature
    Signature ok
    Certificate Details:
        (...)
    Certificate is to be certified until Mar  5 10:20:49 2018 GMT (3650 days)
    Sign the certificate? [y/n]:y
    1 out of 1 certificate requests certified, commit? [y/n]y
    Write out database with 1 new entries
    Data Base Updated
  4. Un peu de protection contre les mauvaise manipulations :
    $ chmod 0400 ca-key.pem
    $ chmod 0444 ca-cert.pem
  5. Initialisation de la CRL (sera forcément vite) :
    $ openssl ca -config openssl-auf.cnf -gencrl -out ca-crl.pem             <-- au format PEM
    $ openssl crl -inform PEM -in ca-crl.pem -outform DER -out ca-crl.der   <-- et transformation en format DER (pour diffusion)

Note : pour ceux qui connaissent openssl, on pourrait faire le tout en une seule étape, sans passer par une requête de certificat. Mais en utilisant la technique requête + auto-signature, le certificat auto-signé se retrouve dans la ligne des certificats signés par l'AC (fichier index.txt). Je trouve ça plus cohérent.

Pour résumer :

  • $ export OPENSSL_CONF=/etc/ssl/openssl-auf.cnf
    $ mkdir racine; cd racine; mkdir certs newcerts ; echo 01 > serial ; echo 01 > crlnumber ; touch index.txt .rand
    $ openssl req -newkey rsa:2048 -out request-ca-racine.pem
    $ openssl ca -selfsign -extensions ca_racine -in request-ca-racine.pem -out ca-cert.pem
    $ chmod 0400 ca-key.pem ; chmod 0444 ca-cert.pem
    $ openssl ca -gencrl -out ca-crl.pem ; openssl crl -inform PEM -in ca-crl.pem -outform DER -out ca-crl.der

Vérification des résultats

Examen du certificat produit (vérification des dates et des extensions) :

  • racine$ openssl x509 -text -in ca-cert.pem -noout     # liste de toutes les données du certificat, notamment dates et extensions
    racine$ openssl x509 -purpose -in ca-cert.pem -noout  # liste des utilisations possibles du certificat

Création d'une AC régionale

Dans ce qui suit, remplacer regionX par le nom abrégé de la région.

  1. Préparation
    region$ mkdir regionX; cd regionX; mkdir certs newcerts ; echo 01 > serial ; echo 01 > crlnumber ; touch index.txt .rand
  2. Création de la clé (cryptée par un mot de passe) et établissement de la demande de certificat :
    region$ openssl req -config openssl-auf.cnf -newkey rsa:2048 -out request-ca-region.pem
    Generating RSA private key, 2048 bit long modulus
    ......................+++
    e is 65537 (0x10001)
    Enter pass phrase for ca-key.pem:
    Verifying - Enter pass phrase for ca-key.pem:
    (... exemple pour le BAO ...)
    Code ISO du pays (2 lettres) [CA]:SN
    Province ou region (nom complet) [Quebec]:.
    Ville (nom complet) [Montreal]:Dakar
    Organisation [AUF]:
    Unite (implantation, service, programme, ...) [DRI]:
    Nom canonique (TOUJOURS TRES IMPORTANT) [AUF-AC-RACINE]:AUF-AC-BAO
    Adresse electronique (email) [rpv@auf.org]:
  3. Le fichier request-ca-regionX.pem est la demande : il doit être envoyé à l'autorité de certification racine

  4. Sur l'AC racine : la demande est signée et devient un certificat certs/ca-regionX.pem qui possède les extensions x509 requises pour une autorité de certification :

    racine$ openssl ca -config openssl-auf.cnf -in request-ca-regionX.pem -extensions ca_region -out certs/ca-regionX.pem
  5. Retour à l'AC régionale : le fichier certs/ca-regionX.pem est renvoyé à l'autorité régionale, qui le renomme ca-cert.pem : c'est le certificat, placé à côté de ca-key.pem qui est la clé privée correspondante.

  6. Un peu de protection contre les mauvaise manipulations :
    $ chmod 0400 ca-key.pem
    $ chmod 0444 ca-cert.pem
  7. Initialisation de la CRL (sera forcément vite). Noter qu'on indique à openssl la variable d'environnement REGION qui doit contenir le nom de la région (typiquement bao ou beom, en minuscules), cette variable est utilisée dans des extensions ajoutées à la CRL :

    $ REGION=xxxx openssl ca -config openssl-auf.cnf -gencrl -out ca-crl.pem     <-- au format PEM
    $ openssl crl -inform PEM -in ca-crl.pem -outform DER -out ca-crl.der       <-- et transformation en format DER (pour diffusion)

Projet/PKI/Archives/PKIOpenSSL/CréationDesAutorités (dernière édition le 2008-10-14 09:26:15 par ThomasNoël)