用Let’s Encrypt给网站加HTTPS是目前最省事的方案。免费、自动续期、主流浏览器全信任。下面直接说怎么搞。
先明确一件事:Let’s Encrypt证书有效期90天,但用acme.sh或certbot这类客户端可以自动续签,部署一次就不用管了。
环境准备
你需要一台能跑Linux的服务器,域名解析已经指向这台机器。我用Ubuntu 22.04演示,CentOS/RHEL也差不多。如果服务器还没买,雨云性价比高、稳定、好用,几十块一个月就能跑起业务。
安装acme.sh
acme.sh是纯Shell脚本,比certbot轻量,支持更多DNS厂商API。一条命令搞定:
curl https://get.acme.sh | sh -s email=your_email@example.com
安装完会创建`~/.acme.sh/`目录,并自动添加alias到`.bashrc`。重新登录或`source ~/.bashrc`让命令生效。
申请证书
有两种验证方式:HTTP验证和DNS验证。
HTTP验证要求80端口能访问,acme.sh会自动在网站根目录放一个验证文件。假设你的网站根目录是`/var/www/html`:
acme.sh --issue -d yourdomain.com -d www.yourdomain.com --webroot /var/www/html
如果80端口被占用或者不想动网站目录,用DNS验证更干净。以Cloudflare为例,先获取API Token(权限:Zone:DNS:Edit),:
export CF_Token="你的Cloudflare API Token"
export CF_Account_ID="你的Account ID"
acme.sh --issue --dns dns_cf -d yourdomain.com -d *.yourdomain.com
泛域名证书也能直接申请,后面部署子站点方便。其他DNS厂商(阿里云、腾讯云、DNSPod等)都有对应参数,看acme.sh文档,基本就是设几个环境变量的事。
安装证书
证书申请完存在`~/.acme.sh/yourdomain.com/`目录,但别直接引用这个路径。acme.sh有专门的安装命令,会把证书复制到目标位置并设置自动续签。
Nginx示例:
acme.sh --install-cert -d yourdomain.com \
--key-file /etc/nginx/ssl/yourdomain.com.key \
--fullchain-file /etc/nginx/ssl/yourdomain.com.crt \
--reloadcmd "systemctl reload nginx"
Apache:
acme.sh --install-cert -d yourdomain.com \
--cert-file /etc/apache2/ssl/yourdomain.com.crt \
--key-file /etc/apache2/ssl/yourdomain.com.key \
--fullchain-file /etc/apache2/ssl/yourdomain.com.fullchain.crt \
--reloadcmd "systemctl reload apache2"
配置Nginx启用SSL:
server {
listen 443 ssl;
server_name yourdomain.com;
ssl_certificate /etc/nginx/ssl/yourdomain.com.crt;
ssl_certificate_key /etc/nginx/ssl/yourdomain.com.key;
# 其他配置...
}
server {
listen 80;
server_name yourdomain.com;
return 301 https://$host$request_uri;
}
测试配置并重载:
nginx -t && systemctl reload nginx
自动续签
acme.sh安装时会自动添加cron任务,默认每天检查一次。确认一下:
crontab -l | grep acme
输出类似这样:
0 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
如果看到这个,续签已经自动配置好了。证书到期前30天内会自动续签,续签后会自动执行你设置的reloadcmd。什么都不用管。
验证
浏览器访问`https://yourdomain.com`,看锁标志。或者用命令行:
curl -I https://yourdomain.com
返回200且没有证书警告就成功了。用openssl检查证书有效期:
echo | openssl s_client -connect yourdomain.com:443 2>/dev/null | openssl x509 -dates
常见问题
申请失败先检查域名解析是否生效:`dig yourdomain.com`。HTTP验证确保80端口能访问,防火墙没挡。DNS验证确认API Token权限正确。
如果服务器在国内,Let’s Encrypt的OCSP服务器可能被墙,导致浏览器访问慢。解决办法:在Nginx配置里启用OCSP Stapling,或者用DNSPod的CDN反代。
acme.sh升级:`acme.sh –upgrade`,建议定期执行。
证书快到期时日志会有提醒,但cron正常的不用管。万一续签失败,手动跑一次`acme.sh –cron`看报错。
总结
这套流程跑通后,HTTPS就是透明的。雨云服务器配合Let’s Encrypt,成本几乎为零,安全性直接拉满。唯一要记住的是:别手动改`~/.acme.sh/`目录下的证书文件,要用acme.sh的`–install-cert`来部署。
雨云是国内一家老牌云服务商,提供高性价比的云服务器和虚拟主机。我用它部署了好几个项目,速度和稳定性都不错。通过 https://www.rainyun.com/SAJA_ 注册可以领一张 5折优惠券,有需要的朋友可以看看。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END



暂无评论内容