« Security/Services/PKIWithManageCA » : différence entre les versions

De TartareFR
Aller à la navigation Aller à la recherche
Ligne 352 : Ligne 352 :
Dans le crontab de root
Dans le crontab de root
  # Regen CRL list
  # Regen CRL list
  15 0 * * * cd /etc/pki/koji && openssl ca -gencrl -config ssl.cnf -out crl/kojica.crl
  15 0 * * * cd /etc/pki/httpd && openssl ca -gencrl -config ssl.cnf -out crl/httpdca.crl

Version du 1 juillet 2013 à 09:24

Définition

Une infrastructure à clés publiques (Public Key Infrastructure in english), est un ensemble de composants physiques (des ordinateurs, des équipements cryptographiques logiciels ou matériel type Hardware Security Module (HSM) ou encore des cartes à puces), de procédures humaines (vérifications, validation) et de logiciels (système et application) en vue de gérer le cycle de vie des certificats numériques ou certificats électroniques.

Une infrastructure à clés publiques délivre un ensemble de services pour le compte de ses utilisateurs.

En résumé, ces services sont les suivants :

  • enregistrement des utilisateurs (ou équipement informatique) ;
  • génération de certificats ;
  • renouvellement de certificats ;
  • révocation de certificats ;
  • publication de certificats ;
  • publication des listes de révocation (comprenant la liste des certificats révoqués) ;
  • identification et authentification des utilisateurs (administrateurs ou utilisateurs qui accèdent à la PKI) ;
  • archivage, séquestre et recouvrement des certificats (option).

Description de l'infrastructure à clés publiques

Rôle d'une infrastructure à clés publiques

Une infrastructure à clés publiques (ICP) délivre des certificats numériques. Ces certificats permettent d'effectuer des opérations cryptographiques, comme le chiffrement et la signature numérique qui offrent les garanties suivantes lors des transactions électroniques :

  • confidentialité : seul le destinataire (ou le possesseur) légitime d'un bloc de données ou d'un message pourra en avoir une vision intelligible ;
  • authentification : lors de l'envoi d'un bloc de données ou d'un message ou lors de la connexion à un système, on connaît sûrement l'identité de l'émetteur ou l'identité de l'utilisateur qui s'est connecté ;
  • intégrité : on a la garantie qu'un bloc de données ou un message expédié n'a pas été altéré, accidentellement ou intentionnellement ;
  • non-répudiation : l'auteur d'un bloc de données ou d'un message ne peut pas renier son œuvre.

Les ICP permettent l'obtention de ces garanties par l'application de processus de vérification d'identité rigoureux et par la mise en œuvre de solutions cryptographiques fiables (éventuellement évaluées), conditions indispensables à la production et à la gestion des certificats électroniques.

Composants de l'infrastructure à clés publiques

Les PKI (comme définies par l'IETF) se scindent en 4 entités distinctes :

  • L'autorité de certification (CA) qui a pour mission de signer les demandes de certificat: Certificate Signing Request (CSR) et de signer les listes de révocation (Certificate Revocation List: CRL). Cette autorité est la plus critique.
  • L'autorité d'enregistrement (RA) qui a pour mission de générer les certificats, et d'effectuer les vérifications d'usage sur l'identité de l'utilisateur final (les certificats numériques sont nominatifs et uniques pour l'ensemble de la PKI).
  • L'autorité de dépôt (Repository) qui a pour mission de stocker les certificats numériques ainsi que les listes de révocation (CRL).
  • L'entité finale (End Entity EE). L’utilisateur ou le système qui est le sujet d’un certificat (En général, le terme « entité d’extrémité » (EE) est préféré au terme « sujet » afin d’éviter la confusion avec le champ Subject).

En complément, on pourra ajouter l'autorité de séquestre, qui n'est pas définie spécifiquement par l'IETF :

  • L'autorité de séquestre (Key Escrow KE), cette entité a un rôle particulier, en effet lorsqu'on génère des certificats de chiffrement, on a l'obligation légale, en France de fournir aux autorités un moyen de déchiffrer les données chiffrées pour un utilisateur de la PKI. C'est là qu'intervient le séquestre, cette entité a pour mission de stocker de façon sécurisée les clés de chiffrement qui ont été générées par la PKI, pour pouvoir les restaurer le cas échéant.

Script manageCA

Présentation

manageCA est un script permettant de déployer et de gérer une PKI avec un certificat racine auto-signé.

Comme on peut le voir en appelant l'option -h (help), on peut spécifier au démarrage du script le nom de la PKI, son emplacement, ainsi que le fichier de configuration du script.

 -c <NAME>     Config File [/etc/manageCA.conf]
 -p <PATH>     Path for PKI [/etc/pki]
 -n <NAME>     CA Name [None]

Le fichier de configuration contient les éléments suivants:

  • Le code pays
    COUNTRYNAME="FR"
  • L'état ou la région
    STATE="PACA"
  • La ville
    CITY="Cavaillon"
  • Le nom de la société
    COMPANY="B2PWeb"
  • L'URL permettant d’interroger le répondeur OCSP
    OCSP_URL="http://didier.b2pweb.com"
  • L'emplacement par défaut des PKI
    PKI_PATH="/etc/pki"

Il peut être éditer à la main ou modifier directement depuis le script (options).

Important.png
Les options doivent être renseignés avant d'initialiser l'autorité de certification.

Utilisation

Première utilisation

A la première utilisation, on configurera les options en sélectionnant o dans le menu principal, si les options n'ont pas été définies à la main dans le fichier de configuration.

-----------------------------------------------------------------
CA Options
-----------------------------------------------------------------

   1) Country Name [FR]
   2) State Name [PACA]
   3) City Name [Cavaillon]
   4) Company Name [B2PWeb]
   5) OCSP URL [http://didier.b2pweb.com]

   s) Save Options
   p) Previous menu

 ==> Make your choice [none]: 

