Journaux de transparence des certificats (TC)

Dernière mise à jour : | Voir toute la documentation

Certificate Transparency (CT) est un système pour enregistrer et surveiller la délivrance des certificats TLS. CT améliore considérablement la capacité de chacun à surveiller et à étudier l'émission de certificats, et ces capacités ont conduit à de nombreuses améliorations de l'écosystème CA et de la sécurité du Web. En conséquence, le CT devient rapidement une infrastructure critique.

Let's Encrypt soumet tous les certificats que nous délivrons aux journaux TC. Nous exploitons également deux journaux annuels de CT nommés Oak et Sapling. Toutes les autorités de certification publiquement reconnues sont les bienvenues pour contribuer à nos journaux. De nombreux certificats racine d'autorité de certification ont déjà été inclus dans nos journaux CT. Si vous exploitez une autorité de certification et que votre émetteur n'est pas dans notre liste d'émetteurs acceptés, veuillez déposer un message ici.

Inscrivez-vous pour recevoir des notifications dans le catégorie des annonces CT de notre forum communautaire pour voir les annonces majeures concernant nos journaux CT.

Financement

Si votre organisation souhaite nous aider à poursuivre ce travail, nous vous invitons à envisager un parrainage ou un don.

Architecture

Consultez notre blog pour voir comment Let's Encrypt exécute les journaux CT !

Surveillance du journal

Let's Encrypt a créé un outil de surveillance des journaux CT open-source appelé CT Woodpecker. Nous utilisons cet outil pour contrôler la stabilité et la conformité de nos propres journaux, et nous espérons que d'autres le trouveront également utile.

Journaux TC

Des informations sur les différents états du cycle de vie d'un journal de CT peuvent être trouvées ici.

Production

Test

Sunlight


Opérations de journalisation

Pour énumérer les racines incluses pour un journal CT particulier, vous pouvez exécuter la commande suivante dans le terminal de votre choix :

$ for i in $(curl -s https://oak.ct.letsencrypt.org/2020/ct/v1/get-roots | jq -r '.certificates[]'); do
    echo '------'; base64 -d <<< "${i}" | openssl x509 -inform der -noout -issuer -serial
done

La soumission des certificats à un journal CT est généralement gérée par les autorités de certification. Si vous souhaitez expérimenter avec ceci, commencez par récupérer un certificat arbitraire encodé en PEM à partir de notre site web préféré. Copiez et collez le bloc suivant dans votre terminal.

$ echo | \
openssl s_client \
    -connect "letsencrypt.org":443 \
    -servername "letsencrypt.org" \
    -verify_hostname "letsencrypt.org" 2>/dev/null | \
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > example.crt

Avant qu'un certificat ne puisse être soumis, il doit être encodé en JSON dans une structure spéciale. Vous pouvez utiliser le générateur JSON fourni par https://crt.sh/gen-add-chain pour effectuer cette opération. L'utilitaire crt.sh renverra un paquet JSON. Téléchargez le paquet sur votre ordinateur, renommez le fichier si nécessaire et lancez la commande suivante pour effectuer l'opération add-chain (RFC 6962 section 4.1) pour soumettre le certificat à un journal CT. La sortie contiendra une signature qui est en fait un SCT. Nous reviendrons sur la signature dans un moment.

$ curl \
    -X POST \
   --data @example-json-bundle.json \
    -H "Content-Type: application/json" \
    -H "User-Agent: lets-encrypt-ct-log-example-1.0" \
   https://oak.ct.letsencrypt.org/2020/ct/v1/add-chain
{"sct_version":0,"id":"5xLysDd+GmL7jskMYYTx6ns3y1YdESZb8+DzS/JBVG4=","timestamp":1576689972016,"extensions":"","signature":"BAMARzBFAiEA4OmuTcft9Jq3XLtcdZz9XinXCvYEY1RdSQICXayMJ+0CIHuujkKBLmQz5Cl/VG6C354cP9gxW0dfgMWB+A2yHi+E"}

Pour confirmer que le journal CT a été signé par le shard Oak 2020, nous utilisons le champ id de la commande ci-dessus et l'exécutons avec la commande suivante. Le résultat de cette opération sera l'ID du journal du CT.

$ base64 -d <<< "5xLysDd+GmL7jskMYYTx6ns3y1YdESZb8+DzS/JBVG4=" | xxd -p -c 64 | sed -e 's/../&:/g' -e 's/:$//' | tr '[:lower:]' '[:upper:]'
E7:12:F2:B0:37:7E:1A:62:FB:8E:C9:0C:61:84:F1:EA:7B:37:CB:56:1D:11:26:5B:F3:E0:F3:4B:F2:41:54:6E

En utilisant le champ de signature, nous pouvons vérifier que le certificat a été soumis à un journal. En utilisant notre guide d'approfondissement SCT, vous pouvez décoder plus en profondeur cette valeur.

$ base64 -d <<< "BAMARzBFAiEA4OmuTcft9Jq3XLtcdZz9XinXCvYEY1RdSQICXayMJ+0CIHuujkKBLmQz5Cl/VG6C354cP9gxW0dfgMWB+A2yHi+E" | xxd -p -c 16 | sed -e 's/../&:/g' -e 's/:$//' | tr '[:lower:]' '[:upper:]'
04:03:00:47:30:45:02:21:00:E0:E9:AE:4D:C7:ED:F4
9A:B7:5C:BB:5C:75:9C:FD:5E:29:D7:0A:F6:04:63:54
5D:49:02:02:5D:AC:8C:27:ED:02:20:7B:AE:8E:42:81
2E:64:33:E4:29:7F:54:6E:82:DF:9E:1C:3F:D8:31:5B
47:5F:80:C5:81:F8:0D:B2:1E:2F:84