最后更新:Feb 25, 2020 | 所有文档

证书透明度(CT)日志是用于记录和监视 TLS 证书颁发的系统。CT 极大地增强了人们监控和研究证书颁发的能力,这些功能使 CA 生态系统和 Web 安全性得到了大量改进。因此,CT 正迅速成为关键基础设施。

Let’s Encrypt 将我们发出的所有证书提交给 CT 日志。我们还运营着两个年度分片(annually sharded)的CT日志,分别名为 Oak 和Testflume。欢迎所有被公共信任的证书颁发机构提交证书至我们的日志。 我们的CT日志中已包含许多证书颁发机构的根证书。 若您的根证书没有包含在我们的日志中,请通过电子邮件联系我们以将新的根证书添加到我们的日志中。

在我们的社区论坛的CT公告类别中开启通知提醒,以查看有关CT日志的主要公告。

资金来源

我们要感谢以下合作伙伴慷慨赞助 Let’s Encrypt 的 CT 日志。如果您的组织希望帮助我们继续这项工作,请考虑捐赠或成为赞助商

Sectigo

架构

详见“Let’s Encrypt如何运行CT日志”

日志监控

Let’s Encrypt 开发了一个名为 CT Woodpecker 的开源 CT 日志监控工具。我们使用此工具来监控我们自己的日志的稳定性和合规性,我们希望其他人也会发现它的实用性。

CT 日志服务器

生产环境日志

  • Oak已被添加至苹果谷歌的CT项目中。
  • 我们生产环境的API端点将证书提交至此处。
    • 名称: Oak 2019
      链接: https://oak.ct.letsencrypt.org/2019
      公钥: MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEFkqNKRuZ+Z8IOsnNJrUZ8gwp+KKGOdQrJ/HKhSadK/SJuoCc9+dxQ7awpmWIMr9SKcQeG5uRzG1kVSyFN4Wfcw==
      Log ID: 65:9B:33:50:F4:3B:12:CC:5E:A5:AB:4E:C7:65:D3:FD:E6:C8:82:43:77:77:78:E7:20:03:F9:EB:2B:8C:31:29
      Window Start: 2019-01-01T00:00Z
      Window End: 2020-01-07T00:00Z
      State: Rejected - Shard Expired
    • 名称: Oak 2020
      链接: https://oak.ct.letsencrypt.org/2020
      公钥: MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEfzb42Zdr/h7hgqgDCo1vrNJqGqbcUvJGJEER9DDqp19W/wFSB0l166hD+U5cAXchpH8ZkBNUuvOHS0OnJ4oJrQ==
      Log ID: 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
      Window Start: 2020-01-01T00:00Z
      Window End: 2021-01-07T00:00Z
      State: Usable
    • 名称: Oak 2021
      链接: https://oak.ct.letsencrypt.org/2021
      公钥: MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAELsYzGMNwo8rBIlaklBIdmD2Ofn6HkfrjK0Ukz1uOIUC6Lm0jTITCXhoIdjs7JkyXnwuwYiJYiH7sE1YeKu8k9w==
      Log ID: 94:20:BC:1E:8E:D5:8D:6C:88:73:1F:82:8B:22:2C:0D:D1:DA:4D:5E:6C:4F:94:3D:61:DB:4E:2F:58:4D:A2:C2
      Window Start: 2021-01-01T00:00Z
      Window End: 2022-01-07T00:00Z
      State: Usable
    • 名称: Oak 2022
      链接: https://oak.ct.letsencrypt.org/2022
      公钥: MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEhjyxDVIjWt5u9sB/o2S8rcGJ2pdZTGA8+IpXhI/tvKBjElGE5r3de4yAfeOPhqTqqc+o7vPgXnDgu/a9/B+RLg==
      Log ID: DF:A5:5E:AB:68:82:4F:1F:6C:AD:EE:B8:5F:4E:3E:5A:EA:CD:A2:12:A4:6A:5E:8E:3B:12:C0:20:44:5C:2A:73
      Window Start: 2022-01-01T00:00Z
      Window End: 2023-01-07T00:00Z
      State: Usable
    • 名称: Oak 2023
      链接: https://oak.ct.letsencrypt.org/2023
      公钥: MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEsz0OeL7jrVxEXJu+o4QWQYLKyokXHiPOOKVUL3/TNFFquVzDSer7kZ3gijxzBp98ZTgRgMSaWgCmZ8OD74mFUQ==
      Log ID: B7:3E:FB:24:DF:9C:4D:BA:75:F2:39:C5:BA:58:F4:6C:5D:FC:42:CF:7A:9F:35:C4:9E:1D:09:81:25:ED:B4:99
      Window Start: 2023-01-01T00:00Z
      Window End: 2024-01-07T00:00Z
      State: Pending

