web-dev-qa-db-fra.com

Devrais-je utiliser une liste de révocation de certificat?

J'ai essayé de fournir une sécurité à mon API.

Je publierai des certificats à mes clients pour accéder à mon API via un canal TLS. Ce sera donc une authentification SSL-Client.

Je me demande, devrais-je utiliser CRL sur mon serveur? Pourquoi?

Remarque: Je vais utiliser ma propre ca et la communication sera entre des machines afin qu'un navigateur ne soit pas utilisé.

Il y a une exception à ma question. Quelques jours, si ma clé racine est compromise, je peux créer une liste CRL, ajouter mon ancienne clé racine de CA et mettre en œuvre mon serveur simplement. Alors, veuillez ignorer ce cas.

Une image de communauté Websense enter image description here

11
efkan

Tout d'abord, CRL DO pas Couverture Ca. Par définition, une autorité de certification racine est un root: il n'a pas l'émetteur, sauf lui-même. Un CRL transmet des informations de révocation, qui est un moyen pour un émetteur de certificat d'annoncer qu'un certificat déjà émis devrait être considéré comme invalide même s'il a l'air bien et sa signature est correcte et tout. Ainsi, une liste de révocation qui parle d'un certificat C est quelque chose qui vient de l'émetteur C . Puisque une CA racine n'a aucun émetteur, il ne peut pas être révoqué.

En d'autres termes, si votre root ​​CA est compromis, vous avez des problèmes profonds. C'est pourquoi les personnes qui sont sérieuses concernant les certificats utilisent une structure de trois niveaux:

  • A Root CA est créé et maintenu sur une machine hors ligne, qui est conservée dans un coffre-fort ou une pièce blindée. Il est alimenté régulièrement (disons, sur une base mensuelle) pour signer un CRL, mais c'est à peu près tout.

  • A CA intermédiaire reçoit un certificat par la CA racine, en tant que procédure unique.

  • Tous les certificats d'utilisateur sont délivrés par l'autorité de certification intermédiaire.

Si l'autorité de certification intermédiaire est compromise (qui est concevable, car elle est utilisée souvent et provient probablement probablement une partie d'un réseau), la racine peut toujours émettre un CRL qui révoque cette ca. intermédiaire.


Cela étant dit, vous devriez considérer qu'il y a deux pki instances au travail dans votre cas. Avec SSL/TLS et certificats clients:

  • Le serveur possède un certificat, que le client valide.
  • Le client possède un certificat que le serveur valide.

Ces deux certificats peuvent vivre dans un monde séparé, émis par des ca.

Pour le certificat de serveur, vous avez besoin Le ​​client ​​Pour avoir accès à toutes les informations requises pour vous assurer que le certificat de serveur est valide, ce qui inclut une CRL régulièrement émise ou quelque chose d'équivalent (Réponses OCSP ...). Je suppose ici que vous n'émettez pas ce certificat vous-même; Au lieu de cela, vous achetez un "certificat SSL" à partir d'une CA commerciale, car l'autorité de certification root est déjà distribuée dans tous les systèmes clients et que CA émit et publie la CRL.

Voyons maintenant sur les certificats clients. Ces certificats doivent être validés par votre serveur. Et vous êtes aussi celui qui décidera quels certificats doivent être révoqués. En d'autres termes, tout CRL serait un mécanisme par lequel vous serez d'accord avec vous-même. En ce sens, il s'agit entièrement de votre entreprise et vous pouvez remplir cette fonctionnalité de quelque manière que ce soit comme vous le voyez. Par exemple, vous pouvez maintenir, sur le serveur, une table SQL qui répertorie les animateurs des certificats clients à rejeter et la révocation ajouterait simplement une entrée dans ce tableau. Lorsque vous vous parlez, vous n'avez pas nécessairement besoin de Sign Vos messages mentaux!

Quoi qu'il en soit, vous avez toujours besoin de la capacité de révoquer des certificats ou quelque chose de similaire. À ce stade, vous devez comprendre qu'il existe une différence entre -authentification (en veillant à ce que le client qui vous parle est BOB) et autorisation (décidant de ce que Bob devrait être autorisé à faire). Supposons que la clé privée de Bob soit compromise:

  1. Étant donné que la clé de Bob peut être de mauvaise qualité, vous ne pouvez plus accepter le certificat de Bob comme une preuve de l'identité de Bob. Ce certificat devrait être "annulé" d'une manière ou d'une autre (par exemple la révocation).

  2. Étant donné que la révocation de certificats est asynchrone, vous avez également besoin d'un système "bloc de blocage rapide" qui conserve tout BOB prétendu hors du système immédiatement. Ceci est fait sur la couche d'autorisation: vous "désactivez" temporairement le compte de Bob, ou définissez ses droits d'accès sur "Rien".

  3. Bob est toujours Bob, cependant, un client (éventuellement payant). Il voudra se connecter à nouveau et cela devrait fonctionner. Par conséquent, les droits d'accès de Bob devront être activés à nouveau. Cependant, vous devriez le faire que lorsque Bob a reçu un nouveau certificat (avec une nouvelle paire de clés publics/privée, bien sûr) et l'ancien certificat de Bob est maintenant rejeté par votre serveur.

Par conséquent, vous avez vraiment besoin, de toute leur généralité, un moyen de rejeter les certificats qui sembleraient autrement bien. La révocation est une telle manière; Un autre consiste à émettre uniquement des certificats très courts (valables pour, par exemple, une semaine au plus), mais cela nécessite de repousser de nouveaux certificats à des clients quotidiens ou hebdomadaires, et le logiciel client n'est pas nécessairement à la hauteur d'une telle tâche. La méthode normale est donc de délivrer des certificats à long terme aux clients (valable pour un ou quelques années) et de maintenir, du côté du serveur, un mécanisme qui permet le rejet arbitraire des certificats. Conceptuellement, ce mécanisme est aussi simple que d'avoir une liste de "certificats indésirables" que le serveur consulte. A CRL est une mise en forme standard pour une telle liste, que la délivrance de CAsigne pour permettre le transport sur des supports non sécurisés. Cependant, comme expliqué ci-dessus, cette liste doit être transférée entre votre ca et votre serveur, qui peut être la même machine et ne nécessite pas nécessairement une telle signature.

16
Thomas Pornin