Security/Services/PKIWithManageCA
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).
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/koji && openssl ca -gencrl -config ssl.cnf -out crl/kojica.crl