« Services/OCSP » : différence entre les versions

De TartareFR
Aller à la navigation Aller à la recherche
(Page créée avec « == Introduction == OCSP signifie Online Certificate Status Protocol. C’est un protocole définit dans la RFC 2560 qui permet de valider un Certificat numérique X509. En ... »)
 
 
(33 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
== Introduction ==
= Introduction =


OCSP signifie Online Certificate Status Protocol. C’est un protocole définit dans la RFC 2560 qui permet de valider un Certificat numérique X509.
Online Certificate Status Protocol(OCSP ou en français protocole de vérification en ligne de certificat) est un [[Protocole de communication|protocole Internet]] utilisé pour valider un [[certificat numérique]]  [[X.509]]. OCSP est [[standard|standardisé]] par l'[[Internet Engineering Task Force|IETF]] dans la RFC 2560.


En clair, cela vous permet d’offrir à vos “clients, amis, potes….” une fonction de vérification en ligne de la validité d’une certificat.
Ce protocole est une alternative réglant certains des problèmes posés par les [[liste de révocation de certificats]] (CRL) dans une [[infrastructure à clés publiques]] (PKI). Les messages OCSP sont codés en [[ASN.1]] et peuvent être transportés par différents [[Couche application|protocoles applicatifs]] ([[Simple Mail Transfer Protocol|SMTP]], [[Lightweight Directory Access Protocol|LDAP]], [[Hypertext Transfer Protocol|HTTP]], etc.). Les communications OCSP étant de la forme « requête/réponse », les [[serveur informatique|serveurs]] OCSP sont appelés répondeurs OCSP.  


Petit exemple (source Wikipédia) :
== Centralisation de la validation des certificats ==


# Alice et Bob sont des clients d’Ivan, l’autorité de certification (AC). Ils possèdent le certificat de clé publique d’Ivan.
La [[validation des certificats]] est une tâche plus complexe qu'il n'y paraît. Elle est traditionnellement effectuée par le [[client (informatique)|client]] de la PKI. Une grande confiance est ainsi accordée au client pour ce traitement critique. Or une grande partie des clients PKI effectuent leur validation de manière encore incomplète ou imparfaite (en [[2006]]). Par exemple, la non-automatisation de la récupération des CRL des [[navigateur web|navigateurs web]] pose un problème quant à la mise à jour des informations.
# Alice et Bob possèdent chacun un certificat de clé publique émis par Ivan.
 
# Alice veut effectuer une transaction avec Bob. Elle lui envoie donc son certificat contenant sa clé publique.
OCSP permet de centraliser cette tâche au sein d'une PKI. Afin de valider un certificat, le client n'a plus à communiquer qu'avec une seule entité : le répondeur OCSP. On peut parler aussi d'autorité de validation (VA pour ''Validation Authorithy'').
# Bob veut s’assurer que le certificat d’Alice n’a pas été révoqué. Il crée une requête OCSP contenant l’empreinte du certificat d’Alice et l’envoi à Ivan.
 
# Le répondeur OCSP d’Ivan vérifie le statut du certificat d’Alice dans la base de données de la CA.
== Avantage par rapport aux CRL ==
# Le répondeur OCSP confirme la validité du certificat d’Alice en envoyant une réponse OCSP positive signée à Bob.
 
Plusieurs raisons peuvent amener à préférer le protocole OCSP aux traditionnelles CRL.
 
* OCSP fournit des informations sur le statut du certificat plus à jour.
* Avec OCSP, le client n'a plus besoin de récupérer lui-même la CRL. Vue la taille parfois importante de cette CRL, cela allège le trafic réseau.
* Le client n'a plus à traiter lui-même la CRL. Cela permet l'économie d'un traitement relativement complexe.
* Le répondeur OCSP permet de proposer des mécanismes de facturation au vendeur, et non pas à l'acheteur
* Les CRL peuvent être comparées à une "liste de mauvais clients" d'une banque. Cela constitue une fuite d'information non souhaitable.
 
== Autres avantages ==
 
OCSP présente d'autres avantages en termes de déploiement des clients et d'architecture réseau.
 
* C'est le répondeur OCSP qui récupère les différents certificats constitutifs d'une [[chaîne de certificats]] et les CRL. Cela simplifie les communications, car le client ne dispose pas forcément de la connectivité nécessaire à leur récupération (filtrage par un [[pare-feu (informatique)|pare-feu]], etc.).
* Le répondeur OCSP valide la remontée du chemin de certification. Le client fait donc l'économie de cet autre traitement consommateur en ressources.
* Grâce au chaînage des répondeurs OCSP, le client ne communique qu'avec un seul répondeur, digne de confiance. Cela épargne au client des communications plus complexes.
 
== Exemple d'utilisation ==
 
# Alice et Bob sont des clients d'Ivan, l'[[autorité de certification]] (AC). Ils possèdent le certificat de clé publique d'Ivan.
# Alice et Bob possèdent chacun un certificat de clé publique émis par Ivan.  
# Alice veut effectuer une transaction avec Bob. Elle lui envoie donc son certificat contenant sa [[Clé de chiffrement|clé publique]].
# Bob veut s'assurer que le certificat d'Alice n'a pas été révoqué. Il crée une ''requête OCSP'' contenant l'[[empreinte]] du certificat d'Alice et l'envoie à Ivan.
# Le répondeur OCSP d'Ivan vérifie le statut du certificat d'Alice dans la base de données de la CA.
# Le répondeur OCSP confirme la validité du certificat d'Alice en envoyant une ''réponse OCSP'' positive [[signature numérique|signée]] à Bob.
# Bob vérifie la signature cryptographique de la réponse.
# Bob vérifie la signature cryptographique de la réponse.
# Bob effectue sa transaction avec Alice.
# Bob effectue sa transaction avec Alice.


Je vous invite donc fortement, avant de continuer, à lire [http://fr.wikipedia.org/wiki/OCSP cet article explicatif].
== Concept de fonctionnement ==
 
Ce schéma illustre comment la requête OCSP est formée et envoyée vers le serveur OCSP:
 
[[Image:Ocsp-request.png|500px]]


Il existe un projet libre de répondeur OCSP , qui est inclus dans l’excellentissime projet OpenCA :
Ce schéma illustre comment la réponse OCSP est formée et envoyée vers le client OCSP.


http://www.openca.org/projects/ocspd/
La réponse peut être: '''{{color|green|GOOD}} - {{color|red|REVOKED}} - {{color|orange|UNKNOWN}}'''


Commencons donc par télécharger les sources ICI (dernière version disponible, la 1.5.1-rc1).
[[Image:Ocsp-responce.png|500px]]


== Installation ==
== Liens externes ==


L’installation est des plus basiques :
* [http://www.axway.fr/produits-solutions/email-identity-security/identity-security/va-suite Société spécialisée dans la validation / Axway]
* [http://www.corestreet.com/ Société spécialisée dans la validation / Corestreet]
* [http://www.mozilla-europe.org/fr/firefox/ Navigateur compatible OCSP: Mozilla Firefox]
* [http://www.e-xpertsolutions.com/images/pdf/Cotte.pdf Mise en œuvre d'un client OCSP pour Apache / HES Geneva & e-Xpert Solutions]
* [http://hosteddocs.ittoolbox.com/TB100104.pdf Implementing Online Certificate Status Protocol / Tirthankar Barari]
 
== Alternatif à OCSP: le protocole SCVP ==
 
* [http://www.ietf.org/html.charters/pkix-charter.html Internet-Drafts]
* [http://datatracker.ietf.org/doc/rfc5055/  Spécifications du standard]
 
= Installation =
 
Il existe un projet libre de répondeur OCSP , qui est inclus dans l’excellentissime projet OpenCA : http://www.openca.org/projects/ocspd/
 
L’installation est des plus basiques, un groupe et un user dédié seront créés :
  # yum install ocspd
  # yum install ocspd


Un groupe et un user dédié est créé et on affecte les droits :
Avec votre système de PKI préféré, générer un certificat publique et une clé privé pour votre serveur OCSP.
 
Avec votre système de PKI préférée, générer un certificat publique et un certificat privé pour votre serveur OCSP. (attention au hostname, dans mon cas, ocsp.guiguiabloc.fr)


Copier les, ainsi que votre certificat CA, dans <path>/etc/ocspd/certs/</path>
Liste des fichiers nécessaires au daemon :
* Le certificat (<path>/etc/pki/httpd/certs/ocspd.crt</path>)et la clé associée (<path>/etc/pki/httpd/certs/ocspd.key</path>) pour le daemon OCSP
* Le certificat Racine (<path>/etc/pki/httpd/httpd_ca.crt</path>)
* La liste CRL (<path>/etc/pki/httpd/crl/crl.pem</path>)


Il ne reste qu’a configurer votre répondeur :
Il ne reste qu’a configurer votre répondeur :


Fichier <path>/etc/ocspd/ocspd.conf</path>
Fichier <path>/etc/ocspd/ocspd.conf</path>
<pre>
<pre>
[ ocspd ]
[ ocspd ]
default_ocspd  = OCSPD_default        # The default ocspd section
default_ocspd  = OCSPD_default        # The default ocspd section
 
####################################################################
[ OCSPD_default ]
[ OCSPD_default ]
dir              = /etc/ocspd   # Where everything is kept
dir              = /opt/ocspd/etc/ocspd         # Where everything is kept
db              = $dir/index.txt              # database index file.
md              = sha1
md              = sha1
ocspd_certificate = /etc/pki/httpd/certs/ocspd.crt # The OCSP server cert
ca_certificate    = $dir/certs/CA_Guiguiabloc-cert.pem      # The CA certificate
ocspd_key        = /etc/pki/httpd/certs/ocspd.key # The OCSP server key
ocspd_certificate = $dir/certs/ocsp-cert.crt   # The OCSP server cert
pidfile          = /var/run/ocspd.pid              # Main process pid
ocspd_key        = $dir/certs/ocsp-key.pem  # The OCSP server key
pidfile          = $dir/ocspd.pid              # Main process pid
user                    = ocspd
user                    = ocspd
group                  = ocspd
group                  = ocspd
bind                    = *
bind                    = 192.168.1.1 (l'ip sur laquelle écouter ou * pour toutes les interfaces)
port                    = 2560
port                    = 2560
max_req_size            = 8192
threads_num            = 10
max_client_num          = 3
max_timeout_secs        = 5
crl_auto_reload = 3600
crl_auto_reload = 3600
crl_reload_expired = yes
crl_check_validity = 600
response        = ocsp_response
response        = ocsp_response
dbms            = dbms_file
....
engine = off
 
[ ocsp_response ]
[ ocsp_response ]
dir                    = /opt/ocspd/etc/ocspd
dir                    = /etc/ocspd
ocsp_add_response_certs        =
ocsp_add_response_keyid = yes
ocsp_add_response_keyid = yes
next_update_days        = 0
next_update_mins        = 5
[ dbms_file ]
0.ca = @first_ca
[ first_ca ]
crl_url = file:///etc/pki/httpd/crl/crl.pem
ca_url  = file:///etc/pki/httpd/httpd_ca.crt
[ second_ca ]
crl_url = file:///etc/ocspd/crls/crl_02.pem
ca_url  = file:///etc/ocspd/certs/2nd_cacert.pem
</pre>
Je vous laisse consulter le fichier conf en entier pour en comprendre le contenu et le modifier suivant vos besoins, mais la configuration ci-dessous, très simple, fonctionne pour un premier test.
= Test =
== Génération des certificats ==
Vous pouvez inclure directement dans votre certificat l’adresse de votre répondeur OCSP en ajoutant des extensions à votre openssl.cnf :
<pre>
[OCSP]
basicConstraints        = CA:FALSE
keyUsage                = digitalSignature
extendedKeyUsage        = OCSPSigning
issuerAltName          = issuer:copy
subjectKeyIdentifier    = hash
authorityKeyIdentifier  = keyid:always,issuer:always
authorityInfoAccess    = OCSP;URI:http://didier.domicile.org/
   
   
...
[OCSP_SERVER]
nsComment                      = "OpenSSL Generated Server Certificate"
subjectKeyIdentifier            = hash
authorityKeyIdentifier          = keyid,issuer:always
issuerAltName                  = issuer:copy
basicConstraints                = critical,CA:FALSE
keyUsage                        = digitalSignature, nonRepudiation, keyEncipherment
nsCertType                      = server
extendedKeyUsage                = serverAuth
authorityInfoAccess            = OCSP;URI:http://didier.domicile.org/
   
   
[ first_ca ]
[OCSP_CLIENT]
nsComment                      = "OpenSSL Generated Client Certificate"
crl_url = file:////opt/ocspd/etc/ocspd/crls/crl-Guiguiabloc.pem (la liste de révocation de certificat)
subjectKeyIdentifier            = hash
ca_url  = file:////opt/ocspd/etc/ocspd/certs/CA_Guiguiabloc-cert.pem
authorityKeyIdentifier          = keyid,issuer:always
issuerAltName                  = issuer:copy
basicConstraints                = critical,CA:FALSE
keyUsage                        = digitalSignature, nonRepudiation
nsCertType                      = client
extendedKeyUsage                = clientAuth
authorityInfoAccess            = OCSP;URI:http://didier.domicile.org/
</pre>
</pre>


Je vous laisse consulter le fichier conf en entier pour en comprendre le contenu et le modifier suivant vos besoins, mais la configuration ci-dessous, très simple, fonctionne pour un premier test.
L'autorité de certification, ainsi que tous les certificats vont être générés par le script [[Scripts/manageCA| manageCA]]. Tous ont une extension OCSP.


Ne reste qu’a lancer le démon et vérifier le syslog :
Liste des certificats :
* didier.domicile.org ( pour Apache )
* ocspd
* didier ( utilisateur )


== Test ==
== Lancement du répondeur ==


On lance le démon
  # ocspd -c /etc/ocspd/ocspd.conf -v &
  # ocspd -c /etc/ocspd/ocspd.conf -v &


Et on vérifie le fichier <path>/var/log/messages</path> :
<pre>
<pre>
Jan  5 14:56:15 pki ocspd[22154]: OpenCA OCSPD v1.5.1 - starting.
Jan  6 11:17:41 didier ocspd[17173]: OpenCA OCSPD v1.5.1 - starting.
Jan  5 14:56:15 pki ocspd[22154]: reading certificate file (/opt/ocspd/etc/ocspd/certs/ocsp-cer
Jan  6 11:17:41 didier ocspd[17173]: Initialising HSM [(null)]
t.crt).
Jan  6 11:17:41 didier ocspd[17173]: Engine Initialisation Complete ["(null)"]
Jan  5 14:56:15 pki ocspd[22154]: Reading Private Key file /opt/ocspd/etc/ocspd/private/ocsp-ke
Jan  6 11:17:41 didier ocspd[17173]: reading certificate file (/etc/pki/httpd/certs/ocspd.crt).
y.pem
Jan  6 11:17:41 didier ocspd[17173]: Reading Private Key file /etc/pki/httpd/certs/ocspd.key
Jan  5 14:56:15 pki ocspd[22154]: reading CA certificate file.
Jan  6 11:17:41 didier ocspd[17173]: variable lookup failed for OCSPD_default::chroot_dir
Jan  5 14:56:15 pki ocspd[22154]: OCSP Daemon setup completed
Jan  6 11:17:41 didier ocspd[17173]: Auto CRL reload every 3600 secs
Jan  5 14:56:15 pki ocspd[22154]: variable lookup failed for OCSPD_default::chroot_dir
Jan  6 11:17:41 didier ocspd[17173]: variable lookup failed for OCSPD_default::crl_reload_expired
Jan  5 14:56:15 pki ocspd[22154]: Auto CRL reload every 3600 secs
Jan  6 11:17:41 didier ocspd[17173]: Number of CAs in configuration is 1
Jan  5 14:56:15 pki ocspd[22154]: Reload on expired CRLs enabled
Jan  6 11:17:41 didier ocspd[17173]: INFO::FORMAT::CA Cert [/etc/pki/httpd/httpd_ca.crt] is PEM formatted
Jan  5 14:56:15 pki ocspd[22154]: Number of CAs in configuration is 1
Jan  6 11:17:41 didier ocspd[17173]: CA CERT for first_ca loaded successfully.
Jan  5 14:56:15 pki ocspd[22154]: INFO::FORMAT::CA Cert [//opt/ocspd/etc/ocspd/certs/CA_Guiguiabloc-cert.pem] is PEM formatted
Jan  6 11:17:41 didier ocspd[17173]: CA List Entry added (CA list num 0)
Jan  5 14:56:15 pki ocspd[22154]: CA CERT for first_ca loaded successfully.
Jan  6 11:17:41 didier ocspd[17173]: INFO::CRL RELOAD::File Protocol
Jan  5 14:56:15 pki ocspd[22154]: CA List Entry added (CA list num 0)
Jan  6 11:17:41 didier ocspd[17173]: INFO::FILE::CRL is in PEM format
Jan  5 14:56:15 pki ocspd[22154]: INFO::CRL RELOAD::File Protocol
Jan  6 11:17:41 didier ocspd[17173]: CRL loaded [ first_ca ]
Jan  5 14:56:15 pki ocspd[22154]: INFO::FILE::CRL is in PEM format
Jan  6 11:17:41 didier ocspd[17173]: CRL and CA cert [0:1] check ok
Jan  5 14:56:15 pki ocspd[22154]: CRL loaded [ first_ca ]
Jan  6 11:17:41 didier ocspd[17173]: CRL matching CA cert ok [ 1 ]
Jan  5 14:56:15 pki ocspd[22154]: CRL and CA cert [0:1] check ok
Jan  6 11:17:41 didier ocspd[17173]: INFO::CRL::Verify 1 [OK=1]
Jan  5 14:56:15 pki ocspd[22154]: CRL matching CA cert ok [ 1 ]
Jan  6 11:17:41 didier ocspd[17173]: INFO::CRL is Valid
Jan  5 14:56:15 pki ocspd[22154]: INFO::CRL::Verify 1 [OK=1]
Jan  6 11:17:41 didier ocspd[17173]: INFO::CRL::-1 Entries [ first_ca ]
Jan  5 14:56:15 pki ocspd[22154]: INFO::CRL is Valid
Jan  6 11:17:41 didier ocspd[17173]: No Entries for CRL (@first_ca)
Jan  5 14:56:15 pki ocspd[22154]: INFO::CRL::16 Entries [ first_ca ]
Jan  6 11:17:41 didier ocspd[17173]: CRL loaded successfully [first_ca]
Jan  5 14:56:15 pki ocspd[22154]: CRL loaded successfully [first_ca]
Jan  6 11:17:41 didier ocspd[17173]: CRL validity check every 600 sec.
Jan  5 14:56:15 pki ocspd[22154]: variable lookup failed for ocsp_response::ocsp_add_response_c
Jan  6 11:17:41 didier ocspd[17173]: Configuration loaded and parsed
erts
Jan  6 11:17:41 didier ocspd[17173]: INFO::Local Address 0.0.0.0 [2560]
Jan  5 14:56:15 pki ocspd[22154]: variable lookup failed for OCSPD_default::crl_check_validity
Jan  6 11:17:41 didier ocspd[17173]: INFO::OPENCA_SRV_INFO_TREAD::new thread created
Jan  5 14:56:15 pki ocspd[22154]: Configuration loaded and parsed
Jan  5 14:56:15 pki ocspd[22154]: INFO::Local Address 192.168.1.1 [2560]
Jan  5 14:56:15 pki ocspd[22154]: INFO::OPENCA_SRV_INFO_TREAD::new thread created
</pre>
</pre>


Bien évidemment, vous fournissez au répondeur OCSP, la Liste de révocation des certificats (fichier CRL) et la database (index.txt).
== Validation d'un certificat ==
Si vous utilisez easyCA, ils sont générés sous $DIR et $DIR/crl par défaut (voir votre fichier openssl.cnf).
Et maintenant, on interroge le serveur OCSP pour savoir si le Certificat est encore valable :
 
Et maintenant, interrogeons le serveur OCSP pour savoir si mon Certificat (ici webmail.guiguiabloc.fr) est encore valable :
<pre>
<pre>
pki:# openssl ocsp -issuer CA_Guiguiabloc-cert.pem -CAfile CA_Guiguiabloc-cert.pem -cert webmail.guiguiabloc.fr.crt -url http://192.168.1.1:2560 -text
# openssl ocsp -issuer /etc/pki/httpd/httpd_ca.crt -CAfile /etc/pki/httpd/httpd_ca.crt \
  -cert /etc/pki/httpd/certs/didier.crt -url http://didier:2560 -text
OCSP Request Data:
OCSP Request Data:
     Version: 1 (0x0)
     Version: 1 (0x0)
Ligne 128 : Ligne 217 :
         Certificate ID:
         Certificate ID:
           Hash Algorithm: sha1
           Hash Algorithm: sha1
           Issuer Name Hash: 4A694097441CA470D697E82AF367D1F196B59680
           Issuer Name Hash: 3EE63093199C726BFB10E932EEB28389302BA577
           Issuer Key Hash: 6490C296FF639D9B75A899E2DB29DC7DA42EE38D
           Issuer Key Hash: 8DF2B393AADD2ED6A4F9D0DD76646A4A4D38EF8B
           Serial Number: 13
           Serial Number: 03
     Request Extensions:
     Request Extensions:
         OCSP Nonce:
         OCSP Nonce:  
             0410DDDA8DFEF460BA0C13ACCEBE7CDFDCB9
             0410653FE2B3B8484619786CC7FAA025E4AD
OCSP Response Data:
OCSP Response Data:
     OCSP Response Status: successful (0x0)
     OCSP Response Status: successful (0x0)
     Response Type: Basic OCSP Response
     Response Type: Basic OCSP Response
     Version: 1 (0x0)
     Version: 1 (0x0)
     Responder Id: C = FR, ST = Bretagne, O = Guiguiabloc, OU = Guiguiabloc, CN = ocsp.guiguiabloc.fr, emailAddress = pki@guiguiabloc.fr
     Responder Id: C = FR, ST = Languedoc-Roussillon, O = Home, OU = Admin, CN = ocspd, emailAddress = root@localhost
     Produced At: Jan  5 14:21:40 2009 GMT
     Produced At: Jan  6 10:19:24 2013 GMT
     Responses:
     Responses:
     Certificate ID:
     Certificate ID:
       Hash Algorithm: sha1
       Hash Algorithm: sha1
       Issuer Name Hash: 4A694097441CA470D697E82AF367D1F196B59680
       Issuer Name Hash: 3EE63093199C726BFB10E932EEB28389302BA577
       Issuer Key Hash: 6490C296FF639D9B75A899E2DB29DC7DA42EE38D
       Issuer Key Hash: 8DF2B393AADD2ED6A4F9D0DD76646A4A4D38EF8B
       Serial Number: 13
       Serial Number: 03
     Cert Status: good
     Cert Status: good
     This Update: Jan  5 14:16:51 2009 GMT
     This Update: Jan  6 10:09:23 2013 GMT
     Next Update: Jan  5 14:26:40 2009 GMT
     Next Update: Jan  6 10:24:24 2013 GMT
 
     Response Extensions:
     Response Extensions:
         OCSP Nonce:
         OCSP Nonce:  
             0410DDDA8DFEF460BA0C13ACCEBE7CDFDCB9
             0410653FE2B3B8484619786CC7FAA025E4AD
    Signature Algorithm: sha1WithRSAEncryption
        99:52:10:38:18:48:13:4e:56:2d:e9:b3:3f:d7:ab:04:75:05:
        0c:88:ec:e7:0f:b5:37:a3:f3:6d:94:c3:6b:51:55:d9:15:09:
        cb:a7:0c:3f:6e:4e:f7:13:21:f8:c4:41:5b:6d:b7:c9:22:5e:
        c8:89:6c:cc:e1:e1:fc:b0:58:2d:25:ae:4e:0d:e9:24:a0:fd:
        72:43:e0:e9:65:9a:d4:98:49:c1:30:18:3b:fc:f8:eb:c7:60:
        96:66:bd:62:6e:98:f0:6e:ca:98:cc:ef:2e:43:8d:c6:42:f3:
        09:e2:ae:4c:92:92:cb:39:bf:de:db:79:a3:8f:9a:a3:c7:89:
        82:c7:d9:2d:a3:3d:43:ec:10:b8:0f:2e:63:6e:9d:bb:43:3b:
        a3:03:2f:00:52:ee:e5:67:4b:85:40:7a:0d:a3:6d:a2:bc:3a:
        ce:3a:4e:f4:04:d0:e4:74:f3:cd:59:ef:08:72:9f:85:aa:8a:
        3c:67:cb:d0:99:67:8d:25:74:a6:69:6a:4a:6f:17:27:6e:31:
        59:ff:3d:4e:93:df:42:f2:45:62:78:2b:4d:5b:6b:b9:a1:0a:
        b9:b3:6f:60:bb:90:d8:45:a9:18:c3:95:3c:1a:56:57:80:1a:
        e9:4f:a0:c3:57:76:a5:7e:5f:bd:23:c5:9c:43:1f:d3:85:57:
        9b:f6:09:65
Certificate:
Certificate:
     Data:
     Data:
         Version: 3 (0x2)
         Version: 3 (0x2)
         Serial Number: 16 (0x10)
         Serial Number: 2 (0x2)
         Signature Algorithm: md5WithRSAEncryption
         Signature Algorithm: md5WithRSAEncryption
         Issuer: C=FR, ST=Bretagne, L=Brest, O=Guiguiabloc, OU=Guiguiabloc, CN=Guiguiabloc CA Authority/emailAddress=pki@guiguiabloc.fr
         Issuer: C=FR, ST=Languedoc-Roussillon, L=Beaucaire, O=Home, OU=Admin, CN=didier.domicile.org/emailAddress=root@localhost
         Validity
         Validity
             Not Before: Jul 18 08:08:25 2008 GMT
             Not Before: Jan  6 10:10:02 2013 GMT
             Not After : Jul 17 08:08:25 2013 GMT
             Not After : Jan  6 10:10:02 2014 GMT
         Subject: C=FR, ST=Bretagne, O=Guiguiabloc, OU=Guiguiabloc, CN=ocsp.guiguiabloc.fr/emailAddress=pki@guiguiabloc.fr
         Subject: C=FR, ST=Languedoc-Roussillon, O=Home, OU=Admin, CN=ocspd/emailAddress=root@localhost
         Subject Public Key Info:
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
             Public Key Algorithm: rsaEncryption
            RSA Public Key: (1024 bit)
                Public-Key: (2048 bit)
                 Modulus (1024 bit):
                 Modulus:
                     00:bb:c8:c3:c0:78:26:88:8c:45:6c:2a:1b:88:fd:
                     00:af:8b:01:af:f8:79:ab:98:ab:7f:4b:c2:e0:8c:
                     71:57:c0:bb:23:e1:1e:40:86:d2:94:af:fc:e7:74:
                    f3:85:74:9f:80:3c:02:17:ce:f7:c2:fd:df:c1:3f:
                     41:3d:41:39:ac:a6:51:dc:4d:e8:80:53:a3:73:5d:
                    79:ff:3a:e2:dc:3c:06:ce:31:a8:27:ab:09:8a:b0:
                     74:0e:1f:04:b1:78:dc:ad:45:65:5b:4f:0e:b2:92:
                    ed:bb:a0:1d:c0:d5:cd:14:9a:6d:b6:ab:47:c0:5f:
                     3c:bc:64:bb:3e:70:2c:ca:b8:ea:dc:fc:33:31:01:
                     ce:57:78:78:dc:a9:2c:77:0a:20:e0:6b:4e:83:f6:
                     d2:05:b2:e2:60:0c:d2:a6:c1:e9:83:b0:ca:d9:42:
                     5e:b8:7b:36:02:e9:ba:e9:5b:fa:f3:99:6f:f5:4d:
                     98:44:8b:c3:df:63:dc:17:02:51:b6:f2:da:0e:c6:
                    b0:f2:a6:65:90:ef:81:a8:2f:80:97:44:68:5c:7f:
                     81:fa:78:1c:d2:ca:56:52:f3
                     c0:d4:91:ea:02:41:1f:d1:dc:3a:e1:8a:94:4a:23:
                    ff:b9:bc:67:cd:83:6e:f8:ba:d8:9a:3d:7c:94:6a:
                    33:78:b3:7c:c1:46:c7:61:6c:79:45:11:f1:03:2c:
                    58:d4:fc:ba:a3:61:5d:be:0f:65:77:79:84:8d:e3:
                     07:8d:4b:73:61:db:9b:02:aa:3d:16:8d:62:09:a5:
                     4e:be:3e:77:d9:04:24:93:6a:6c:79:70:b2:75:b7:
                    ac:97:08:0c:42:06:a0:76:28:03:d2:03:08:24:82:
                    6d:dc:48:61:a3:68:7a:c3:1a:1d:05:46:54:56:f1:
                     99:dd:3e:39:b1:7b:04:4a:53:42:27:a6:38:06:b2:
                     f1:fc:0f:04:72:5d:61:b3:56:97:b6:61:ca:29:e3:
                    47:2b
                 Exponent: 65537 (0x10001)
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
         X509v3 extensions:
             X509v3 Basic Constraints:
             X509v3 Basic Constraints:  
                 CA:FALSE
                 CA:FALSE
             X509v3 Key Usage:
             X509v3 Key Usage:  
                 Digital Signature
                 Digital Signature
             X509v3 Extended Key Usage:
             X509v3 Extended Key Usage:  
                 OCSP Signing
                 OCSP Signing
             X509v3 Issuer Alternative Name:
             X509v3 Issuer Alternative Name:  
                <EMPTY>
             X509v3 Subject Key Identifier:
 
                 1A:18:4A:7A:BC:DB:3E:CD:60:87:0B:A3:11:4D:4F:E6:CE:19:17:27
             X509v3 Subject Key Identifier:  
             X509v3 Authority Key Identifier:
                 75:DB:73:BF:04:1B:00:7C:1A:CB:33:35:D4:71:B8:1C:CF:29:18:F4
                 keyid:64:90:C2:96:FF:63:9D:9B:75:A8:99:E2:DB:29:DC:7D:A4:2E:E3:8D
             X509v3 Authority Key Identifier:  
                 DirName:/C=FR/ST=Bretagne/L=Brest/O=GuiGuiabloc/OU=Guiguiabloc/CN=Guiguiabloc CA Authority/emailAddress=pki@guiguiabloc.fr
                 keyid:8D:F2:B3:93:AA:DD:2E:D6:A4:F9:D0:DD:76:64:6A:4A:4D:38:EF:8B
                 serial:B9:0E:D5:3E:0F:DA:79:FF
                 DirName:/C=FR/ST=Languedoc-Roussillon/L=Beaucaire/O=Home/OU=Admin/CN=didier.domicile.org/emailAddress=root@localhost
                 serial:B0:E6:8E:F9:60:1E:5B:4D
             Authority Information Access:
 
                 OCSP - URI:http://ocsp.guiguiabloc.fr/
             Authority Information Access:  
                 OCSP - URI:http://didier.domicile.org/
 
     Signature Algorithm: md5WithRSAEncryption
     Signature Algorithm: md5WithRSAEncryption
         0c:3a:3f:79:7e:e4:21:be:1b:d1:d4:ef:8f:1d:33:af:f2:88:
         1b:45:a5:b5:ad:d7:d9:8f:53:7d:6e:e1:04:c9:8e:9b:4c:7c:
         eb:0f:40:cb:24:50:9b:47:cc:61:e2:a9:a3:6e:c5:4f:2a:7c:
        21:ff:04:2d:f9:2b:60:ca:b7:6a:41:f9:be:cf:f6:6d:6f:3e:
         b5:03:f1:a1:b8:b7:23:c7:e1:00:61:3a:c0:7c:8f:c6:2f:c7:
        72:07:3b:50:8a:b0:6b:92:25:01:a4:9d:c9:86:c4:f5:08:43:
         6a:c9:98:ad:af:ff:28:db:c6:1f:17:d3:54:f3:d7:1a:96:51:
         bd:49:7e:d2:62:53:48:ae:19:c3:92:c9:08:98:2b:00:7b:ff:
         19:04:6c:f8:92:74:70:de:54:c1:55:d3:9d:27:99:8b:09:be:
        c5:31:62:4d:22:f2:4f:5f:a6:1b:d0:9d:28:cb:e2:03:ca:57:
         98:27:e6:5b:1e:14:a2:a9:d2:cb:a2:d7:52:8a:e1:ac:9b:a7:
         14:1b:96:74:df:24:78:1a:8d:a4:b1:aa:9c:d0:8f:84:5d:f6:
         52:a2:5b:90:dc:cc:8f:33:4b:7a:99:60:4d:5e:b9:e6:71:ed:
         86:67:92:f0:f7:cd:63:6a:a6:41:ac:51:fb:3c:51:3c:a9:0d:
         be:92
        d7:00:9a:8e:bb:af:1d:a0:d9:7f:2d:d6:60:40:ae:4a:e7:64:
        09:bc:71:d8:d3:59:2e:df:43:d3:19:5d:e3:21:b3:2c:f3:d4:
        73:b0:b8:5c:c2:c3:83:26:4e:9e:96:a3:13:55:1c:38:a4:65:
         c3:b3:2d:e7:92:65:a2:4d:b9:e6:89:41:39:8f:e8:fd:db:6c:
        05:43:31:be:9f:c4:5a:e5:70:6a:91:81:2b:bf:62:cd:97:54:
         e1:45:15:fc:1f:56:3d:08:c4:7a:e7:8b:2a:16:09:9c:3c:56:
         12:ac:e4:bf:ea:41:aa:35:33:f8:ac:52:3a:3d:fc:34:b8:4c:
         c2:7b:8d:2b
-----BEGIN CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIID/DCCA2WgAwIBAgIBEDANBgkqhkiG9w0BAQQFADCBnDELMAkGA1UEBhMCRlIx
MIIE/DCCA+SgAwIBAgIBAjANBgkqhkiG9w0BAQQFADCBnDELMAkGA1UEBhMCRlIx
ETAPBgNVBAgTCEJyZXRhZ25lMQ4wDAYDVQQHEwVCcmVzdDEVMBMGA1UEChMMU3R5
HTAbBgNVBAgTFExhbmd1ZWRvYy1Sb3Vzc2lsbG9uMRIwEAYDVQQHEwlCZWF1Y2Fp
eCBOZXR3b3JrMRAwDgYDVQQLEwdTdHl4bmV0MSIwIAYDVQQDExlTdHl4IE5ldHdv
cmUxDTALBgNVBAoTBEhvbWUxDjAMBgNVBAsTBUFkbWluMRwwGgYDVQQDExNkaWRp
cmsgQ0EgQXV0aG9yaXR5MR0wGwYJKoZIhvcNAQkBFg5wa2lAc3R5eG5ldC5mcjAe
ZXIuZG9taWNpbGUub3JnMR0wGwYJKoZIhvcNAQkBFg5yb290QGxvY2FsaG9zdDAe
Fw0wODA3MTgwODA4MjVaFw0xMzA3MTcwODA4MjVaMIGCMQswCQYDVQQGEwJGUjER
Fw0xMzAxMDYxMDEwMDJaFw0xNDAxMDYxMDEwMDJaMHoxCzAJBgNVBAYTAkZSMR0w
MA8GA1UECBMIQnJldGFnbmUxFTATBgNVBAoTDFN0eXggTmV0d29yazEQMA4GA1UE
GwYDVQQIExRMYW5ndWVkb2MtUm91c3NpbGxvbjENMAsGA1UEChMESG9tZTEOMAwG
CxMHU3R5eG5ldDEYMBYGA1UEAxMPb2NzcC5zdHl4bmV0LmZyMR0wGwYJKoZIhvcN
A1UECxMFQWRtaW4xDjAMBgNVBAMTBW9jc3BkMR0wGwYJKoZIhvcNAQkBFg5yb290
AQkBFg5wa2lAc3R5eG5ldC5mcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
QGxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK+LAa/4
psHpg7DK2UKYRIvD32PcFwJRtvLaDsaB+ngc0spWUvMCAwEAAaOCAWQwggFgMAkG
eauYq39LwuCM84V0n4A8AhfO98L938E/ef864tw8Bs4xqCerCYqw7bugHcDVzRSa
A1UdEwQCMAAwCwYDVR0PBAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMJMAkGA1Ud
bbarR8Bfzld4eNypLHcKIOBrToP2Xrh7NgLpuulb+vOZb/VNsPKmZZDvgagvgJdE
EgQCMAAwHQYDVR0OBBYEFBoYSnq82z7NYIcLoxFNT+bOGRcnMIHRBgNVHSMEgckw
aFx/wNSR6gJBH9HcOuGKlEoj/7m8Z82Dbvi62Jo9fJRqM3izfMFGx2FseUUR8QMs
gcaAFGSQwpb/Y52bdaiZ4tsp3H2kLuONoYGipIGfMIGcMQswCQYDVQQGEwJGUjER
WNT8uqNhXb4PZXd5hI3jB41Lc2HbmwKqPRaNYgmlTr4+d9kEJJNqbHlwsnW3rJcI
MA8GA1UECBMIQnJldGFnbmUxDjAMBgNVBAcTBUJyZXN0MRUwEwYDVQQKEwxTdHl4
DEIGoHYoA9IDCCSCbdxIYaNoesMaHQVGVFbxmd0+ObF7BEpTQiemOAay8fwPBHJd
IE5ldHdvcmsxEDAOBgNVBAsTB1N0eXhuZXQxIjAgBgNVBAMTGVN0eXggTmV0d29y
YbNWl7ZhyinjRysCAwEAAaOCAWgwggFkMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgeA
ayBDQSBBdXRob3JpdHkxHTAbBgkqhkiG9w0BCQEWDnBraUBzdHl4bmV0LmZyggkA
MBMGA1UdJQQMMAoGCCsGAQUFBwMJMAkGA1UdEgQCMAAwHQYDVR0OBBYEFHXbc78E
uQ7VPg/aef8wMwYIKwYBBQUHAQEEJzAlMCMGCCsGAQUFBzABhhdodHRwOi8vb2Nz
GwB8GsszNdRxuBzPKRj0MIHRBgNVHSMEgckwgcaAFI3ys5Oq3S7WpPnQ3XZkakpN
cC5zdHl4bmV0LmZyLzANBgkqhkiG9w0BAQQFAAOBgQAMOj95fuQhvhvR1O+PHTOv
OO+LoYGipIGfMIGcMQswCQYDVQQGEwJGUjEdMBsGA1UECBMUTGFuZ3VlZG9jLVJv
8ojrD0DLJFCbR8xh4qmjbsVPKny1A/GhuLcjx+EAYTrAfI/GL8dqyZitr/8o28Yf
dXNzaWxsb24xEjAQBgNVBAcTCUJlYXVjYWlyZTENMAsGA1UEChMESG9tZTEOMAwG
F9NU89callEZBGz4knRw3lTBVdOdJ5mLCb6YJ+ZbHhSiqdLLotdSiuGsm6dSoluQ
A1UECxMFQWRtaW4xHDAaBgNVBAMTE2RpZGllci5kb21pY2lsZS5vcmcxHTAbBgkq
3MyPM0t6mWBNXrnmce2+kg==
hkiG9w0BCQEWDnJvb3RAbG9jYWxob3N0ggkAsOaO+WAeW00wNwYIKwYBBQUHAQEE
KzApMCcGCCsGAQUFBzABhhtodHRwOi8vZGlkaWVyLmRvbWljaWxlLm9yZy8wDQYJ
KoZIhvcNAQEEBQADggEBABtFpbWt19mPU31u4QTJjptMfCH/BC35K2DKt2pB+b7P
9m1vPnIHO1CKsGuSJQGkncmGxPUIQ71JftJiU0iuGcOSyQiYKwB7/8UxYk0i8k9f
phvQnSjL4gPKVxQblnTfJHgajaSxqpzQj4Rd9oZnkvD3zWNqpkGsUfs8UTypDdcA
mo67rx2g2X8t1mBArkrnZAm8cdjTWS7fQ9MZXeMhsyzz1HOwuFzCw4MmTp6WoxNV
HDikZcOzLeeSZaJNueaJQTmP6P3bbAVDMb6fxFrlcGqRgSu/Ys2XVOFFFfwfVj0I
xHrniyoWCZw8VhKs5L/qQao1M/isUjo9/DS4TMJ7jSs=
-----END CERTIFICATE-----
-----END CERTIFICATE-----
Response verify OK
Response verify OK
webmail.guiguiabloc.fr.crt: good
/etc/pki/httpd/certs/didier.crt: good
        This Update: Jan  6 10:09:23 2013 GMT
        Next Update: Jan  6 10:24:24 2013 GMT
</pre>
</pre>


Réponse : GOOD tout va bien :-)
Réponse : '''{{color|green|GOOD}}''' tout va bien {{Admon/smiley|:-)}}
 
La réponse peut être: '''{{color|green|GOOD}} - {{color|red|REVOKED}} - {{color|orange|UNKNOWN}}'''


La réponse peut être: GOOD – REVOKED – UNKNOWN
= Intégration dans les navigateurs =


Vous pouvez inclure directement dans votre certificat l’adresse de votre répondeur OCSP en ajoutant des extensions à votre openssl.cnf :
== Firefox ==
<pre>
[OCSP]
basicConstraints        = CA:FALSE
keyUsage                = digitalSignature
extendedKeyUsage        = OCSPSigning
issuerAltName          = issuer:copy
subjectKeyIdentifier    = hash
authorityKeyIdentifier  = keyid:always,issuer:always
authorityInfoAccess    = OCSP;URI:http://ocsp.guiguiabloc.fr/
[SERVEUR_OCSP]
nsComment                      = "Guiguiabloc Certificate"
subjectKeyIdentifier            = hash
authorityKeyIdentifier          = keyid,issuer:always
issuerAltName                  = issuer:copy
basicConstraints                = critical,CA:FALSE
keyUsage                        = digitalSignature, nonRepudiation, keyEncipherment
nsCertType                      = server
extendedKeyUsage                = serverAuth
authorityInfoAccess            = OCSP;URI:http://ocsp.guiguiabloc.fr/
[CLIENT_OCSP]
nsComment                      = "Certificat Client SSL"
subjectKeyIdentifier            = hash
authorityKeyIdentifier          = keyid,issuer:always
issuerAltName                  = issuer:copy
basicConstraints                = critical,CA:FALSE
keyUsage                        = digitalSignature, nonRepudiation
nsCertType                      = client
extendedKeyUsage                = clientAuth
authorityInfoAccess            = OCSP;URI:http://ocsp.guiguiabloc.fr/
</pre>
Puis d’invoquer l’extension lors de la création du certificat avec openssl (-extensions CLIENT_OCSP (par exemple).


Dans Firefox, pour configurer l’interrogation automatique du répondeur OCSP, allez dans Outils/Options/Avance/Chiffrement et cliquez sur “Vérification”.
Dans Firefox, pour configurer l’interrogation automatique du répondeur OCSP, allez dans Outils/Options/Avance/Chiffrement et cliquez sur “Vérification”.


[[Fichier:Firefox_ocsp.png]]
[[Fichier:Firefox_ocsp.png]]

Dernière version du 29 août 2013 à 07:11

Introduction

Online Certificate Status Protocol(OCSP ou en français protocole de vérification en ligne de certificat) est un protocole Internet utilisé pour valider un certificat numérique X.509. OCSP est standardisé par l'IETF dans la RFC 2560.

Ce protocole est une alternative réglant certains des problèmes posés par les liste de révocation de certificats (CRL) dans une infrastructure à clés publiques (PKI). Les messages OCSP sont codés en ASN.1 et peuvent être transportés par différents protocoles applicatifs (SMTP, LDAP, HTTP, etc.). Les communications OCSP étant de la forme « requête/réponse », les serveurs OCSP sont appelés répondeurs OCSP.

Centralisation de la validation des certificats

La validation des certificats est une tâche plus complexe qu'il n'y paraît. Elle est traditionnellement effectuée par le client de la PKI. Une grande confiance est ainsi accordée au client pour ce traitement critique. Or une grande partie des clients PKI effectuent leur validation de manière encore incomplète ou imparfaite (en 2006). Par exemple, la non-automatisation de la récupération des CRL des navigateurs web pose un problème quant à la mise à jour des informations.

OCSP permet de centraliser cette tâche au sein d'une PKI. Afin de valider un certificat, le client n'a plus à communiquer qu'avec une seule entité : le répondeur OCSP. On peut parler aussi d'autorité de validation (VA pour Validation Authorithy).

Avantage par rapport aux CRL

Plusieurs raisons peuvent amener à préférer le protocole OCSP aux traditionnelles CRL.

  • OCSP fournit des informations sur le statut du certificat plus à jour.
  • Avec OCSP, le client n'a plus besoin de récupérer lui-même la CRL. Vue la taille parfois importante de cette CRL, cela allège le trafic réseau.
  • Le client n'a plus à traiter lui-même la CRL. Cela permet l'économie d'un traitement relativement complexe.
  • Le répondeur OCSP permet de proposer des mécanismes de facturation au vendeur, et non pas à l'acheteur
  • Les CRL peuvent être comparées à une "liste de mauvais clients" d'une banque. Cela constitue une fuite d'information non souhaitable.

Autres avantages

OCSP présente d'autres avantages en termes de déploiement des clients et d'architecture réseau.

  • C'est le répondeur OCSP qui récupère les différents certificats constitutifs d'une chaîne de certificats et les CRL. Cela simplifie les communications, car le client ne dispose pas forcément de la connectivité nécessaire à leur récupération (filtrage par un pare-feu, etc.).
  • Le répondeur OCSP valide la remontée du chemin de certification. Le client fait donc l'économie de cet autre traitement consommateur en ressources.
  • Grâce au chaînage des répondeurs OCSP, le client ne communique qu'avec un seul répondeur, digne de confiance. Cela épargne au client des communications plus complexes.

Exemple d'utilisation

  1. Alice et Bob sont des clients d'Ivan, l'autorité de certification (AC). Ils possèdent le certificat de clé publique d'Ivan.
  2. Alice et Bob possèdent chacun un certificat de clé publique émis par Ivan.
  3. Alice veut effectuer une transaction avec Bob. Elle lui envoie donc son certificat contenant sa clé publique.
  4. Bob veut s'assurer que le certificat d'Alice n'a pas été révoqué. Il crée une requête OCSP contenant l'empreinte du certificat d'Alice et l'envoie à Ivan.
  5. Le répondeur OCSP d'Ivan vérifie le statut du certificat d'Alice dans la base de données de la CA.
  6. Le répondeur OCSP confirme la validité du certificat d'Alice en envoyant une réponse OCSP positive signée à Bob.
  7. Bob vérifie la signature cryptographique de la réponse.
  8. Bob effectue sa transaction avec Alice.

Concept de fonctionnement

Ce schéma illustre comment la requête OCSP est formée et envoyée vers le serveur OCSP:

Ocsp-request.png

Ce schéma illustre comment la réponse OCSP est formée et envoyée vers le client OCSP.

La réponse peut être: GOOD - REVOKED - UNKNOWN

Ocsp-responce.png

Liens externes

Alternatif à OCSP: le protocole SCVP

Installation

Il existe un projet libre de répondeur OCSP , qui est inclus dans l’excellentissime projet OpenCA : http://www.openca.org/projects/ocspd/

L’installation est des plus basiques, un groupe et un user dédié seront créés :

# yum install ocspd

Avec votre système de PKI préféré, générer un certificat publique et une clé privé pour votre serveur OCSP.

Liste des fichiers nécessaires au daemon :

  • Le certificat (<path>/etc/pki/httpd/certs/ocspd.crt</path>)et la clé associée (<path>/etc/pki/httpd/certs/ocspd.key</path>) pour le daemon OCSP
  • Le certificat Racine (<path>/etc/pki/httpd/httpd_ca.crt</path>)
  • La liste CRL (<path>/etc/pki/httpd/crl/crl.pem</path>)

Il ne reste qu’a configurer votre répondeur :

Fichier <path>/etc/ocspd/ocspd.conf</path>

[ ocspd ]
default_ocspd   = OCSPD_default         # The default ocspd section

[ OCSPD_default ]
dir              = /etc/ocspd   # Where everything is kept
md               = sha1
ocspd_certificate = /etc/pki/httpd/certs/ocspd.crt  # The OCSP server cert
ocspd_key         = /etc/pki/httpd/certs/ocspd.key  # The OCSP server key
pidfile           = /var/run/ocspd.pid              # Main process pid
user                    = ocspd
group                   = ocspd
bind                    = *
port                    = 2560
max_req_size            = 8192
threads_num             = 10
max_client_num          = 3
max_timeout_secs        = 5
crl_auto_reload = 3600
crl_check_validity = 600
response        = ocsp_response
dbms            = dbms_file
engine = off

[ ocsp_response ]
dir                     = /etc/ocspd
ocsp_add_response_certs        = 
ocsp_add_response_keyid = yes
next_update_days        = 0
next_update_mins        = 5

[ dbms_file ]
0.ca = @first_ca

[ first_ca ]
crl_url = file:///etc/pki/httpd/crl/crl.pem
ca_url  = file:///etc/pki/httpd/httpd_ca.crt

[ second_ca ]
crl_url = file:///etc/ocspd/crls/crl_02.pem
ca_url  = file:///etc/ocspd/certs/2nd_cacert.pem

Je vous laisse consulter le fichier conf en entier pour en comprendre le contenu et le modifier suivant vos besoins, mais la configuration ci-dessous, très simple, fonctionne pour un premier test.

Test

Génération des certificats

Vous pouvez inclure directement dans votre certificat l’adresse de votre répondeur OCSP en ajoutant des extensions à votre openssl.cnf :

[OCSP]
basicConstraints        = CA:FALSE
keyUsage                = digitalSignature
extendedKeyUsage        = OCSPSigning
issuerAltName           = issuer:copy
subjectKeyIdentifier    = hash
authorityKeyIdentifier  = keyid:always,issuer:always
authorityInfoAccess     = OCSP;URI:http://didier.domicile.org/
 
[OCSP_SERVER]
nsComment                       = "OpenSSL Generated Server Certificate"
subjectKeyIdentifier            = hash
authorityKeyIdentifier          = keyid,issuer:always
issuerAltName                   = issuer:copy
basicConstraints                = critical,CA:FALSE
keyUsage                        = digitalSignature, nonRepudiation, keyEncipherment
nsCertType                      = server
extendedKeyUsage                = serverAuth
authorityInfoAccess             = OCSP;URI:http://didier.domicile.org/
 
[OCSP_CLIENT]
nsComment                       = "OpenSSL Generated Client Certificate"
subjectKeyIdentifier            = hash
authorityKeyIdentifier          = keyid,issuer:always
issuerAltName                   = issuer:copy
basicConstraints                = critical,CA:FALSE
keyUsage                        = digitalSignature, nonRepudiation
nsCertType                      = client
extendedKeyUsage                = clientAuth
authorityInfoAccess             = OCSP;URI:http://didier.domicile.org/

L'autorité de certification, ainsi que tous les certificats vont être générés par le script manageCA. Tous ont une extension OCSP.

Liste des certificats :

  • didier.domicile.org ( pour Apache )
  • ocspd
  • didier ( utilisateur )

Lancement du répondeur

On lance le démon

# ocspd -c /etc/ocspd/ocspd.conf -v &

Et on vérifie le fichier <path>/var/log/messages</path> :

Jan  6 11:17:41 didier ocspd[17173]: OpenCA OCSPD v1.5.1 - starting.
Jan  6 11:17:41 didier ocspd[17173]: Initialising HSM [(null)]
Jan  6 11:17:41 didier ocspd[17173]: Engine Initialisation Complete ["(null)"]
Jan  6 11:17:41 didier ocspd[17173]: reading certificate file (/etc/pki/httpd/certs/ocspd.crt).
Jan  6 11:17:41 didier ocspd[17173]: Reading Private Key file /etc/pki/httpd/certs/ocspd.key
Jan  6 11:17:41 didier ocspd[17173]: variable lookup failed for OCSPD_default::chroot_dir
Jan  6 11:17:41 didier ocspd[17173]: Auto CRL reload every 3600 secs
Jan  6 11:17:41 didier ocspd[17173]: variable lookup failed for OCSPD_default::crl_reload_expired
Jan  6 11:17:41 didier ocspd[17173]: Number of CAs in configuration is 1
Jan  6 11:17:41 didier ocspd[17173]: INFO::FORMAT::CA Cert [/etc/pki/httpd/httpd_ca.crt] is PEM formatted
Jan  6 11:17:41 didier ocspd[17173]: CA CERT for first_ca loaded successfully.
Jan  6 11:17:41 didier ocspd[17173]: CA List Entry added (CA list num 0)
Jan  6 11:17:41 didier ocspd[17173]: INFO::CRL RELOAD::File Protocol
Jan  6 11:17:41 didier ocspd[17173]: INFO::FILE::CRL is in PEM format
Jan  6 11:17:41 didier ocspd[17173]: CRL loaded [ first_ca ]
Jan  6 11:17:41 didier ocspd[17173]: CRL and CA cert [0:1] check ok
Jan  6 11:17:41 didier ocspd[17173]: CRL matching CA cert ok [ 1 ]
Jan  6 11:17:41 didier ocspd[17173]: INFO::CRL::Verify 1 [OK=1]
Jan  6 11:17:41 didier ocspd[17173]: INFO::CRL is Valid
Jan  6 11:17:41 didier ocspd[17173]: INFO::CRL::-1 Entries [ first_ca ]
Jan  6 11:17:41 didier ocspd[17173]: No Entries for CRL (@first_ca)
Jan  6 11:17:41 didier ocspd[17173]: CRL loaded successfully [first_ca]
Jan  6 11:17:41 didier ocspd[17173]: CRL validity check every 600 sec.
Jan  6 11:17:41 didier ocspd[17173]: Configuration loaded and parsed
Jan  6 11:17:41 didier ocspd[17173]: INFO::Local Address 0.0.0.0 [2560]
Jan  6 11:17:41 didier ocspd[17173]: INFO::OPENCA_SRV_INFO_TREAD::new thread created

Validation d'un certificat

Et maintenant, on interroge le serveur OCSP pour savoir si le Certificat est encore valable :

# openssl ocsp -issuer /etc/pki/httpd/httpd_ca.crt -CAfile /etc/pki/httpd/httpd_ca.crt \
  -cert /etc/pki/httpd/certs/didier.crt -url http://didier:2560 -text
OCSP Request Data:
    Version: 1 (0x0)
    Requestor List:
        Certificate ID:
          Hash Algorithm: sha1
          Issuer Name Hash: 3EE63093199C726BFB10E932EEB28389302BA577
          Issuer Key Hash: 8DF2B393AADD2ED6A4F9D0DD76646A4A4D38EF8B
          Serial Number: 03
    Request Extensions:
        OCSP Nonce: 
            0410653FE2B3B8484619786CC7FAA025E4AD
OCSP Response Data:
    OCSP Response Status: successful (0x0)
    Response Type: Basic OCSP Response
    Version: 1 (0x0)
    Responder Id: C = FR, ST = Languedoc-Roussillon, O = Home, OU = Admin, CN = ocspd, emailAddress = root@localhost
    Produced At: Jan  6 10:19:24 2013 GMT
    Responses:
    Certificate ID:
      Hash Algorithm: sha1
      Issuer Name Hash: 3EE63093199C726BFB10E932EEB28389302BA577
      Issuer Key Hash: 8DF2B393AADD2ED6A4F9D0DD76646A4A4D38EF8B
      Serial Number: 03
    Cert Status: good
    This Update: Jan  6 10:09:23 2013 GMT
    Next Update: Jan  6 10:24:24 2013 GMT

    Response Extensions:
        OCSP Nonce: 
            0410653FE2B3B8484619786CC7FAA025E4AD
    Signature Algorithm: sha1WithRSAEncryption
        99:52:10:38:18:48:13:4e:56:2d:e9:b3:3f:d7:ab:04:75:05:
        0c:88:ec:e7:0f:b5:37:a3:f3:6d:94:c3:6b:51:55:d9:15:09:
        cb:a7:0c:3f:6e:4e:f7:13:21:f8:c4:41:5b:6d:b7:c9:22:5e:
        c8:89:6c:cc:e1:e1:fc:b0:58:2d:25:ae:4e:0d:e9:24:a0:fd:
        72:43:e0:e9:65:9a:d4:98:49:c1:30:18:3b:fc:f8:eb:c7:60:
        96:66:bd:62:6e:98:f0:6e:ca:98:cc:ef:2e:43:8d:c6:42:f3:
        09:e2:ae:4c:92:92:cb:39:bf:de:db:79:a3:8f:9a:a3:c7:89:
        82:c7:d9:2d:a3:3d:43:ec:10:b8:0f:2e:63:6e:9d:bb:43:3b:
        a3:03:2f:00:52:ee:e5:67:4b:85:40:7a:0d:a3:6d:a2:bc:3a:
        ce:3a:4e:f4:04:d0:e4:74:f3:cd:59:ef:08:72:9f:85:aa:8a:
        3c:67:cb:d0:99:67:8d:25:74:a6:69:6a:4a:6f:17:27:6e:31:
        59:ff:3d:4e:93:df:42:f2:45:62:78:2b:4d:5b:6b:b9:a1:0a:
        b9:b3:6f:60:bb:90:d8:45:a9:18:c3:95:3c:1a:56:57:80:1a:
        e9:4f:a0:c3:57:76:a5:7e:5f:bd:23:c5:9c:43:1f:d3:85:57:
        9b:f6:09:65
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 2 (0x2)
        Signature Algorithm: md5WithRSAEncryption
        Issuer: C=FR, ST=Languedoc-Roussillon, L=Beaucaire, O=Home, OU=Admin, CN=didier.domicile.org/emailAddress=root@localhost
        Validity
            Not Before: Jan  6 10:10:02 2013 GMT
            Not After : Jan  6 10:10:02 2014 GMT
        Subject: C=FR, ST=Languedoc-Roussillon, O=Home, OU=Admin, CN=ocspd/emailAddress=root@localhost
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:af:8b:01:af:f8:79:ab:98:ab:7f:4b:c2:e0:8c:
                    f3:85:74:9f:80:3c:02:17:ce:f7:c2:fd:df:c1:3f:
                    79:ff:3a:e2:dc:3c:06:ce:31:a8:27:ab:09:8a:b0:
                    ed:bb:a0:1d:c0:d5:cd:14:9a:6d:b6:ab:47:c0:5f:
                    ce:57:78:78:dc:a9:2c:77:0a:20:e0:6b:4e:83:f6:
                    5e:b8:7b:36:02:e9:ba:e9:5b:fa:f3:99:6f:f5:4d:
                    b0:f2:a6:65:90:ef:81:a8:2f:80:97:44:68:5c:7f:
                    c0:d4:91:ea:02:41:1f:d1:dc:3a:e1:8a:94:4a:23:
                    ff:b9:bc:67:cd:83:6e:f8:ba:d8:9a:3d:7c:94:6a:
                    33:78:b3:7c:c1:46:c7:61:6c:79:45:11:f1:03:2c:
                    58:d4:fc:ba:a3:61:5d:be:0f:65:77:79:84:8d:e3:
                    07:8d:4b:73:61:db:9b:02:aa:3d:16:8d:62:09:a5:
                    4e:be:3e:77:d9:04:24:93:6a:6c:79:70:b2:75:b7:
                    ac:97:08:0c:42:06:a0:76:28:03:d2:03:08:24:82:
                    6d:dc:48:61:a3:68:7a:c3:1a:1d:05:46:54:56:f1:
                    99:dd:3e:39:b1:7b:04:4a:53:42:27:a6:38:06:b2:
                    f1:fc:0f:04:72:5d:61:b3:56:97:b6:61:ca:29:e3:
                    47:2b
                Exponent: 65537 (0x10001)
        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: 
                75:DB:73:BF:04:1B:00:7C:1A:CB:33:35:D4:71:B8:1C:CF:29:18:F4
            X509v3 Authority Key Identifier: 
                keyid:8D:F2:B3:93:AA:DD:2E:D6:A4:F9:D0:DD:76:64:6A:4A:4D:38:EF:8B
                DirName:/C=FR/ST=Languedoc-Roussillon/L=Beaucaire/O=Home/OU=Admin/CN=didier.domicile.org/emailAddress=root@localhost
                serial:B0:E6:8E:F9:60:1E:5B:4D

            Authority Information Access: 
                OCSP - URI:http://didier.domicile.org/

    Signature Algorithm: md5WithRSAEncryption
        1b:45:a5:b5:ad:d7:d9:8f:53:7d:6e:e1:04:c9:8e:9b:4c:7c:
        21:ff:04:2d:f9:2b:60:ca:b7:6a:41:f9:be:cf:f6:6d:6f:3e:
        72:07:3b:50:8a:b0:6b:92:25:01:a4:9d:c9:86:c4:f5:08:43:
        bd:49:7e:d2:62:53:48:ae:19:c3:92:c9:08:98:2b:00:7b:ff:
        c5:31:62:4d:22:f2:4f:5f:a6:1b:d0:9d:28:cb:e2:03:ca:57:
        14:1b:96:74:df:24:78:1a:8d:a4:b1:aa:9c:d0:8f:84:5d:f6:
        86:67:92:f0:f7:cd:63:6a:a6:41:ac:51:fb:3c:51:3c:a9:0d:
        d7:00:9a:8e:bb:af:1d:a0:d9:7f:2d:d6:60:40:ae:4a:e7:64:
        09:bc:71:d8:d3:59:2e:df:43:d3:19:5d:e3:21:b3:2c:f3:d4:
        73:b0:b8:5c:c2:c3:83:26:4e:9e:96:a3:13:55:1c:38:a4:65:
        c3:b3:2d:e7:92:65:a2:4d:b9:e6:89:41:39:8f:e8:fd:db:6c:
        05:43:31:be:9f:c4:5a:e5:70:6a:91:81:2b:bf:62:cd:97:54:
        e1:45:15:fc:1f:56:3d:08:c4:7a:e7:8b:2a:16:09:9c:3c:56:
        12:ac:e4:bf:ea:41:aa:35:33:f8:ac:52:3a:3d:fc:34:b8:4c:
        c2:7b:8d:2b
-----BEGIN CERTIFICATE-----
MIIE/DCCA+SgAwIBAgIBAjANBgkqhkiG9w0BAQQFADCBnDELMAkGA1UEBhMCRlIx
HTAbBgNVBAgTFExhbmd1ZWRvYy1Sb3Vzc2lsbG9uMRIwEAYDVQQHEwlCZWF1Y2Fp
cmUxDTALBgNVBAoTBEhvbWUxDjAMBgNVBAsTBUFkbWluMRwwGgYDVQQDExNkaWRp
ZXIuZG9taWNpbGUub3JnMR0wGwYJKoZIhvcNAQkBFg5yb290QGxvY2FsaG9zdDAe
Fw0xMzAxMDYxMDEwMDJaFw0xNDAxMDYxMDEwMDJaMHoxCzAJBgNVBAYTAkZSMR0w
GwYDVQQIExRMYW5ndWVkb2MtUm91c3NpbGxvbjENMAsGA1UEChMESG9tZTEOMAwG
A1UECxMFQWRtaW4xDjAMBgNVBAMTBW9jc3BkMR0wGwYJKoZIhvcNAQkBFg5yb290
QGxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK+LAa/4
eauYq39LwuCM84V0n4A8AhfO98L938E/ef864tw8Bs4xqCerCYqw7bugHcDVzRSa
bbarR8Bfzld4eNypLHcKIOBrToP2Xrh7NgLpuulb+vOZb/VNsPKmZZDvgagvgJdE
aFx/wNSR6gJBH9HcOuGKlEoj/7m8Z82Dbvi62Jo9fJRqM3izfMFGx2FseUUR8QMs
WNT8uqNhXb4PZXd5hI3jB41Lc2HbmwKqPRaNYgmlTr4+d9kEJJNqbHlwsnW3rJcI
DEIGoHYoA9IDCCSCbdxIYaNoesMaHQVGVFbxmd0+ObF7BEpTQiemOAay8fwPBHJd
YbNWl7ZhyinjRysCAwEAAaOCAWgwggFkMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgeA
MBMGA1UdJQQMMAoGCCsGAQUFBwMJMAkGA1UdEgQCMAAwHQYDVR0OBBYEFHXbc78E
GwB8GsszNdRxuBzPKRj0MIHRBgNVHSMEgckwgcaAFI3ys5Oq3S7WpPnQ3XZkakpN
OO+LoYGipIGfMIGcMQswCQYDVQQGEwJGUjEdMBsGA1UECBMUTGFuZ3VlZG9jLVJv
dXNzaWxsb24xEjAQBgNVBAcTCUJlYXVjYWlyZTENMAsGA1UEChMESG9tZTEOMAwG
A1UECxMFQWRtaW4xHDAaBgNVBAMTE2RpZGllci5kb21pY2lsZS5vcmcxHTAbBgkq
hkiG9w0BCQEWDnJvb3RAbG9jYWxob3N0ggkAsOaO+WAeW00wNwYIKwYBBQUHAQEE
KzApMCcGCCsGAQUFBzABhhtodHRwOi8vZGlkaWVyLmRvbWljaWxlLm9yZy8wDQYJ
KoZIhvcNAQEEBQADggEBABtFpbWt19mPU31u4QTJjptMfCH/BC35K2DKt2pB+b7P
9m1vPnIHO1CKsGuSJQGkncmGxPUIQ71JftJiU0iuGcOSyQiYKwB7/8UxYk0i8k9f
phvQnSjL4gPKVxQblnTfJHgajaSxqpzQj4Rd9oZnkvD3zWNqpkGsUfs8UTypDdcA
mo67rx2g2X8t1mBArkrnZAm8cdjTWS7fQ9MZXeMhsyzz1HOwuFzCw4MmTp6WoxNV
HDikZcOzLeeSZaJNueaJQTmP6P3bbAVDMb6fxFrlcGqRgSu/Ys2XVOFFFfwfVj0I
xHrniyoWCZw8VhKs5L/qQao1M/isUjo9/DS4TMJ7jSs=
-----END CERTIFICATE-----
Response verify OK
/etc/pki/httpd/certs/didier.crt: good
        This Update: Jan  6 10:09:23 2013 GMT
        Next Update: Jan  6 10:24:24 2013 GMT

Réponse : GOOD tout va bien Face-smile.png

La réponse peut être: GOOD - REVOKED - UNKNOWN

Intégration dans les navigateurs

Firefox

Dans Firefox, pour configurer l’interrogation automatique du répondeur OCSP, allez dans Outils/Options/Avance/Chiffrement et cliquez sur “Vérification”.

Firefox ocsp.png