测试环境日志

  • 这些日志服务器中的SCT不应该被添加到被公共信任的证书中。
  • Let’s Encrypt的生产和测试ACME端点环境都向Testflume提交证书,但是生产环境不使用该服务器产生的SCT。
  • 我们将在此处测试Trilliancertificate-transparency-go的新版本后部署到生产环境中。
  • Testflume接受的根证书列表包括所有Oak接受的根证书及其他测试用根证书。
  • 其他证书颁发机构可以使用Testflume进行测试。
    • 名称: Testflume 2019
      链接: https://testflume.ct.letsencrypt.org/2019
      公钥: MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAg3+vFOesFW51rKECekioAt9Zo50atRoOJ0qLxF7DIEHsHneXLEpgO1WMreleRy1vEbUJD7TXoH9r8qSDGvyew==
      Log ID: 84:9F:5F:7F:58:D2:BF:7B:54:EC:BD:74:61:1C:EA:45:C4:9C:98:F1:D6:48:1B:C6:F6:9E:8C:17:4F:24:F3:CF
      Window Start: 2019-01-01T00:00Z
      Window End: 2020-01-07T00:00Z

    • 名称: Testflume 2020
      链接: https://testflume.ct.letsencrypt.org/2020
      公钥: MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEjdjcoKpeBShHgHvRm3BxD5+l+eHZudv3KmD5SDcLcI01Vj5TDTmxanQKCgpvm9pfnfB6URMQV3hhU1I02jRoRw==
      Log ID: C6:3F:22:18:C3:7D:56:A6:AA:06:B5:96:DA:8E:53:D4:D7:15:6D:1E:9B:AC:8E:44:D2:20:2D:E6:4D:69:D9:DC
      Window Start: 2020-01-01T00:00Z
      Window End: 2021-01-07T00:00Z

    • 名称: Testflume 2021
      链接: https://testflume.ct.letsencrypt.org/2021
      公钥: MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdCLoJNt1QcNa7sNDp7g7oTJ+o/UIYEM6N/IZWT+dhdqtJZC+AODJ/4exdOwG04B4K6WrN1VB2ELKQIc/wU1lCw==
      Log ID: 03:ED:F1:DA:97:76:B6:F3:8C:34:1E:39:ED:9D:70:7A:75:70:36:9C:F9:84:4F:32:7F:E9:E1:41:38:36:1B:60
      Window Start: 2021-01-01T00:00Z
      Window End: 2022-01-07T00:00Z

    • 名称: Testflume 2022
      链接: https://testflume.ct.letsencrypt.org/2022
      公钥: MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEjy/rXcABuf0yhrm1+XgjDnh4XPD7vfMoyJOyT+KA+c2zuXVR98yQmp/Bl5ZFdGFwJuFcVrCw7IDo0EGKs7UCww==
      Log ID: 23:27:EF:DA:35:25:10:DB:C0:19:EF:49:1A:E3:FF:1C:C5:A4:79:BC:E3:78:78:36:0E:E3:18:CF:FB:64:F8:C8
      Window Start: 2022-01-01T00:00Z
      Window End: 2023-01-07T00:00Z

    • 名称: Testflume 2023
      链接: https://testflume.ct.letsencrypt.org/2023
      公钥: MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE8aLpnumqeISmQEB3hKPgtPJQG3jP2IftfaUQ4WPUihNBwUOEk1R9BMg5RGQwebWSsRlGIRiCvtE97Q45Vh3mqA==
      Log ID: 55:34:B7:AB:5A:6A:C3:A7:CB:EB:A6:54:87:B2:A2:D7:1B:48:F6:50:FA:17:C5:19:7C:97:A0:CB:20:76:F3:C6
      Window Start: 2023-01-01T00:00Z
      Window End: 2024-01-07T00:00Z

日志操作

要枚举特定CT日志服务器包含的根证书,您可以在所选终端中运行以下命令:

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

证书颁发机构通常负责将证书提交至CT日志服务器。 如果您想尝试提交证书至CT日志服务器, 请先从我们喜欢的网站获取PEM格式的证书。 请复制以下代码块并粘贴到您的终端内。

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

在提交证书前,必须按特殊结构对该证书进行JSON编码。 您可以使用https://crt.sh/gen-add-chain提供的JSON生成器来执行此任务。 crt.sh将返回一个JSON捆绑包。 请将该JSON包下载到您的计算机内,您也可以按需求重命名该文件, 之后使用以下命令来添加证书链(RFC 6962 第4章第1小节)以便将证书提交至CT日志。 该步骤会输出一个实际是SCT的签名。 看下文以获取更多关于签名的信息。

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

为了确认CT日志是由Oak 2020碎片签名的,我们使用上面命令中的id字段,并通过以下命令运行它。 结果将输出CT日志的日志ID。

  1. $ base64 -d <<< "5xLysDd+GmL7jskMYYTx6ns3y1YdESZb8+DzS/JBVG4=" | xxd -p -c 64 | sed -e 's/../&:/g' -e 's/:$//' | tr '[:lower:]' '[:upper:]'
  2. 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

我们可以使用签名字段验证证书是否已提交到日志服务器。 您可以使用我们的SCT详解以进一步解码该字段

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