跳到主要内容

使用 Let's Encrypt 获取免费TLS加密证书

小林
软件工程师, 专注云原生和Go开发

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 命令

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 链接拉取仓库, 只能关闭加密验证