Modifications entre les versions 10 et 21 (s'étendant sur 11 versions)
Version 10 à la date du 2008-02-25 20:51:57
Taille: 5055
Commentaire: pas d'accord pour -text => incite à baser la signature sur un texte modifiable => problème de sécurité => plutôt faire un openssl x509 -noout -text à réception de la demande
Version 21 à la date du 2008-03-11 20:25:04
Taille: 5536
Éditeur: ThomasNoël
Commentaire: initialisation des crl lors de la création des AC
Texte supprimé. Texte ajouté.
Ligne 1: Ligne 1:
Lectures :
 * http://www.hsc.fr/ressources/breves/ssl_configuration.html.fr
 * http://www.faqs.org/rfcs/rfc2459.html miam miam que du bonheur
Ligne 5: Ligne 2:

Fichier openssl.cnf modèle (en cours d'écriture) : [[attachment:openssl.cnf]]
Dans ce qui suit `../openssl.cnf` est le fichier disponible ici : http://git.auf.org/?p=pki;a=blob;f=openssl.cnf;hb=HEAD
Ligne 12: Ligne 8:
racine$ mkdir racine; cd racine; mkdir certs newcerts ; echo 01 > serial ; echo 01 > crlnumber ; touch index.txt .rand  racine$ mkdir racine; cd racine; mkdir certs newcerts ; echo 01 > serial ; echo 01 > crlnumber ; touch index.txt .rand
Ligne 14: Ligne 10:
 1. Création d'une clef privée 2048 bits, cryptée par un mot de passe :  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 16: Ligne 12:
racine$ openssl genrsa -out ca-key.pem -des3 2048 racine$ openssl req -config ../openssl.cnf -newkey rsa:2048 -out request-ca-racine.pem
Ligne 20: Ligne 16:
Enter pass phrase for ca-key.pem:  Enter pass phrase for ca-key.pem:
Ligne 22: Ligne 18:
}}}
 1. Création du certificat auto-signé (on est sur la racine) avec les extensions spécifiques :
 {{{
racine$ openssl req -new -x509 -key ca-key.pem -out ca-cert.pem -config ../openssl.cnf -extensions ca_racine -days $((20*365))
Enter pass phrase for ca-key.pem:
Ligne 36: Ligne 27:
 1. Auto-signature du certificat (on est sur la racine) avec les extensions spécifiques (ca_racine):
 {{{
racine$ openssl ca -config ../openssl.cnf -selfsign -extensions ca_racine -in request-ca-racine.pem -out ca-cert.pem
Using configuration from ../openssl.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
}}}
 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) :
 {{{
$ openssl ca -config ../openssl.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 openvpn, 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 joli...

'''Pour aller encore plus vite :'''
 {{{
$ export OPENSSL_CONF=/repertoire/de/openssl.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 39: Ligne 67:
Examen du certificat produit (vérification dates et extensions) : Examen du certificat produit (vérification des dates et des extensions) :
Ligne 47: Ligne 75:
Dans ce qui suit, remplacer `regionX` par le nom abrégé de la région.
Ligne 49: Ligne 79:
region$ mkdir regionX; cd regionX; mkdir certs newcerts ; echo 01 > serial ; echo 01 > crlnumber ; touch index.txt .rand  region$ openssl genrsa -out ca-key.pem -des3 2048 # création de la clé region$ mkdir regionX; cd regionX; mkdir certs newcerts ; echo 01 > serial ; echo 01 > crlnumber ; touch index.txt .rand
Ligne 52: Ligne 81:
 1. Etablissement de la demande de certificat  1. Création de la clé (cryptée par un mot de passe) et établissement de la demande de certificat :
Ligne 54: Ligne 83:
region$ openssl req -new -key ca-key.pem -out ca-request.pem -text -config ../openssl.cnf
}}}
 1. Le fichier `ca-request.pem` est la demande : il doit être envoyé à l'autorité de certification racine

'''Sur l'AC racine''', signature de la demande pour création d'un certificat `certs/ca-regionX.pem` :
 {{{
racine$ openssl ca -config ../openssl.cnf -in ca-req-BAO.pem -extensions ca_region -out certs/ca-regionX.pem
}}}

Le fichier `certs/ca-regionX.pem` est renvoyé à l'autorité régionale, qui le renomme `ca-cert.pem`.

/* vérifications ... */

= Emission de certificats =

== Certificat pour un serveur ==

Sur la machine cible, création de la clé et de la demande de certificat :
 {{{
serveur$ openssl genrsa -out serveur-key.pem -des3 1024
serveur$ openssl req -new -key serveur-key.pem -out serveur-request.pem -text -config ../openssl.cnf
Enter pass phrase for serveur-key.pem:
(...)
Code ISO du pays (2 lettres) [CA]: GN
Province ou region (nom complet) [Quebec]: .
Ville (nom complet) [Montreal]: Conakry
region$ openssl req -config ../openssl.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
Ligne 82: Ligne 95:
Nom canonique (TOUJOURS TRES IMPORTANT) [AUF-AC-RACINE]: www.gn.auf.org
Adresse electronique (email) [rpv@auf.org]: www@gn.auf.org
Nom canonique (TOUJOURS TRES IMPORTANT) [AUF-AC-RACINE]:AUF-AC-BAO
Adresse electronique (email) [rpv@auf.org]:
Ligne 85: Ligne 98:
La demande `serveur-request.pem` doit être envoyée à l'autorité régionale, qui la signera pour en faire un certificat.

'''Sur l'AC régionale''', signature de la demande et création du certificat `certs/serveur.pem` :
 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 :
Ligne 89: Ligne 101:
region$ openssl ca -config ../openssl.cnf -in serveur-request.pem -extensions server -out certs/serveur-cert.pem  racine$ openssl ca -config ../openssl.cnf -in request-ca-regionX.pem -extensions ca_region -out certs/ca-regionX.pem
Ligne 91: Ligne 103:

Le certificat `certs/serveur-cert.pem` est alors renvoyé au serveur.

Note 1 : par défaut la clé `serveur-key.pem` générée sur le serveur est cryptée. Cela peut être problématique si elle doit être utilisée par un serveur qui doit démarrer automatiquement. Dans ce cas on peut vouloir obtenir une version non cryptée de la clé : `openssl rsa -in serveur-key.pem -out serveur-clear.pem`

Note 2 : pour un serveur SSL avec plusieurs noms possibles (cas d'un serveur web avec plusieurs !VirtualHost sur une seule adresse IP), il faut le préciser lors de la demande de certificat. Pour cela, positionner la variable d'environnement `OPENSSL_ALT` et utiliser les extensions `alt_req` :
 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 :
Ligne 98: Ligne 106:
serveur$ OPENSSL_ALT="DNS:www.site1.org,DNS:www.site2.org,DNS:www.site3.org" openssl req -new -key serveur-key.pem -out serveur-request.pem -text -config ../openssl.cnf -reqexts alt_req $ chmod 0400 ca-key.pem
$ chmod 0444 ca-cert.pem
Ligne 100: Ligne 109:

== Client ==

Même procédure. La distinction a lieu au niveau de l'autorité de certification, qui choisira l'extension `client`.

= Gestion des cRLs =

= fabrication du CAPath AUF =

/* grmmbll va encore falloir réviser là */

= Transfert des données =

/* un petit blabla sur les bonnes façons (les moins pires) de transférer et valider la transmission des demandes et des certificats... ça ne sera sans doute pas moi qui rédigera ça ;) */
/* surtout que ce ne sera sans doute pas pareil suivant les régions... ;-) */
 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.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)
}}}

Dans ce qui suit ../openssl.cnf est le fichier disponible ici : http://git.auf.org/?p=pki;a=blob;f=openssl.cnf;hb=HEAD

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.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.cnf -selfsign -extensions ca_racine -in request-ca-racine.pem -out ca-cert.pem
    Using configuration from ../openssl.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.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 openvpn, 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 joli...

Pour aller encore plus vite :

  • $ export OPENSSL_CONF=/repertoire/de/openssl.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.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.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.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)