On pourra éditer à loisir les options de notre PKI, puis enregistrer (dans le fichier <path>/etc/manageCA.conf</path>

Utilisation générale

=====================================================================
             B2PWeb Certificate Management System
=====================================================================

   1) Create a Client/Server/OCSP certificate
   2) Create a Client Certificate for Web (PKCS#12)
   3) Renew a Certificate
   4) Revoke a Certificate
   5) List Certificates

   i) Initialize Root Certificate Authority (CA)
   d) Delete CA
   o) Show/Modify/Save CA Options
   q) Quit

   Options available before init
   p) Change PKI default path [/etc/pki]
   n) Change CA name [httpd]

 ==> Make your choice [none]: 

On initialisera d'abord notre CA en sélectionnant i dans le menu principal

-----------------------------------------------------------------
CA Initialisation
-----------------------------------------------------------------

 ==> Fully qualified Hostname [NONE]: didier.b2pweb.com

 ==> Admin email [NONE]: root@didier.b2pweb.com
Using configuration from /etc/pki/httpd/ssl.cnf

CA initialized

Press [enter] to continue

On pourra ensuite, créer(1) un certificat, créer un certificat web(2) associé à un certificat existant, renouveler(3), révoquer(4), ou simplement afficher(5) les certificats.

Mise ne place d'une PKI pour Apache

Génération de notre PKI

On lance le script en spécifiant le nom de notre PKI

manageCA -n httpd

