View a markdown version of this page

Révocation du certificat - Amazon CloudFront

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Révocation du certificat

Lorsque des certificats doivent être révoqués, en raison d'un compromis, de changements de politique ou de résiliation de relations, vous avez besoin d'un mécanisme pour rejeter ces certificats lors de la prise de contact mTLS. CloudFront propose deux approches natives de la révocation des certificats, et vous pouvez les combiner pour un contrôle en couches.

  • OCSP (Online Certificate Status Protocol)  : CloudFront interroge le répondeur OCSP de votre autorité de certification en temps réel pour vérifier si un certificat client a été révoqué. Activez OCSP sur votre magasin de confiance et gérez la CloudFront validation automatiquement lors de la prise de contact TLS. Les résultats OCSP sont également visibles dans Connection Functions, ce qui vous permet d'accéder par programmation à l'état de révocation pour une prise de décision personnalisée.

  • CloudFront Fonctions et KeyValueStore — Vous conservez une liste des numéros de série des certificats révoqués dans un CloudFront KeyValueStore. Une fonction de connexion interroge le KeyValueStore pendant la prise de contact TLS et autorise ou refuse la connexion. Cela vous donne un contrôle total sur les données de révocation, le calendrier des mises à jour et la logique personnalisée, telle que les délais de grâce ou les IP-based exceptions.

Comparaison : OCSP et CloudFront Functions avec KeyValueStore
OCSP CloudFront Fonctions + KeyValueStore
Source de données Répondeur OCSP de l'autorité de certification Vous gérez la liste de révocation
Mécanisme de mise à jour Real-time requête auprès de CA Vous envoyez les mises à jour à KeyValueStore
Logique personnalisée Disponible via les fonctions de connexion Intégré à votre code de fonction
Dépendance extérieure Nécessite la disponibilité d'un répondeur CA OCSP Aucune dépendance externe
Idéal pour Autorités de certification qui gèrent les répondeurs OCSP ; statut en temps réel CA-authoritative Self-managed révocation ; politiques personnalisées ; autorités de certification sans support OCSP

Vous pouvez utiliser les deux approches ensemble. Activez l'OCSP pour le contrôle de CA-authoritative révocation, puis utilisez une fonction de connexion pour superposer une logique supplémentaire au résultat OCSP, par exemple, en autorisant la révocation de certificats provenant de plages IP fiables pendant une période de grâce.

OCSP (Protocole d'état des certificats en ligne)

L'OCSP est un protocole en temps réel qui vérifie l'état de révocation d'un certificat directement auprès de l'autorité de certification (CA). Au cours du processus de signature du certificat, l'autorité de certification intègre une URL de répondeur OCSP dans le certificat. Lorsqu'un client présente son certificat lors de la prise de contact mTLS, CloudFront envoie une requête OCSP à l'URL du répondeur intégré et agit en fonction de la réponse : les certificats valides continuent, les certificats révoqués sont résiliés.

CloudFront valide l'ensemble de la chaîne de certificats (le certificat feuille et jusqu'à trois certificats intermédiaires), chacun par rapport à l'URL de son répondeur OCSP respectif. Les certificats du Trust Store sont traités comme des ancres de confiance et sont exclus de la validation OCSP. Cela s'applique à tous les certificats du Trust Store, qu'il s'agisse d'une autorité de certification racine ou d'une autorité de certification intermédiaire. Lorsque vous placez une autorité de certification intermédiaire dans votre magasin de confiance, elle devient un point d'ancrage de confiance et la validation de la chaîne s'arrête à ce certificat. Seuls les certificats situés en dessous de la chaîne le sont OCSP-validated.

Activer OCSP

Activez OCSP sur votre Trust Store. Lorsque cette option est activée, effectue CloudFront automatiquement la validation OCSP pour tout certificat client contenant une URL de répondeur OCSP dans son extension Authority Information Access (AIA). Une fois l'OCSP activé, chaque certificat de la chaîne de certificats client située sous l'ancre de confiance doit avoir une URL OCSP. Si un certificat situé sous l'ancre de confiance ne contient pas d'URL OCSP, CloudFront cela n'établit pas la connexion. Les certificats du Trust Store (ancres de confiance) sont exemptés de cette exigence.

