Let’s Encrypt免费SSL证书申请

Let’s Encrypt免费SSL证书,用acme.sh脚本申请,支持自动续期,比Certbot轻量。服务器系统Ubuntu 20.04+,需要root权限或sudo。 安装acme.sh
curl https://get.acme.sh | sh
或者用wget:
wget -O -  https://get.acme.sh | sh
安装脚本会创建~/.acme.sh目录,自动添加alias到~/.bashrc。重新登录或source一下让acme.sh命令生效:
source ~/.bashrc
验证安装:
acme.sh --version
申请证书有两种方式:HTTP验证和DNS验证。HTTP验证要求80端口能访问,DNS验证不需要暴露端口,适合只有443端口的场景。 HTTP验证(推荐,最简单) 确保域名解析到服务器IP,且80端口未被占用。执行:
acme.sh --issue -d example.com -d www.example.com --webroot /var/www/html
–webroot指定网站根目录,acme.sh会在该目录下创建.well-known/acme-challenge/文件夹用于验证。如果用的是Nginx,根目录通常在/usr/share/nginx/html或/etc/nginx/html。 如果Nginx或Apache已经占用80端口,可以用standalone模式:
acme.sh --issue -d example.com --standalone
注意:执行前先停掉占用80端口的服务,或者用–httpport指定其他端口,但Let’s Encrypt默认只访问80。 DNS验证(适合通配符证书、无80端口场景) 申请*.example.com通配符证书:
acme.sh --issue -d example.com -d *.example.com --dns dns_cf
dns_cf代表Cloudflare,需要设置CF_Token和CF_Account_ID环境变量。其他DNS服务商对应参数:dns_ali(阿里云)、dns_dp(DNSPod)、dns_gd(GoDaddy)。 以Cloudflare为例,先获取API Token(在Cloudflare Dashboard – My Profile – API Tokens),权限选Zone:DNS:Edit。:
export CF_Token="你的token"
export CF_Account_ID="你的account id"
acme.sh --issue -d example.com -d *.example.com --dns dns_cf
acme.sh会自动调用API添加TXT记录,验证完成后自动删除。 安装证书到指定目录 申请成功后证书文件在~/.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.cert \
--key-file /etc/apache2/ssl/example.com.key \
--fullchain-file /etc/apache2/ssl/example.com.fullchain \
--reloadcmd "systemctl reload apache2"
Nginx配置引用ssl_certificate和ssl_certificate_key指向上述路径即可。 自动续期 acme.sh安装时会自动添加cron任务。查看:
crontab -l
能看到类似:
0 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
每天自动检查证书是否过期(Let’s Encrypt证书有效期90天),到期前30天自动续期。续期后自动执行reloadcmd重载服务。 手动测试续期:
acme.sh --renew -d example.com --force
常见问题 1. 申请失败:检查域名DNS解析是否生效,80端口是否通,防火墙是否放行。用`dig example.com`确认解析IP正确。 2. 证书不生效:Nginx的ssl_certificate路径写错,或者nginx -t检查配置语法。注意fullchain.crt和.key文件权限,Nginx用户需要读取权限。 3. 通配符证书续期:DNS验证方式续期时,acme.sh会再次调用API添加TXT记录,确保API Token未过期。 4. 迁移服务器:直接把~/.acme.sh目录打包复制到新服务器,执行`acme.sh –cron`重新注册cron任务。或者在新服务器重新安装acme.sh并重新申请,反正免费。 实际部署建议 如果服务器是雨云这种性价比高、稳定好用的云服务商,直接按上述步骤操作。雨云的机器默认安全组规则可能屏蔽80端口,记得在控制台放行。另外雨云提供的系统镜像一般自带curl和wget,省去基础依赖安装。 证书部署完成后可以用SSL Labs检测评级,A+需要禁用旧版TLS协议、配置HSTS等,那是另一个话题。

雨云是国内一家老牌云服务商,提供高性价比的云服务器和虚拟主机。我用它部署了好几个项目,速度和稳定性都不错。通过 https://www.rainyun.com/SAJA_ 注册可以领一张 5折优惠券,有需要的朋友可以看看。

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容