下载certbot-auto
wget https://dl.eff.org/certbot-auto
#如果是基于Debian或RHEL的系统会安装失败,采用另一种安装方式snap
#首先进行安装依赖等配置
yum install epel-release //安装epel
yum install snapd //安装snapd
systemctl enable --now snapd.socket //启用snapd.socket
ln -s /var/lib/snapd/snap /snap //创建软链接
snap install --classic certbot //安装certbot
ln -s /snap/bin/certbot /usr/bin/certbot //创建certbot软链接
#如果之前安装过Certbot出现了问题,可以进行重装
yum remove certbot //卸载certbot
rm /usr/local/bin/certbot-auto //删除安装文件
rm -rf /opt/eff.org/certbot
nginx检查是否开启http_ssl_module模块
不开启会出现nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf
通过 nginx -V查看是否开启该模块,如果没有开启,执行下面步骤开启(关闭 nginx,否则会出现 80 端口占用问题)
cd /usr/local/src/nginx
./configure --prefix=/usr/local/nginx --with-http_flv_module --with-http_ssl_module //安装ssl模块
make # make安装,这里不要像以前一样 make&make install 否则会覆盖原有目录
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak //nginx做原有备份
nginx -V //查看模块是否安装成功
sudo systemctl start nginx //运行 nginx
运行命令生成证书
sudo certbot certonly -d "*.xxx.com" -d xxxx.com --manual --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory(需要手动添加 txt 解析)
#或者
sudo certbot certonly -d "*.xxx.com" -d xxxx.com --manual --preferred-challenges dns --manual-auth-hook "/etc/letsencrypt/renwal-hook/au.sh php aly add" --manual-cleanup-hook "/etc/letsencrypt/renwal-hook/au.sh php aly clean"(通过脚本调用域名解析 api,自动解析)
#证书目录在/etc/letsencryp下
配置 nginx 配置文件
listen [::]:443 ssl http2;
location / {return 301 https://$host$request_uri;
}
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_certificate /home/www/letsencrypt/live/xxx.com/fullchain.pem;
ssl_certificate_key /home/www/letsencrypt/live/xxxx.com/privkey.pem;
ssl_trusted_certificate /home/www/letsencrypt/live/xxxx.com/chain.pem;
eturn 301 https://www.uchelian.com$request_uri;
#重启 nginx,查看网站证书是否配置成功
证书自动续签
#因为证书只有三个月有效期,避免每三个月进行手动申请,对系统进行自动续签操作
git clone https://github.com/ywdblog/certbot-letencrypt-wildcardcertificates-alydns-au
cd certbot-letencrypt-wildcardcertificates-alydns-au
chmod 0777 au.sh
domain.ini文件添加您的根域名
#配置DNS API 密钥,由于需要通过 API 操作阿里云 DNS, 腾讯云 DNS 的记录,所以需要去域名服务商哪儿获取 API 密钥,然后配置在 au.sh 文件中:
ALY_KEY 和 ALY_TOKEN:[阿里云 API key 和 Secrec 官方申请文档](https://help.aliyun.com/knowledge_detail/38738.html)。
TXY_KEY 和 TXY_TOKEN:[腾讯云 API 密钥官方申请文档](https://console.cloud.tencent.com/cam/capi)。
HWY_KEY 和 HWY_TOKEN: [华为云 API 密钥官方申请文档](https://support.huaweicloud.com/devg-apisign/api-sign-provide.html)
GODADDY_KEY 和 GODADDY_TOKEN:[GoDaddy API 密钥官方申请文档](https://developer.godaddy.com/getstarted)。
#目前该工具支持五种运行环境和场景,通过 hook 文件和参数来调用:
PHP(>4以上版本均可)
au.sh php aly add/clean:PHP操作阿里云DNS,增加/清空DNS。
au.sh php txy add/clean:PHP操作腾讯云DNS,增加/清空DNS。
au.sh php godaddy add/clean:PHP操作GoDaddy DNS,增加/清空DNS。
Python(支持2.7和3.7,无需任何第三方库)
au.sh python aly add/clean:Python操作阿里云DNS,增加/清空DNS。
au.sh python txy add/clean:Python操作腾讯云DNS,增加/清空DNS。
au.sh python hwy add/clean:Python操作华为云DNS,增加/清空DNS。
au.sh python godaddy add/clean:Python操作GoDaddy DNS,增加/清空DNS。
#根据自己服务器环境和域名服务商选择任意一个 hook shell(包含相应参数),具体使用见下面。
#证书有效期<30天才会renew,所以crontab可以配置为1天或1周
1 1 */1 * * root certbot-auto renew --manual --preferred-challenges dns --manual-auth-hook "/脚本目录/au.sh php aly add" --manual-cleanup-hook "/脚本目录/au.sh php aly clean"