在老麦的博客看见他有关SSL证书的博文(Certbot申请泛域名证书与续期),想起自己经常需要更新部署SSL证书的一个痛点。每次只是按部就班的操作,这次停下来,全面了解下关于SSL证书的来龙去脉及相关知识。
SSL/TLS协议
Netscape在1994年推出其首版网页浏览器-Netscape Navigator时,推出https协议,以SSL(Secure Sockets Layer,安全套接层)对传输数据进行加密,这是SSL的起源。
SSL利用数据加密技术,可确保数据在网络传输过程中不会被截取,从而能保证数据的安全性和完整性。SSL 协议位于 TCP/IP 协议与各种应用层协议之间。
1999 年经过 IETF(The Internet Engineering Task Force,国际互联网工程任务组)讨论和规范后,SSL改名为TLS(Transport Layer Security)。发展至今已经有TLS1.0,TLS1.1,TLS1.2等多个版本,目前最新版本是TLS1.3。
SSL协议发展历程
协议 | 发布时间 | 状态 |
---|---|---|
SSL 1.0 | 未公布 | 未公布 |
SSL 2.0 | 1995年 | 已于2011年弃用 |
SSL 3.0 | 1996年 | 已于2015年弃用 |
TLS 1.0 | 1999年 | 于2021年弃用 |
TLS 1.1 | 2006年 | 于2021年弃用 |
TLS 1.2 | 2008年 | |
TLS 1.3 | 2018年 |
(数据来源:维基百科:传输层安全性协议,2024年1月17日访问)
SSL协议的基础是公钥基础设施(Public Key Infrastructure,PKI),而公钥基础设施普遍商业运营。
(数据来源:Can I use…,2024年1月17日访问)
SSL证书
SSL证书就是遵守SSL协议的服务器数字证书,通过验证域名、服务器身份后,由受信任的数字证书授权机构(Certificate Authority,CA)颁发,具有给通过https等协议进行数据传输的各方(主要是浏览器与服务端)进行身份验证和数据传输加密等功能。
在PKI中,CA是负责发放和管理数字证书的权威机构,承担公钥体系中公钥的合法性检验的责任。
SSL证书的有效期
SSL证书在诞生时并没有效期的限制,可以是5年,10年甚至更久,但随着SSL证书的广泛使用,特别是2005年5月17日由VeriSign和Comodo牵头成立国际标准组织–CA/Browser Forum后,出台了一系列标准,SSL证书的有效期开始缩短。
关于CA/Browser Forum
Organized in 2005, we are a voluntary group of certification authorities (CAs), vendors of Internet browser software, and suppliers of other applications that use X.509 v.3 digital certificates for SSL/TLS, code signing, and S/MIME.
2018年3月,有浏览器厂商试图将SSL证书的有效期从3年缩短到1年,但在CA的抵制下妥协为2年。
2019年,浏览器厂商再次提出同样的提案,再次遭受了几乎所有CA的抵制。
2020年2月,苹果公司在违反CA/Browser Forum标准操作程序,没有呼吁投票的情况下,单方面宣布,决定在其设备上将可以使用的SSL证书有效期缩短为398天(一年时间加上一个月的缓冲期),数周后火狐就宣布跟进,而数月后谷歌的跟进则使得CA机构的抵制没有什么实际意义了。
2023年3月,谷歌仿效苹果曾经的操作,在其“共同前进”(Moving Forward, Together)路线图中宣布,将SSL证书的最长有效期从现有的398天减少到90天,甚至准备向10天的目标迈进。
浏览器厂商为什么一直在推动SSL证书有效期缩短呢?其实谷歌在其“共同前进”路线图对其动机进行了一些阐述:
缩短SSL证书生命周期一方面是为了鼓励证书部署自动化。证书自动化将推动https生态系统摆脱“巴洛克式”(巴洛克式是一种艺术风格,巴洛克的本意就是不规则的,不常规的意思),耗时且容易出错的颁发流程,降低人力成本和工作难度规避人为失误导致的事故。
另一方面,SSL证书有效期的减少,促使网站更频繁地续订证书,而续订的证书会采用最新的算法并进行密钥的轮换,从而将生态系统快速过渡到具备抗量子算法所需的加密敏捷性。
总结起来就是,缩短SSL证书的有效期,可以提高SSL证书的安全性和可信度。
SSL证书自动化部署
SSL证书有效期缩短,提高可靠性和安全性的同时,却给网络运维人员带了需要频繁更新证书的压力。随着证书有效期可能缩短到10天,证书部署自动化将是未来大势。
对于独立服务器,采用acme协议,可以实现自动申请,验证,签发,安装(更新续签)证书。acme目前已支持很多CA机构,其中包括比较著名的提供免费证书的Let’s Encrypt以及Google Trust Services。宝塔面板等很多第三方续签证书功能的实现基本都是依托acme协议。
对于CDN服务,自动续签证书目前没有太多的好办法。但是一般CDN服务商会提供证书自动续签的功能。阿里云,腾讯云的CDN服务里要实现自动续签证书,需要付费版的证书。又拍云CDN提供免费的Let’s Encrypt DV SSL 单域名证书的自动续签功能。
对于serveless服务(比如netlify,vercel等),一般可以使用其默认的https服务,无需自己部署更新证书。
对于CDN,对象云储存等部署的站点,免费证书如何自动化部署更新?在Github上找到几个不错的开源方案:certd,acme-qcloud-scf及Tencent CDN Cert Manager。
CertD能部署到自己服务器上,支持从Let’s Encrypt申请证书(支持通配符域名,域名解析支持阿里云,腾讯云,华为云等),全自动部署到阿里云,腾讯云等云服务及主机,证书自动续期更新,所有过程支持邮件通知。
而acme-qcloud-scf主要借助腾讯云云函数实现通过acme协议的Let’s Encrypt证书的自动部署和更新(Node.js 版本)。证书生成后能自动上传到腾讯云 SSL 托管平台并绑定到相关 CDN 加速域名(如上,腾讯云自带的SSL证书管理更新是付费证书才能支持的功能)。
Tencent CDN Cert Manager,顾名思义就是支持给腾讯云CDN绑定的CDN域名自动更新证书的服务,支持Docker部署。证书提供商自然也是Let’s Encrypt。
扩展阅读: