网站部署HTTPS,最头疼的问题之一就是HTTPS证书申请——要么流程复杂,要么验证失败,尤其是没有公网80端口时更是无从下手。经过多次踩坑,我发现certd容器(开源证书工具)是最适合新手的:无需暴露服务器端口、自动续期、配置简单,全程用Docker一键部署。这篇文章会把每一步拆解得明明白白,即使是技术小白也能跟着操作成功!
为什么选这个组合?
1. 核心优势(新手必看)
- 免费到底:certd是开源工具,支持Let’s Encrypt等免费证书机构,零成本搞定HTTPS;
- 无需80端口:用DNS验证方式,不用开放服务器80/443端口,内网服务器也能申请,安全性更高;
- 自动续期:证书快过期时,certd会自动通过Cloudflare API续签,不用手动操作,一劳永逸;
- 容器化部署:Docker一键启动certd,不用配置复杂的运行环境,新手也能轻松上手。
2. 前期准备(提前备好这些)
- 一个域名(比如我的域名liseezn.top);
- 一台服务器(云服务器/内网服务器均可),已安装Docker和Docker Compose:
- Windows/Mac:直接装Docker Desktop(内置Compose,官网下载:https://www.docker.com/products/docker-desktop/ );
- Linux:按官方教程安装Docker和Docker Compose(https://docs.docker.com/compose/install/linux/ );
- 服务器能正常访问外网(需要拉取certd镜像和调用Cloudflare API)。
第一步:部署certd容器(Docker一键操作)
1. 创建专属目录(避免文件混乱)
打开服务器的终端(Windows用PowerShell,Linux/Mac用Terminal),执行以下命令,创建一个专门存放certd文件的目录:
# 通用命令,Windows/Linux/Mac都能用
mkdir certd && cd certd
2. 下载certd的Docker配置文件
certd官方提供了现成的docker-compose.yaml文件,我们直接下载(如果下载失败,后面有手动新建的方法):
# Linux/Mac用户(有wget)
wget https://gitee.com/certd/certd/raw/v2/docker/run/docker-compose.yaml -O docker-compose.yaml
# Windows PowerShell用户(无wget,用内置命令)
Invoke-WebRequest -Uri "https://gitee.com/certd/certd/raw/v2/docker/run/docker-compose.yaml" -OutFile "docker-compose.yaml"
# 备用方案:浏览器手动下载
打开链接:https://gitee.com/certd/certd/raw/v2/docker/run/docker-compose.yaml
右键 → 另存为 → 保存到刚才创建的「certd」目录,文件名保持「docker-compose.yaml」(别改成.txt)
3. 简单修改配置文件(新手也能看懂)
用记事本(Windows)或 nano(Linux)打开docker-compose.yaml文件,只需要修改3个地方,其他保持默认:
version: '3'
services:
certd:
image: ghcr.io/certd/certd:v2.10.0 # 指定版本,避免自动更新出问题
container_name: certd # 容器名称,方便管理
restart: always # 容器崩溃自动重启,不用手动启动
ports:
- "7001:7001" # 端口映射:左边是服务器端口,右边是容器端口
# 默认7001 如果7001被占用,改左边的7001为其他端口(如7081)
environment:
- TZ=Asia/Shanghai # 时区设置,避免日志时间错乱
volumes:
- ./data:/app/data # 数据持久化:证书、配置会存在这里,容器删了也不丢
- ./logs:/app/logs # 日志目录,申请失败时看日志找原因
- /etc/localtime:/etc/localtime:ro
4. 启动certd容器(关键一步)
在「certd」目录下执行以下命令,启动容器:
# Docker Compose V2(推荐,Docker Desktop内置)
docker compose up -d
# 若提示「docker compose: 未找到命令」,用V1命令(Linux手动装的docker-compose)
docker-compose up -d
- 启动成功后,执行
docker ps | grep certd,如果看到「Up X minutes」,说明certd已经在后台运行了!
5. 访问certd网页后台
打开浏览器,输入「http://服务器IP:端口号」(比如我的服务器,就本地用就本地IP是172.0.0.0,端口是7001,所以访问http://172.0.0.0:7001);
- 默认账号:
admin,默认密码:123456; - 首次登录系统提示要先改密码,改密码即可
第二步:配置验证DNS,获取API Token
这是申请证书的核心步骤,新手容易踩坑,一定要仔细看!
1. 创建Cloudflare API Token(关键权限配置)(以托管在Cloudflare域名为例)
API Token是certd调用Cloudflare API的“钥匙”,必须给对权限,否则会报403错误:
- 点击Cloudflare右上角头像 → 「My Profile」→ 左侧「API Tokens」→ 「Create Token」;
- 选择「Edit zone DNS」模板(专门用于DNS编辑,新手不用自定义权限),点击「Use template」;
- 配置权限(3个关键项,错了会失败):
- 「Permissions」:默认是「DNS → Edit」(必须是Edit,只读权限无法添加验证记录);
- 「Zone Resources」:选择「Specific zone」→ 选中你的域名(如
xxx.top),只授权这个域名,更安全; - 「Client IP Address Filtering」(IP筛选,可选但推荐):
- 「Operator」选「Equals」(如果服务器公网IP是固定的,比如云服务器);
- 「Value」填服务器的公网IP(查询方法:服务器终端执行
curl ifconfig.me,或浏览器打开ip.cn查看); - 若服务器IP不固定(如家用宽带),可以留空(不限制IP),但长期建议用DDNS;
- 点击「Continue to summary」→ 「Create Token」,生成后立即复制Token(仅显示一次,丢了要重新创建!)。
第三步:在certd中申请HTTPS证书
回到certd网页后台,跟着步骤走,几分钟就能申请成功:
- 点击左侧「证书管理」→ 「添加证书」;
- 填写证书基本信息(按提示填,新手不用改其他选项):
- 域名:输入你的域名(如
xxx.com,支持泛域名*.xxx.com,需要就填); - 证书机构:选择「Let’s Encrypt」(免费、稳定);
- 验证方式:选择「DNS验证」(不用开80端口,推荐新手);
- DNS提供商:选择「你的域名托管商」;
- 填写Cloudflare配置(之前复制的信息派上用场了):
- API类型:选择「API Token」(别选Global API Key,权限太大不安全);
- API Key/Token:粘贴刚才创建的Cloudflare API Token;
- 其他字段不用填(Email是Global API Key才需要的);
- 点击「提交」,发起证书申请;
- 等待验证:certd会自动通过Cloudflare API添加TXT验证记录,验证成功后会自动下载证书,全程不用手动操作;
- 查看结果:申请成功后,在「证书管理」中会显示「已生效」,证书文件会保存在服务器「certd/data/certs」目录下。
新手必看:常见问题排查(踩坑总结)
1. 访问certd后台提示“无法访问”
- 检查服务器防火墙:开放配置的端口(如8081),云服务器还要在安全组中放行;
- 检查容器是否运行:执行
docker ps | grep certd,若没显示,执行docker compose logs certd看报错。
2. 申请证书提示“403 Forbidden”(Cloudflare认证失败)
- 核对API Token:是否复制正确,权限是否是「DNS → Edit」+「特定域名」;
- 核对IP筛选:如果设置了IP筛选,是否填对服务器公网IP。
3. 申请证书超时失败
- 检查服务器网络:能否访问
https://api.cloudflare.com(执行curl https://api.cloudflare.com测试); - 检查Cloudflare DNS生效状态:域名的Nameserver是否已经换成Cloudflare的。
七、后续操作:证书怎么用?怎么续期?
1. 证书使用(以Nginx为例)
证书文件在「certd/data/certs/你的域名/」目录下,核心文件是:
fullchain.pem:证书链文件;privkey.pem:私钥文件;
在Nginx配置文件中添加以下内容,重启Nginx即可启用HTTPS:
server {
listen 443 ssl;
server_name xxx.top; # 你的域名
ssl_certificate /path/to/certd/data/certs/xxx.top/fullchain.pem; # 证书链路径
ssl_certificate_key /path/to/certd/data/certs/xxx.top/privkey.pem; # 私钥路径
# 其他配置(如网站根目录、反向代理等)
}
2. 自动续期
certd默认会自动检测证书有效期,提前18(默认)天自动续签,续签后证书文件会自动更新,无需手动操作。可以在「certd后台 → 系统设置 → 证书续期」中查看续期配置。
总结
作为新手,第一次申请HTTPS证书可能会遇到各种小问题,但只要跟着步骤走,尤其是注意Cloudflare API Token的权限配置和Zone ID的正确性,就能顺利搞定。certd+Cloudflare的组合不仅免费,还能自动续期,后续不用再操心证书过期的问题,非常适合个人网站、博客等场景。
如果操作过程中遇到其他问题,欢迎在评论区交流~ 技术之路,踩坑才会成长,希望这篇指南能帮到同样是新手的你!