申请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!