On créera ensuite nos certificats (avec l'extension ocsp incluse):

  • un certificat server où le nom sera celui du nom d'hôte pleinement qualifiés (FQDN)
-----------------------------------------------------------------
Create a client certificate
-----------------------------------------------------------------

 ==> User name [NONE]: didier.b2pweb.com

 ==> User email [NONE]: root@didier.b2pweb.com

 ==> Select Usage Key (server, client or ocsp) [client]: server

Add OCSP Extension to Certificate ? [Y/n]: y
Using configuration from /etc/pki/httpd/ssl2.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Jul  1 08:55:21 2013 GMT
            Not After : Jul  1 08:55:21 2014 GMT
        Subject:
            countryName               = FR
            stateOrProvinceName       = PACA
            organizationName          = B2PWeb
            organizationalUnitName    = User
            commonName                = didier.b2pweb.com
            emailAddress              = root@didier.b2pweb.com
        X509v3 extensions:
            Netscape Comment: 
                OpenSSL Generated Server Certificate
            X509v3 Subject Key Identifier: 
                2D:A1:3A:DF:C1:E7:5F:BC:FC:E0:56:F4:A5:88:C8:D0:29:B0:03:C6
            X509v3 Authority Key Identifier: 
                keyid:A8:14:AF:D0:20:45:E4:50:40:EC:5A:FB:71:26:32:EA:B6:CD:A3:DE
                DirName:/C=FR/ST=PACA/L=Cavaillon/O=B2PWeb/OU=Admin/CN=didier.b2pweb.com/emailAddress=root@didier.b2pweb.com
                serial:F2:FD:41:36:AC:97:18:54

            X509v3 Issuer Alternative Name: 
                <EMPTY>

            X509v3 Basic Constraints: critical
                CA:FALSE
            X509v3 Key Usage: 
                Digital Signature, Non Repudiation, Key Encipherment
            Netscape Cert Type: 
                SSL Server
            X509v3 Extended Key Usage: 
                TLS Web Server Authentication
            Authority Information Access: 
                OCSP - URI:http://didier.b2pweb.com

Certificate is to be certified until Jul  1 08:55:21 2014 GMT (365 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
Press [enter] to continue

  • un certificat ocsp où le nom sera ocspd
-----------------------------------------------------------------
Create a client certificate
-----------------------------------------------------------------

 ==> User name [NONE]: ocspd

 ==> User email [NONE]: root@didier.b2pweb.com

 ==> Select Usage Key (server, client or ocsp) [client]: ocsp

Using configuration from /etc/pki/httpd/ssl2.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 2 (0x2)
        Validity
            Not Before: Jul  1 08:56:47 2013 GMT
            Not After : Jul  1 08:56:47 2014 GMT
        Subject:
            countryName               = FR
            stateOrProvinceName       = PACA
            organizationName          = B2PWeb
            organizationalUnitName    = Admin
            commonName                = ocspd
            emailAddress              = root@didier.b2pweb.com
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            X509v3 Key Usage: 
                Digital Signature
            X509v3 Extended Key Usage: 
                OCSP Signing
            X509v3 Issuer Alternative Name: 
                <EMPTY>

            X509v3 Subject Key Identifier: 
                5F:1D:88:93:04:8F:D9:C0:5A:71:56:48:15:82:2B:7A:94:0E:8F:C0
            X509v3 Authority Key Identifier: 
                keyid:A8:14:AF:D0:20:45:E4:50:40:EC:5A:FB:71:26:32:EA:B6:CD:A3:DE
                DirName:/C=FR/ST=PACA/L=Cavaillon/O=B2PWeb/OU=Admin/CN=didier.b2pweb.com/emailAddress=root@didier.b2pweb.com
                serial:F2:FD:41:36:AC:97:18:54

            Authority Information Access: 
                OCSP - URI:http://didier.b2pweb.com

Certificate is to be certified until Jul  1 08:56:47 2014 GMT (365 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
Press [enter] to continue
  • un certificat client où le nom sera celui de l'utilisateur.
-----------------------------------------------------------------
Create a client certificate
-----------------------------------------------------------------

 ==> User name [NONE]: didier

 ==> User email [NONE]: didier@didier.b2pweb.com

 ==> Select Usage Key (server, client or ocsp) [client]: client

Add OCSP Extension to Certificate ? [Y/n]: y
Using configuration from /etc/pki/httpd/ssl2.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 3 (0x3)
        Validity
            Not Before: Jul  1 08:57:20 2013 GMT
            Not After : Jul  1 08:57:20 2014 GMT
        Subject:
            countryName               = FR
            stateOrProvinceName       = PACA
            organizationName          = B2PWeb
            organizationalUnitName    = Admin
            commonName                = didier
            emailAddress              = didier@didier.b2pweb.com
        X509v3 extensions:
            Netscape Comment: 
                OpenSSL Generated Client Certificate
            X509v3 Subject Key Identifier: 
                C7:0B:2E:B3:B9:51:EB:84:E1:89:59:C2:5F:DE:EF:AD:79:36:12:C4
            X509v3 Authority Key Identifier: 
                keyid:A8:14:AF:D0:20:45:E4:50:40:EC:5A:FB:71:26:32:EA:B6:CD:A3:DE
                DirName:/C=FR/ST=PACA/L=Cavaillon/O=B2PWeb/OU=Admin/CN=didier.b2pweb.com/emailAddress=root@didier.b2pweb.com
                serial:F2:FD:41:36:AC:97:18:54

            X509v3 Issuer Alternative Name: 
                <EMPTY>

            X509v3 Basic Constraints: critical
                CA:FALSE
            X509v3 Key Usage: 
                Digital Signature, Non Repudiation
            Netscape Cert Type: 
                SSL Client
            X509v3 Extended Key Usage: 
                TLS Web Client Authentication
            Authority Information Access: 
                OCSP - URI:http://didier.b2pweb.com

Certificate is to be certified until Jul  1 08:57:20 2014 GMT (365 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
Press [enter] to continue
  • un certificat web associé à notre client
-----------------------------------------------------------------
Create a Client Certificate for Web
-----------------------------------------------------------------

- didier.b2pweb.com
- ocspd
- didier
 ==> User name [NONE]: didier

Enter Export Password:
Verifying - Enter Export Password:

Web certificate: /etc/pki/httpd/certs/didier_browser_cert.p12

Press [enter] to continue

Configuration d'apache

Dans le fichier ssl.conf

SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key

Installation du répondeur OCSP

Voir la page dédiée au répondeur OCSP

Tâche planifiée de régénération de la CRL

Dans le crontab de root

# Regen CRL list
15 0 * * * cd /etc/pki/httpd && openssl ca -gencrl -config ssl.cnf -out crl/httpdca.crl