申请Lets Encrypt免费域名证书(详细acme.sh下载-安装-域名申请-Nginx配置步骤)
免费域名书主要有两大提供商 ZeroSSL 和 Let's Encrypt,由于国内防火墙屏蔽原因,ZeroSSL 作为默认 CA,用 acme.sh 总是报错很难安装上去。
关于 ZeroSSL 和 Let's Encrypt 的区别,详见:ZeroSSL vs Let's Encrypt
本文使用 acme.sh 程序,安装 Let's Encrypt 提供的免费证书。
下载安装acme.sh
yum install git
cd /opt
git clone https://gitee.com/neilpang/acme.sh.git
cd acme.sh
./acme.sh --install -m abc911@163.com
有没有屏蔽的小伙伴,也可以直接从官网仓库进行安装:
curl https://get.acme.sh | sh -s email=abc911@163.com
免费域名证书一般有效期为90天,需要提前自动续期更新,不然到时候站点https就打不开了哈。
acme.sh安装完后,应该会自动把检测证书是否过期的定时任务加上到crontab了:
crontab -l
# 目前证书在 60 天以后会自动更新
16 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
设置快捷命令: acme.sh
vi .bashrc
alias acme.sh=~/.acme.sh/acme.sh
申请免费域名证书
设置Let's Encrypt为默认CA
acme.sh --set-default-ca --server letsencrypt
给bcds.com.cn申请免费域名证书
acme.sh --issue -d bcds.com.cn -d www.bcds.com.cn --webroot /www/bcds
然后开始验证,acme.sh会在站点根目录下自动创建 .well-known 目录(/www/bcds/.well-known/)。
如果站点Nginx配置了静止访问所有dot(.)文件,则需要开启下:
location ~ /\.(?!well-known) {
deny all;
}
验证完成,申请到免费域名证书后,会告诉你免费域名证书保存在哪儿了:
[Fri Apr 26 11:02:08 CST 2024] Verify finished, start to sign.
[Fri Apr 26 11:02:08 CST 2024] Lets finalize the order.
[Fri Apr 26 11:02:08 CST 2024] Le_OrderFinalize='https://acme-v02.api.letsencrypt.org/acme/finalize/1692313977/264149807047'
[Fri Apr 26 11:02:10 CST 2024] Downloading cert.
[Fri Apr 26 11:02:10 CST 2024] Le_LinkCert='https://acme-v02.api.letsencrypt.org/acme/cert/03b9fc237c90394e51f8605f1f7132d121f4'
。。。
[Fri May 17 16:29:08 CST 2024] Your cert is in: /root/.acme.sh/bcds.com.cn/bcds.com.cn.cer
[Fri May 17 16:29:08 CST 2024] Your cert key is in: /root/.acme.sh/bcds.com.cn/bcds.com.cn.key
[Fri May 17 16:29:08 CST 2024] The intermediate CA cert is in: /root/.acme.sh/bcds.com.cn/ca.cer
[Fri May 17 16:29:08 CST 2024] And the full chain certs is there: /root/.acme.sh/bcds.com.cn/fullchain.cer
有时候申请的时候可能会遇到错误:
Timeout during connect (likely firewall problem)
先运行命令:(参考:SSL 证书测试签发失败 #222)
iptables -F
再重新申请就好了。
不过,Let's Encrypt有重试错误限制(每小时+每主机+每账号 最多5次失败,参见:Failed Validation Limit),所以可能会遇到以下报错提示:
too many failed authorizations recently
过一小时再重试申请就好了。
安装免费域名证书
把域名证书安装到:/etc/nginx/certs/ 目录下
acme.sh --install-cert -d bcds.com.cn --key-file /etc/nginx/certs/bcds_key.pem --fullchain-file /etc/nginx/certs/bcds_cert.pem
查看已安装证书信息
acme.sh --info -d bcds.com.cn
Nginx配置免费域名证书
server {
listen 443 ssl;
server_name www.bcds.com.cn;
ssl_certificate /etc/nginx/certs/bcds_cert.pem;
ssl_certificate_key /etc/nginx/certs/bcds_key.pem;
}
重启Nginx生效
service nginx force-reload
DONE, Enjoy https!