You are currently viewing 1文讲解网站SSL/TLS证书原理并示例如何制作长期的SSL/TLS证书

1文讲解网站SSL/TLS证书原理并示例如何制作长期的SSL/TLS证书

前言

在为我的网站配置Web服务器时,我需要配置SSL/TLS并使用Certbot获取Let’s Encrypt证书。尽管这过程本身并不复杂,但Let’s Encrypt证书有一个“恼人”的限制——它们的有效期只有90天。由于我当前的服务器设置方式,我一直未能找到自动续订证书的替代方案,这迫使我每90天就得手动登录服务器执行一次续订操作。

我知道像宝塔这样的面板可以实现90天证书的自动续订。然而,如果这类面板连续超过两个版本不更新(通常1-2个月发布一个新版本),它们的证书续订脚本就会失效,形成了一个完美的“死循环”,问题依旧存在。

我当时就在想,要是证书的有效期能超过90天就好了,并开始思考SSL/TLS证书的最长有效期是多久,以及证书中的字段可以设定多长。在本文中,我将深入探索、测试并了解更多关于TLS证书的知识,深度讲解网站SSL/TLS证书原理及生成方法。我也会尝试解答如何制作长期的SSL/TLS证书,希望能帮助那些也面临同样困扰的朋友们。

由于TLS是SSL升级版,以下重点讲解以TLS证书为示例。

关于 TLS 证书

首先要知道,证书具有由标准 X.509(公钥证书)定义的格式,这就是为什么有时阅读有关证书的内容时会将其读作“X.509 证书”。但据我所知,X.509 仅定义公钥证书结构,而 RFC 5280 定义其结构以及在 Internet 上用于 TLS 的用法。我阅读并遵循了 RFC 5280 的内容。

web cert

如上图所示,TLS 证书有多个字段,一些字段描述有效性、用于公钥的算法,但其他字段只是“信息性”字段,例如颁发者名称,可以在创建证书时自定义。还有其他选项卡,例如“ISRG Root X1”和“R11”,它们是根证书和中间证书。“ISGR Root X1”颁发了一个名为“R11”的证书,并使用“R11”向我的网站“0x00.cl”颁发了证书,这是一个信任链,如果您的浏览器或客户端可以信任根证书(例如“ISGR Root X1”),那么它也应该信任它颁发的证书。Chrome 和 Firefox 等浏览器使用 通用 CA 数据库 (ccadb) 将证书颁发机构 (CA) 包含在浏览器中。

您可以创建自己的根证书并成为自己的 CA 但是因为该证书不会包含在任何软件中,所以大多数(如果不是全部)软件都会抛出错误或至少发出有关证书不受信任的警告。badssl 是一个展示坏证书和好证书示例的网站。

开始制作证书

更多文章内容为会员专属,请您先登录/注册后方可查看。

最后的总结

探索 TLS 证书当然很有趣,我确实学到了很多关于它们的知识,特别是因为我必须多次阅读 RFC 5280,但也有点伤心,虽然 1GB 的证书在技术上可以工作,但最终它会受到客户端(例如您的 Web 浏览器或 CLI 工具,如 curl)的限制。我确实希望能够做一些“更疯狂”的事情,例如能够使用负日期或超过 9999 年的日期,例如 openssl 允许设置低于 1950 年的日期,例如 0000,但这不符合 RFC 5280 标准,而 python 包 cryptography 确实将限制设置为 1950 年。

在这篇博客的介绍中,跟着我实验的案例结果:

  • 证书可以有多大?对于 curl 来说,工作量是 100kB,对于像 Firefox 这样的 Web 浏览器来说,大约是 60kB,尽管 Firefox TLS 库的工作方式不同,所以结果可能会有所不同。
  • 它能持续多久?从 1950 年 1 月 1 日到 9999 年 12 月 31 日。大约 8050 年。

希望您也能从本博客中轻松理解并学到一些有关 TLS 证书的知识。了解其工作原理并学会自己制作TLS证书。

相关教程文章推荐:1文教会你使用GPT同时分析处理多个文档