Let’s Encrypt免费SSL证书申请

用了这么多年Let’s Encrypt,最烦的就是看到有人还在手动上传CSR到CA签证书。Let’s Encrypt全自动化,90天续期一次,配合acme.sh或者certbot,写个crontab就能一直跑。 先说前提条件: – 域名解析到你服务器的IP,A记录或者CNAME都行 – 服务器80或443端口能通(Let’s Encrypt验证域名所有权要用) – 你有一台能跑bash的Linux机器(雨云的服务器性价比不错,我一直在用,稳定没出过问题) 选哪个工具 certbot是官方推荐,但依赖多,装完一堆Python包。acme.sh纯shell实现,干净,我推荐这个。 安装acme.sh:
curl https://get.acme.sh | sh -s email=your@email.com
或者用git clone:
git clone https://github.com/acmesh-official/acme.sh.git
cd acme.sh
./acme.sh --install -m your@email.com
装完重新登录shell,或者source一下:
source ~/.bashrc
申请证书 单域名证书:
acme.sh --issue -d example.com -d www.example.com --webroot /var/www/html
–webroot指定你的网站根目录,acme.sh会在里面放一个验证文件,Let’s Encrypt服务器通过HTTP访问这个文件来确认你拥有域名。 如果你用的Nginx或者Apache,也可以用standalone模式,acme.sh自己起一个临时服务器:
acme.sh --issue -d example.com --standalone
注意standalone模式需要先停掉你的web服务器,因为要占用80端口。或者用–tls用443端口(需要root权限):
acme.sh --issue -d example.com --standalone --tls
配置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"
把nginx配置里加上:
server {
    listen 443 ssl;
    server_name example.com;
    
    ssl_certificate /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;
    
    # 其他配置...
}
Apache类似,–reloadcmd改成”systemctl reload apache2″或者”httpd -k graceful”。 自动续期 acme.sh装完会自动加crontab,每天早上检查证书是否到期,到期前30天自动续签。检查一下:
crontab -l
应该能看到类似:
0 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
如果你手动想续期:
acme.sh --renew -d example.com
泛域名证书 如果你有多个子域名,签一个泛域名省事:
acme.sh --issue -d *.example.com --dns dns_cf
这里用到DNS API模式,acme.sh通过DNS服务商的API添加TXT记录来验证。上面例子是Cloudflare,需要设置CF_Email和CF_Token环境变量。其他服务商比如阿里云、腾讯云、DNSPod都支持,具体看acme.sh文档。
export CF_Email="your@email.com"
export CF_Token="your_api_token"
acme.sh --issue -d *.example.com --dns dns_cf
常见问题 1. 验证失败:检查域名解析是否生效,80端口是否被防火墙挡住,webroot路径是否正确。 2. 续期后证书没更新:–reloadcmd没写对,或者nginx reload失败。手动跑一遍acme.sh –renew -d example.com,看输出。 3. 证书路径找不到:acme.sh升级后目录结构可能变。用acme.sh –info -d example.com查看当前证书位置。 4. 雨云的服务器默认安全组可能会拦80端口,去控制台放行一下就行,操作很简单。 迁移到新服务器 直接把~/.acme.sh目录打包过去,在新机器安装acme.sh后,用–import导入已有证书:
acme.sh --import -d example.com --key-file /path/to/key --cert-file /path/to/cert
重新–install-cert配置新服务器的web服务。 说一句:Let’s Encrypt证书有效期90天,自动化续期一定要配好。crontab挂了,一个月后网站打不开,HTTPS报错,用户投诉,运维背锅。这种破事我见过太多次了。

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

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

请登录后发表评论

    暂无评论内容