« Services/OCSP » : différence entre les versions
Aucun résumé des modifications |
|||
| Ligne 48 : | Ligne 48 : | ||
Ce schéma illustre comment la réponse OCSP est formée et envoyée vers le client OCSP. | Ce schéma illustre comment la réponse OCSP est formée et envoyée vers le client OCSP. | ||
La réponse peut être: '''{{ | La réponse peut être: '''{{color|green|GOOD}} - {{color|red|REVOKED}} - {{color|orange|UNKNOWN}}''' | ||
[[Image:Ocsp-responce.png|500px]] | [[Image:Ocsp-responce.png|500px]] | ||
| Ligne 361 : | Ligne 361 : | ||
</pre> | </pre> | ||
Réponse : '''{{ | Réponse : '''{{color|green|GOOD}}''' tout va bien {{Admon/smiley|:-)}} | ||
La réponse peut être: '''{{ | La réponse peut être: '''{{color|green|GOOD}} - {{color|red|REVOKED}} - {{color|orange|UNKNOWN}}''' | ||
= Intégration dans les navigateurs = | = Intégration dans les navigateurs = | ||
Version du 6 janvier 2013 à 10:54
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
- 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é 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 signée à Bob.
- Bob vérifie la signature cryptographique de la réponse.
- 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:
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
Liens externes
- Société spécialisée dans la validation / Axway
- Société spécialisée dans la validation / Corestreet
- Navigateur compatible OCSP: Mozilla Firefox
- Mise en œuvre d'un client OCSP pour Apache / HES Geneva & e-Xpert Solutions
- Implementing Online Certificate Status Protocol / Tirthankar Barari
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
La réponse peut être: GOOD - REVOKED - UNKNOWN
Firefox
Dans Firefox, pour configurer l’interrogation automatique du répondeur OCSP, allez dans Outils/Options/Avance/Chiffrement et cliquez sur “Vérification”.
