使用 Let's Encrypt 获取免费TLS加密证书
2023 年了, 互联网上不应该还存在未加密的 Web 服务
前言
新手程序员在入门 Web 开发时, 经常可以在几分钟内搭建起一个 HTTP 服务, 然而当需要把 HTTP 服务变成 HTTPS 服务时, 大部分人会被挡在门外, 最大的阻碍就是没有一个经过认证的加密证书.
有个方法是使用自签证书来获得加密, 这种方法是解决了加密问题, 但是因为自签证书并没有经过操作系统和浏览器的信任, 这就需要我们在每个客户端安装自己的根证书, 自己开发调试还好, 如果给其他人提供服务不可能要求别人安装我们自己签名的证书. 而且要自签出合格的证书也不是一件简单的事情.
经过认证的加密证书通常需要从证书颁发机构 (CA) 获取, 而且往往价格不菲. 作为一名白嫖用户我们不可能去花那个钱, 那么是否只能放弃加密, 普通用户在互联网上不配拥有安全了呢? 那倒未必, Let’s Encrypt 就为我们提供了免费的TLS加密证书.
Let’s Encrypt
Let’s Encrypt 是一家专门为网站免费提供 TLS 证书的颁发机构, 据官网的宣传, 已经为 2.25 亿个网站提供了免费证书. Let’s Encrypt 签的证书有效期只有 90 天, 这就需要我们每隔 90 天以内重新获取证书. Let’s Encrypt 支持签泛域名证书, 这代表我们签一张证书就可以给所有的子域名使用, 对比价格高昂的商业泛域名 证书, 属实是很良心了.
下面我将介绍如何用简单的方法获得证书.
准备
- 一个自己的域名, 可以不需要服务器, 便宜的域名一年才二十几块钱
- 下载并安装 certbot Windows 客户端, 下载链接: https://github.com/certbot/certbot/releases/latest/download/certbot-beta-installer-win_amd64_signed.exe, 其他环境可以参考 certbot 官方文档
获取证书
这里只介绍使用手动获取方式
测试 certbot 命令
certbot 程序需要以管理员身份运行
certbot --help
手动获取证书
certbot certonly --manual -d "*.lintech1024.com"
运行上面那条命令后会打印一个 token 值, 需要在域名解析里添加一条 TXT 记录, 证明你拥有这个域名的所有权, 注意主机记录要填 _acme-challenge
添加完域名解析后稍等片刻, 在命令行按下回车键继续, 如果成功的话会在 C:\Certbot\live\lintech1024.com
目录下找到生成的文件
手动续约证书
certbot renew --manual -d "*.lintech1024.com"
文件介绍
- cert.pem: 服务端证书
- chain.pem: 根证书和中间证书
- fullchain.pem: 包括 cert.pem 和 chain.pem
- privkey.pem: 证书的私钥
如果只为浏览器提供服务, 只需要 cert.pem 和 privkey.pem 文件即可, 浏览器会自己寻找中间证书, 而如果为无法自己寻找中间证书的客户端提供服务, 则需要 fullchain.pem 和 privkey.pem 文件. 例如搭建一个 Git 服务器, Git 客户端无法通过 HTTPS 链接拉取仓库, 只能关闭加密验证