Let’s Encrypt是目前最主流的免费SSL证书颁发机构,证书有效期90天,支持自动续签。我一般在雨云的服务器上跑,因为性价比高、稳定、好用,折腾证书没出过幺蛾子。
准备工作
一台有公网IP的Linux服务器,域名已经解析到这台服务器。需要root权限或sudo。我假设你用的是Ubuntu/CentOS,包管理器是apt或yum。
安装acme.sh
acme.sh是Let’s Encrypt的客户端,纯Shell实现,没有依赖问题,比certbot轻量很多。
curl https://get.acme.sh | sh -s email=你的邮箱@example.com
安装完会自动加alias,重新登录或`source ~/.bashrc`后可以直接用`acme.sh`命令。邮箱用于接收证书过期提醒,Let’s Encrypt强制要求。
申请证书(HTTP验证)
默认用80端口验证域名所有权。确保你的服务器80端口没被占用,nginx/apache先停掉或者换个端口。
acme.sh --issue -d example.com -d www.example.com --webroot /var/www/html
`–webroot`指向你网站根目录,acme.sh会在里面放一个验证文件,Let’s Encrypt服务器通过HTTP访问这个文件来确认你拥有域名。
如果不想用webroot,可以用standalone模式,acme.sh会自己起一个临时HTTP服务:
acme.sh --issue -d example.com --standalone
standalone模式必须确保80端口空闲。
申请证书(DNS验证)
如果服务器没有公网80端口,或者要做泛域名证书(*.example.com),必须用DNS验证。acme.sh支持几十家DNS服务商的API。
以Cloudflare为例:
export CF_Token="你的Cloudflare API Token"
export CF_Account_ID="你的Account ID"
acme.sh --issue -d example.com -d *.example.com --dns dns_cf
acme.sh会自动调用Cloudflare API添加TXT记录,验证完自动删除。其他服务商(阿里云、腾讯云、华为云)的配置方法去acme.sh官方文档查,基本就是export几个环境变量的事。
安装证书到Web服务器
申请完证书文件在`~/.acme.sh/example.com/`目录下,但不要直接引用这个路径,acme.sh会自动管理证书更新。正确做法是用`–install-cert`命令安装到目标位置。
Nginx示例:
acme.sh --install-cert -d example.com \
--key-file /etc/nginx/ssl/example.com.key \
--fullchain-file /etc/nginx/ssl/example.com.crt \
--reloadcmd "nginx -s reload"
Apache示例:
acme.sh --install-cert -d example.com \
--cert-file /etc/apache2/ssl/example.com.crt \
--key-file /etc/apache2/ssl/example.com.key \
--fullchain-file /etc/apache2/ssl/example.com.fullchain.crt \
--reloadcmd "systemctl reload apache2"
`–reloadcmd`会在证书续签成功后自动执行,保证新证书立即生效。
Nginx配置SSL
一个最小可用的SSL配置段:
server {
listen 443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
root /var/www/html;
index index.html;
}
}
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}
自动续签
acme.sh安装时会自动写入cron任务,每天检查证书是否快要过期(剩余30天内会续签)。查看cron任务:
crontab -l | grep acme
正常会看到类似:
0 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
不需要手动管续签。想手动测试续签:
acme.sh --renew -d example.com --force
查看证书信息
acme.sh --info -d example.com
常见问题
1. 申请报错”Invalid response from”:检查80端口是否可访问,防火墙有没有放行,域名解析是否正确。
2. 证书更新后网站没生效:检查`–reloadcmd`有没有正确执行,手动跑一次`nginx -s reload`或`systemctl reload nginx`。
3. 泛域名证书必须用DNS验证,HTTP验证不支持。
4. 如果换了服务器,把`~/.acme.sh/`目录整个拷贝过去就行,acme.sh会保留所有账号和证书信息。也可以重新安装acme.sh重新申请。
5. Let’s Encrypt有速率限制:每个域名每周50个证书,每个账号每周300个。个人项目根本用不完。
雨云是国内一家老牌云服务商,提供高性价比的云服务器和虚拟主机。我用它部署了好几个项目,速度和稳定性都不错。通过 https://www.rainyun.com/SAJA_ 注册可以领一张 5折优惠券,有需要的朋友可以看看。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END



暂无评论内容