# Agrafage OCSP

OCSP est un protocole Internet permettant de vérifier la validité d'un certificat numérique TLS en temps-réel auprès de l'autorité ayant émis le certificat. L’agrafage OCSP (en anglais : OCSP Stapling), dont le nom technique est Extension de requête d'état de certificat TLS (TLS Certificate Status Request Extension), est une approche alternative au protocole OCSP permettant de vérifier l'état de révocation d'un certificat numérique X.509. Il permet au possesseur d'un certificat de supporter le coût de vérification de ce dernier en fournissant une réponse OCSP horodatée et signée par l’Autorité de certification (CA), attachée (agrafée) à l’échange initial TLS, permettant d'économiser au client TLS la vérification auprès de la CA$^,$.

## Motivation

L'agrafage OCSP tente de répondre aux problèmes posés par le protocole OCSP original. OCSP pose un problème de charge importante imposée aux autorités de certification, car ils doivent répondre à chaque client d'une autorité de certification en temps réel. Si le certificat est émis pour un site à fort trafic, les serveurs de la CA vont recevoir un volume énorme de requêtes OCSP demandant de confirmer la validité du certificat.
La vérification par OCSP peut aussi porter atteinte à la rapidité et la confidentialité de la navigation d'un utilisateur, puisqu'elle requiert que le navigateur contacte une tierce partie (la CA) pour confirmer la validité de chaque certificat rencontré. Enfin, si le client n'arrive pas à se connecter à la CA pour la validation OCSP, il doit choisir entre 2 options dont aucune n'est souhaitable. Le client peut soit choisir de continuer à se connecter, rendant OCSP inutile, soit choisir d'interrompre la connexion, pensant avoir affaire à une attaque, mais cela réduit l'utilisabilité et pourrait avoir pour conséquence de nombreux blocages dus à des faux positifs.

## Solution

L'agrafage OCSP résout ces problèmes avec une méthode proche des Tickets Kerberos. Le propriétaire du certificat interroge lui-même le serveur OCSP à intervalles réguliers, obtenant une réponse OCSP représentant un horodatage signé numériquement. Lorsque le visiteur du site tente de se connecter à celui-ci, cette réponse OCSP est incluse (d'où le terme "agrafage") dans la réponse TLS (si le client est pourvu de cette extension à TLS, nommée Certificate Status Request, et le signale dans sa requête ClientHello). Cela peut paraître étrange que le serveur fournisse lui-même la preuve de la validité de son certificat, mais cette preuve OCSP devant être signée et horodatée par l'autorité de certification, le serveur ne peut pas fournir de réponse frauduleuse. Si le client ne reçoit pas la réponse OCSP du serveur, il pourra la vérifier lui-même. Cependant, si le client reçoit du serveur une réponse OCSP invalide, il pourra interrompre immédiatement la connexion. Le seul risque de l'agrafage OCSP est que la notification de révocation d'un certificat pourrait être retardée jusqu'à la date d'expiration de la dernière réponse OCSP.
La conséquence de l'agrafage OCSP est que le client peut avoir l'assurance, émise par l'autorité de certification, que le certificat présenté par le serveur est valide (ou l'était il y a peu), mais n'a plus besoin de vérifier le serveur OCSP lui-même. La surcharge d'activité réseau est donc déplacée sur le propriétaire du certificat, qui peut se contenter de vérifier l'état auprès de l'autorité moins fréquemment. Cela signifie aussi que le client ne révèle plus ses habitudes de navigation à une tierce partie.
La vitesse d'accès aux sites est améliorée aussi grâce à l'agrafage OCSP : lorsque le client obtient la réponse OCSP directement depuis l'autorité, cela implique de résoudre l'adresse de l'autorité dans le DNS, et d'établir une connexion supplémentaire vers celle-ci avant de terminer la connexion avec le serveur. Lorsque l'agrafage OCSP est utilisé, l'état à jour du certificat du serveur est fourni au client avant l'établissement du canal chiffré, réduisant la surcharge réseau et augmentant la rapidité d'accès aux ressources.

## Spécifications techniques

L'extension TLS Certificate Status Request est spécifiée dans la RFC 6066, section 8.
La RFC 6961 ajoute une extension Multiple Certificate Status Request, qui permet au serveur d'envoyer plusieurs réponses OCSP dans la même poignée de main TLS.
Un brouillon proposé en tant que champ additionnel à X509v3, expirant en avril 2013, spécifie qu'un serveur présentant un certificat contenant cette extension doit retourner une réponse OCSP valide dans sa réponse si l'extension status_request est demandée par le client La version actuelle de cette proposition a été étendue pour gérer d'autres extensions à TLS. Adam Langley, un des développeurs de TLS, discutait de cette extension en avril 2014 à la suite d'un article sur la manière de réparer le bug Heartbleed d'OpenSSL.

## Déploiement

L'agrafage OCSP a été mis en œuvre progressivement. Le projet OpenSSL gère l'agrafage depuis sa version 0.9.8g grâce au soutien de la Fondation Mozilla.
Le serveur Apache gère l'agrafage OCSP depuis sa version 2.3.3, le serveur nginx depuis sa version 1.3.7 LiteSpeed Web Server depuis la 4.2.4, Microsoft IIS depuis Windows Server 2008, HAProxy depuis la 1.5.0, et les machines F5 Networks BIG-IP depuis la version 11.6.0.
Du côté des navigateurs web, L'agrafage OCSP a été mis en œuvre dans la version 26 de Firefox, dans Internet Explorer depuis Windows Vista, dans Google Chrome sous Linux et Chrome OS.
Le serveur SMTP Exim gère l'agrafage OCSP en mode client et serveur.

## Limites

L'agrafage OCSP était conçu pour réduire le coût de la validation OCSP (à la fois pour le client et le serveur OCSP de la CA) particulièrement pour les sites importants servant de nombreux utilisateurs. Cependant, l'agrafage OCSP ne sait gérer qu'une réponse OCSP à la fois, ce qui est insuffisant pour les certificats chaînés comprenant une autorité intermédiaire$^,$.
Cette limite a été résolue par l'extension Multiple Certificate Status Request, spécifiée dans la RFC 6961, qui ajoute la prise en charge de réponses OCSP multiples.