
我在腾讯云轻量服务器上部署了一个 Typecho 博客,日常运行一直很稳定。但有一个问题却反复出现:HTTPS 证书总是到期失效。
使用的是腾讯云提供的免费证书,理论上支持自动续期,但在实际使用中,只要证书一到期,就必须手动重新分发、重新绑定,否则 HTTPS 直接失效。这个过程不仅麻烦,而且非常不“自动化”,也让我始终没搞明白它背后的续期机制到底哪里出了问题。
更要命的是,这种问题并不会提前明显告警,往往是等浏览器提示证书错误了,才意识到又到期了。
ACME 的“顺滑体验”
最近在折腾 FreePBX 的部署时,接触并实际使用了 ACME 的免费证书方案(基于 Let’s Encrypt)。整个体验可以用一句话概括:
一次配置,之后几乎不用再操心。
最终,我决定把博客的证书也从原来的腾讯云证书,整体切换为 ACME 的免费证书方案。
由于当前网络环境的限制,常规的 ACME 安装方式无法直接使用,例如某些在线脚本或默认 CA 连接会失败。因此在实际操作中,只能采用替代方案来完成证书申请与续期。
1. 使用 Gitee 镜像安装
1. 克隆代码(使用 Gitee 源) 复制并执行这条命令:
Bash
git clone https://gitee.com/neilpang/acme.sh.git2. 进入目录并安装
Bash
cd acme.sh
./acme.sh --install -m info@mcetf.cn3. 使命令生效
Bash
source ~/.bashrc2. 安装成功后,申请并部署证书
一旦上面安装成功(看到 Install success),请立刻执行下面的步骤来申请证书(就是之前的步骤,我再列一遍方便你复制):
1. 申请证书 (路径我根据你刚才的 find 结果填好了)
Bash
acme.sh --issue -d mcetf.cn -d www.mcetf.cn -w /usr/local/lighthouse/softwares/typecho2. 安装证书到 Nginx 配置目录
Bash
# 确保目录存在
mkdir -p /usr/local/lighthouse/softwares/nginx/conf/ssl
# 安装证书
acme.sh --install-cert -d mcetf.cn \
--key-file /usr/local/lighthouse/softwares/nginx/conf/ssl/mcetf.cn.key \
--fullchain-file /usr/local/lighthouse/softwares/nginx/conf/ssl/mcetf.cn.cer \
--reloadcmd "/usr/local/lighthouse/softwares/nginx/sbin/nginx -s reload"3. 找到并修改 Nginx 配置文件
这是最后一步,也是最关键的一步。我们需要找到 Nginx 在哪里配置了旧的证书,把路径改成新的。
查找配置文件在哪里: 腾讯云这个镜像的配置文件通常在这个位置,你可以用
ls确认一下:Bash
ls /usr/local/lighthouse/softwares/nginx/conf/include/(你应该能看到类似
typecho.conf或者mcetf.cn.conf的文件)或者直接用这个命令查找包含 "ssl" 配置的文件:
Bash
grep -r "ssl_certificate" /usr/local/lighthouse/softwares/nginx/conf/编辑配置文件: 假设你找到的文件是
/usr/local/lighthouse/softwares/nginx/conf/nginx.conf或者include/typecho.conf。使用vi编辑它:Bash
# 例如: vi /usr/local/lighthouse/softwares/nginx/conf/nginx.conf # (具体文件名看上一步 grep 的结果)修改证书路径: 找到
ssl_certificate和ssl_certificate_key这两行,修改为我们刚才生成的路径:Nginx
# 修改前可能是指向腾讯云生成的 crt 文件,修改为下面这样: ssl_certificate /usr/local/lighthouse/softwares/nginx/conf/ssl/mcetf.cn.cer; ssl_certificate_key /usr/local/lighthouse/softwares/nginx/conf/ssl/mcetf.cn.key;保存并重启:
- 按
Esc键,输入:wq回车保存退出。 - 重启 Nginx:
- 按
Bash
```
/usr/local/lighthouse/softwares/nginx/sbin/nginx -s reload
```