CloudFront met en cache les réponses OCSP à la périphérie afin de réduire le temps d'aller-retour et de se protéger contre les interruptions de service du répondeur OCSP. Les réponses OCSP sont mises en cache pendant environ 30 minutes, et l'état de révocation mis à jour peut prendre jusqu'à 30 minutes pour être reflété.

OCSP génère des fonctions de connexion

Lorsqu'une fonction de connexion est configurée sur la même distribution, elle l' CloudFrontinvoque une fois la validation OCSP terminée. L'objet de connexion contient l'état OCSP des certificats feuille et intermédiaire :

{ "clientCertificate": { "certificates": { "leaf": { "subject": "CN=client.example.com, O=Example Org", "issuer": "CN=Intermediate CA, O=Example Org", "serialNumber": "00:a7:30:9e:73:7b:3e:63:bd:b7:c0:7e:bf:d5:c9:86", "validity": { "notBefore": "2024-01-01T00:00:00Z", "notAfter": "2025-01-01T00:00:00Z" }, "sha256Fingerprint": "AB:CD:EF:12:34:56:78:90:AB:CD:EF:12:34:56:78:90:AB:CD:EF:12:34:56:78:90:AB:CD:EF:12:34:56:78:90", "ocspEndpoint": "http://ocsp.example.org" }, "intermediates": [ { "subject": "CN=Intermediate CA, O=Example Org", "issuer": "CN=Root CA, O=Example Org", "serialNumber": "00:a7:30:9e:73:7b:3e:63:bd:b7:c0:7e:bf:d5:c9:86", "validity": { "notBefore": "2020-01-01T00:00:00Z", "notAfter": "2030-01-01T00:00:00Z" }, "sha256Fingerprint": "12:34:56:78:90:AB:CD:EF:12:34:56:78:90:AB:CD:EF:12:34:56:78:90:AB:CD:EF:12:34:56:78:90:AB:CD:EF", "ocspEndpoint": "http://ocsp.example.org" } ] }, "revocationStatus": { "chainValidity": "Valid", // "Valid" | "Invalid" | "Unknown" "certificates": { "leaf": { "method": "OCSP", // "OCSP" "status": "Good", // "Good" | "Revoked" | "Unknown" | "Error" "serialNumber": "00:a7:30:9e:73:7b:3e:63:bd:b7:c0:7e:bf:d5:c9:86" }, "intermediates": [ { "method": "OCSP", // "OCSP" "status": "Error", // "Good" | "Revoked" | "Unknown" | "Error" "errorType": "InternalError", // "InternalError" | "OCSP response verification failed: {Type}" "serialNumber": "00:a7:30:9e:73:7b:3e:63:bd:b7:c0:7e:bf:d5:c9:86" } ] } } }, "clientIp":"127.0.0.1", "endpoint":"d123.cloudfront.net", "distributionId":"E1NXS4MQZH501R", "connectionId":"xdzQ6lJUDUt8b7OuqOD8lmzOC9HcMaXPmhH5ZdzLCZpKxqzfCPpR4A==" }

Le chainValidity champ peut être ValidInvalid, ouUnknown. Les status valeurs de certificat individuelles peuvent être GoodRevoked,Unknown, ouError. Le errorType champ contient InternalError ou OCSP response verification failed: {Type} quand le statut estError.

La fonction de connexion peut annuler le résultat de l'OCSP, par exemple en autorisant la révocation d'un certificat provenant d'une plage d'adresses IP fiables ou en refusant un certificat considéré comme « bon » par OCSP sur la base d'une logique métier supplémentaire.

Note

Le errorType champ ne sera présent que si le statut l'estError.

Exemple : gestion OCSP personnalisée avec exception IP sécurisée

function connectionHandler(connection) { var revocationStatus = connection.clientCertificate.revocationStatus; var trustedIP = (connection.clientIp === "[IP_ADDRESS]"); if (revocationStatus.chainValidity === "Invalid") { if (trustedIP) { connection.allow(); } else { connection.deny(); } } else if (revocationStatus.certificates.leaf.status === "Error") { console.log(revocationStatus.certificates.leaf.errorType); connection.deny(); } else { connection.allow(); } }

Comportement de défaillance de l'OCSP

Lorsqu'il est CloudFront impossible de déterminer l'état de révocation d'un certificat (parce que le répondeur OCSP est inaccessible, renvoie une erreur ou renvoie « inconnu »), la connexion est refusée par CloudFront défaut. Pour implémenter un comportement de défaillance logicielle, utilisez une fonction de connexion. Les fonctions de connexion ne seront pas exécutées si l'OCSP est activé et si l'URL OCSP est absente des certificats clients. Le résultat OCSP est disponible dans l'objet de connexion, et votre fonction peut autoriser les connexions lorsque l'état de l'OCSP est indéterminé :

async function connectionHandler(connection) { var revocationStatus = connection.clientCertificate.revocationStatus; if (revocationStatus.certificates.leaf.status === "Error" || revocationStatus.certificates.leaf.status === "Unknown") { // OCSP responder unreachable — allow connection (soft-fail) connection.logCustomData(`OCSP_SOFT_FAIL:${revocationStatus.certificates.leaf.errorType}`); return connection.allow(); } if (revocationStatus.chainValidity === "Invalid") { return connection.deny(); } return connection.allow(); }

Révocation du certificat avec CloudFront Functions et KeyValueStore

Vous pouvez utiliser CloudFront Connection Functions avec KeyValueStore pour implémenter la vérification de révocation des certificats sans aucune dépendance externe. Vous conservez une liste des numéros de série des certificats révoqués dans un KeyValueStore, et votre fonction de connexion vérifie chaque certificat client par rapport à cette liste lors de la prise de contact TLS.

Le processus de révocation du certificat fonctionne comme suit :

  1. Enregistrez les numéros de série des certificats révoqués dans un CloudFront KeyValueStore.

  2. Lorsqu'un client présente un certificat, votre fonction de connexion est invoquée.

  3. La fonction vérifie le numéro de série du certificat par rapport au KeyValueStore.

  4. Si le numéro de série est trouvé dans le magasin, le certificat est révoqué.

  5. Votre fonction refuse la connexion pour les certificats révoqués.

Cette approche permet de vérifier les révocations en temps quasi réel sur l'ensemble CloudFront du réseau périphérique mondial de l'entreprise.

Pour mettre en œuvre cette approche, vous devez :

  • Une distribution configurée avec Viewer mTLS

  • A KeyValueStore contenant les numéros de série des certificats révoqués

  • Une fonction de connexion qui interroge le KeyValueStore pour vérifier l'état du certificat

Lorsqu'un client se connecte, CloudFront valide le certificat par rapport au Trust Store, puis exécute votre fonction de connexion. Votre fonction vérifie le numéro de série du certificat par rapport au numéro de série KeyValueStore et autorise ou refuse la connexion.

Étape 1 : créer un formulaire KeyValueStore pour les certificats révoqués

Préparez les numéros de série de vos certificats révoqués au format JSON :

{ "data": [ { "key": "ABC123DEF456", "value": "" }, { "key": "789XYZ012GHI", "value": "" } ] }

Téléchargez ce fichier JSON dans un compartiment S3, puis créez KeyValueStore :

aws s3 cp revoked-serials.json s3://your-bucket-name/revoked-serials.json aws cloudfront create-key-value-store \ --name revoked-serials-kvs \ --import-source '{ "SourceType": "S3", "SourceARN": "arn:aws:s3:::your-bucket-name/revoked-serials.json" }'

Attendez que le KeyValueStore provisionnement soit terminé. Vérifiez le statut avec :

aws cloudfront get-key-value-store --name "revoked-serials-kvs"

Étape 2 : Création de la fonction de connexion de révocation

Créez une fonction de connexion qui vérifie les numéros de série des certificats par rapport à KeyValueStore :

aws cloudfront create-connection-function \ --name "revocation-control" \ --connection-function-config file://connection-function-config.json \ --connection-function-code file://connection-function-code.txt

Le fichier de configuration spécifie l' KeyValueStore association :

{ "Runtime": "cloudfront-js-2.0", "Comment": "A function that implements revocation control via KVS", "KeyValueStoreAssociations": { "Quantity": 1, "Items": [ { "KeyValueStoreArn": "arn:aws:cloudfront::account-id:key-value-store/kvs-id" } ] } }

Exemple de code de fonction de connexion :

import cf from 'cloudfront'; async function connectionHandler(connection) { const kvsHandle = cf.kvs(); // Get client serial number from client certificate const clientSerialNumber = connection.clientCertificate.certificates.leaf.serialNumber; // Check KVS to see if serial number exists as a key // Remove : from the clientSerialNumber if KVS entries dont have it const serialNumberExistsInKvs = await kvsHandle.exists(clientSerialNumber.replaceAll(":", "")); // Deny connection if serial number exists in KVS if (serialNumberExistsInKvs) { console.log("Connection denied — certificate revoked"); connection.logCustomData("Connection denied — certificate revoked"); return connection.deny(); } // Allow connections that don't exist in KVS console.log("Connection allowed"); return connection.allow(); }

Étape 3 : Testez votre fonction de révocation

Utilisez la CloudFront console pour tester votre fonction de connexion à l'aide d'exemples de certificats. Accédez à la fonction de connexion dans la console et utilisez l'onglet Test.

  • Collez un exemple de certificat au format PEM dans l'interface de test.

  • Spécifiez éventuellement une adresse IP client pour tester IP-based la logique.

  • Choisissez la fonction de test pour voir les résultats de l'exécution.

  • Consultez les journaux d'exécution pour vérifier la logique de votre fonction.

Testez avec des certificats valides et révoqués pour vous assurer que votre fonction gère correctement les deux scénarios.

Étape 4 : Associez la fonction à votre distribution

Une fois que vous avez publié votre fonction de connexion, associez-la à votre TLS-enabled distribution m pour activer la vérification de révocation des certificats. Accédez à vos paramètres de distribution, accédez à la section « Authentification mutuelle du visualiseur (mTLS) », sélectionnez votre fonction de connexion et enregistrez les modifications.

Stratégies de révocation avancées

Combinez l'OCSP avec la logique de la fonction de connexion

Vous pouvez activer OCSP pour le contrôle de CA-authoritative révocation et superposer une fonction de connexion pour les politiques personnalisées. La fonction de connexion reçoit le résultat OCSP et peut appliquer une logique supplémentaire :

  • Périodes de grâce  : autorisez les certificats révoqués provenant des réseaux internes pendant une période définie pendant la rotation des certificats.

  • Accès d'urgence — Autorisez les connexions à partir d'adresses IP spécifiques même lorsque l'OCSP signale un statut révoqué.

  • Logique de refus personnalisée  : bloquez les certificats considérés comme « bons » par OCSP sur la base de vos propres données de révocation. KeyValueStore

Exemple Révocation combinée OCSP et KVS
import cf from 'cloudfront'; async function connectionHandler(connection) { var kvsHandle = cf.kvs(); var revocationStatus = connection.clientCertificate.revocationStatus; var serialNumber = connection.clientCertificate.certificates.leaf.serialNumber; // Check your own revocation list first (immediate revocation, no cache delay) var inKvs = await kvsHandle.exists(serialNumber.replaceAll(":", "")); if (inKvs) { connection.logCustomData("KVS_REVOKED:" + serialNumber); return connection.deny(); } // Then check OCSP result if (revocationStatus.chainValidity === 'Valid' && revocationStatus.certificates.leaf.status === "Revoked") { // OCSP says revoked — allow grace period from trusted IPs if (connection.clientIp.startsWith("10.0.")) { connection.logCustomData("GRACE_PERIOD:" + serialNumber + ":" + connection.clientIp); return connection.allow(); } connection.logCustomData("OCSP_REVOKED:" + serialNumber); return connection.deny(); } connection.allow(); }

Ce modèle vous permet une révocation immédiate via KVS (sans délai de cache) et une CA-authoritative révocation via OCSP, avec une gestion personnalisée des exceptions entre les deux.