01|准备工作
开始之前,需要准备:
一台 macOS 电脑
一个自己可以管理 DNS 的域名,例如 example.com
可以登录域名 DNS 控制台
Terminal 终端
网络连接
整个流程可以理解为:
Mac
│
├── Homebrew
│
├── Certbot
│
↓
Let's Encrypt
│
↓
验证域名所有权
│
↓
签发 SSL/TLS 证书
│
↓
fullchain.pem
privkey.pemLet’s Encrypt 证书本身免费,Certbot 也是免费、开源的 ACME 客户端。
02|安装 Xcode Command Line Tools
打开 Mac 的「终端 Terminal」。 执行:
xcode-select --install如果已经安装,系统可能提示:
command line tools are already installed那就可以直接进入下一步。 Homebrew 官方文档将 Xcode Command Line Tools 列为 macOS 支持安装环境的一部分。
03|安装 Homebrew
如果你的 Mac 还没有 Brew,可以先检查:
brew --version如果提示:
command not found: brew说明还没有安装。使用 Homebrew 官方安装脚本:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"安装过程中可能要求输入 Mac 登录密码。
Apple Silicon Mac 配置环境变量 M1、M2、M3、M4、M5 等 Apple Silicon Mac,Homebrew 默认安装在:
/opt/homebrewHomebrew 官方文档也确认 Apple Silicon 默认 prefix 为 /opt/homebrew,Intel Mac 通常为 /usr/local。 如果安装结束后提示 brew: command not found,执行:
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
# 然后:
eval "$(/opt/homebrew/bin/brew shellenv)"
# 检查
brew --version正常看到版本号即可。
04|更新 Homebrew
# 执行
brew update
# 然后可以检查一下环境:
brew doctor# 如果显示类似:
Your system is ready to brew.基本就没有问题。
05|通过 Brew 安装 Certbot
接下来才进入 SSL 证书签发的核心步骤。
# 执行:
brew install certbot
# 这是 Certbot 官方针对 macOS 给出的安装方式,同时 Homebrew 当前也直接提供
# certbot Formula。安装完成后检查:
certbot --version
例如:
certbot 5.x.x就说明安装成功。
06|开始申请 SSL 证书
这里推荐 Mac 用户采用 DNS Challenge。 例如现在拥有:
example.com
# 想同时申请:
example.com
www.example.com执行:
sudo certbot certonly \
--manual \
--preferred-challenges dns \
-d example.com \
-d www.example.com第一次执行时 Certbot 会要求填写邮箱,例如:
Enter email address:输入自己的邮箱。然后需要同意服务条款。之后 Certbot 会要求证明:
这个域名确实是你的。
07|添加 DNS TXT 验证记录
Certbot 会给出类似提示:
Please deploy a DNS TXT record under the name:
_acme-challenge.example.com
with the following value:
xxxxxxxxxxxxxxxxxxxxxxxx这一步非常关键。 进入你的 DNS 服务商控制台。 无论域名 DNS 托管在阿里云、腾讯云、Cloudflare 或其他服务商,本质操作都是:
记录类型:TXT
主机记录:
_acme-challenge
记录值:
xxxxxxxxxxxxxxxxxxxxxxxx最终 DNS 中应该存在:
_acme-challenge.example.com
│
└── TXT → xxxxxxxxxxxxxxxxx先不要在 Certbot 中按回车。需要等 TXT DNS 记录生效。
08|检查 TXT 是否生效
Mac 自带 dig,所以可以直接执行:
dig TXT _acme-challenge.example.com如果返回结果中已经出现 Certbot 给出的 TXT 内容,例如:
_acme-challenge.example.com.
300 IN TXT "xxxxxxxxxxxxxxxxxxxxxxxx"说明 DNS 基本已经生效。这时候再回到 Certbot:
Press Enter to Continue
# 按
EnterCertbot 就会让 Let’s Encrypt 验证 DNS。
09|签发成功
成功后通常会看到类似:
Successfully received certificate.证书通常会保存在 Certbot 管理的目录中,例如:
/etc/letsencrypt/live/example.com/查看:
sudo ls -la /etc/letsencrypt/live/example.com/里面最重要的是:
cert.pem
chain.pem
fullchain.pem
privkey.pem其中部署 HTTPS 最常用的是:
fullchain.pem
privkey.pemprivkey.pem 属于敏感文件,不要上传 GitHub、公开网盘或发给其他人。
10|申请通配符证书
如果希望一个证书覆盖:
api.example.com
www.example.com
blog.example.com
app.example.com可以申请:
*.example.com执行:
sudo certbot certonly \
--manual \
--preferred-challenges dns \
-d example.com \
-d "*.example.com"这里一定要注意:
"*.example.com"建议加引号,避免 Shell 对 * 做通配符展开。 通配符证书需要使用 DNS 验证。Certbot 官方的 wildcard 流程也提供 DNS 插件或手动 DNS 验证方案。 这样一张证书就可以覆盖:
example.com
*.example.com对于有多个 API、Web、后台等子域名的项目非常实用。
11|查看已经申请的证书
执行:
sudo certbot certificates可以看到类似:
Certificate Name: example.com
Domains:
example.com *.example.com
Certificate Path:
/etc/letsencrypt/live/example.com/fullchain.pem
Private Key Path:
/etc/letsencrypt/live/example.com/privkey.pem以后忘记证书位置时,这条命令非常实用。
12|测试续期
如果使用的是支持自动续期的验证方式,可以测试:
sudo certbot renew --dry-runCertbot 官方也推荐使用 renew --dry-run 检查续期流程。 不过这里有一个非常重要的区别:如果前面使用:
--manual手动添加 TXT 记录,那么它不适合直接做无人值守自动续期,因为下一次验证时仍需要修改 DNS TXT 记录。如果准备长期用于生产环境,更推荐下一步改成:
Certbot
│
↓
DNS Provider API
│
↓
自动创建 TXT
│
↓
Let's Encrypt 验证
│
↓
自动签发
│
↓
自动续期Certbot 官方在 macOS 上也支持安装相应 DNS Provider 插件,例如:
$(brew --prefix certbot)/libexec/bin/python3 -m pip install certbot-dns-<PLUGIN>13|如果网站就在这台 Mac 上
还有另一种方案。 如果 Mac 自己就是公网 Web Server,而且公网可以访问它的 80 端口,可以执行:
sudo certbot certonly --standaloneCertbot 会临时启动一个 Web Server 完成 HTTP 验证。官方明确说明 standalone 不要求已有网站,但公网必须能够访问该机器的 80 端口。 如果已经运行网站,不希望关闭 Web Server,则可以:
sudo certbot certonly --webroot如果 Mac 上运行的是 Nginx,还可以:
sudo certbot --nginx官方的 macOS + Nginx 指南支持 Certbot 自动获取证书并修改 Nginx 配置。
如果你的需求是“Mac 作为证书申请机器,签发后把证书部署到其他服务器”,我更推荐:
安装 Xcode CLT
↓
安装 Homebrew
↓
brew install certbot
↓
Certbot DNS Challenge
↓
DNS 添加 TXT
↓
Let's Encrypt 验证
↓
获得证书
↓
fullchain.pem + privkey.pem
↓
部署到 Nginx / NAS / API / Web Server安装 Xcode CLT
↓
安装 Homebrew
↓
brew install certbot
↓
Certbot DNS Challenge
↓
DNS 添加 TXT
↓
Let's Encrypt 验证
↓
获得证书
↓
fullchain.pem + privkey.pem
↓
部署到 Nginx / NAS / API / Web Server