共计 2460 个字符,预计需要花费 7 分钟才能阅读完成。
-
安装包
yum -y install ftp expect
- 阿里云账号配置
登录阿里云账号
之后,顺次点击:访问控制
->用户
->新建用户
登陆名:ds
(可自行更改)
显示名:ds
(可自行更改)
拜访形式:编程式拜访
增加权限:AliyunDNSFullAccess
取得新用户的AccessKey ID
、AccessKeySecret
-
筹备要签发证书的域名
如abc.com
,示意要签发的通配符证书实用于域名abc.com
和*.abc.com
;
留神:每一行只能一个域名!cat > /data/tools/dns << EOF abc.com wx.abc.com yz.abc.com EOF
-
创立文件夹,下载压缩包,解压,创立链接
mkdir -p /data/tools /data/app cd /data/app wget https://github.com/go-acme/lego/releases/download/v4.3.1/lego_v4.3.1_linux_amd64.tar.gz tar -xvf lego_v4.3.1_linux_amd64.tar.gz ln -s /data/app/lego/lego /usr/local/bin/lego
-
环境筹备:环境变量,常用命令自定义
cat > /etc/profile.d/lego_env.sh << EOF #!/bin/bash # 后面新用户的 AccessKey ID export ALICLOUD_ACCESS_KEY="TS***bp" # 后面新用户的 AccessKeySecret export ALICLOUD_SECRET_KEY="x0d***ac6" #export ALICLOUD_HTTP_TIMEOUT=300 #export ALICLOUD_POLLING_INTERVAL=300 #export ALICLOUD_PROPAGATION_TIMEOUT=600 export ALICLOUD_TTL=60 # ds@ID.onaliyun.com 替换为新创建的登录名 lego_args="-a --email ds@ID.onaliyun.com --dns alidns" alias legorun='function __legorun() { domain=$1;domains=*.$1;lego $lego_args --domains="$domain"--domains="$domains"run; unset -f __legorun;};cd /data/app/lego && __legorun' alias legorenew='function __legorenew() { domain=$1;domains=*.$1;lego $lego_args --domains="$domain"--domains="$domains"renew --days 35; unset -f __legorenew;};cd /data/app/lego && __legorenew' EOF
-
使环境变量失效
source /etc/profile.d/lego_env.sh
-
证书生成脚本
cat >> /data/tools/cou_cert.sh << EOF #!/bin/bash # 其中 `shopt` 命令是“shell options”的缩写,用来开关 shell 中的选项;# 开启 `expand_aliases` 之后 `source` 命令从新读取和执行记录了 `alias` 别名设置的 bash 配置文件。shopt -s expand_aliases source /etc/profile.d/lego_env.sh dnfile=/data/app/lego/.lego/certificates/$1.crt if [! -f "$dnfile"];then legorun $1 else legorenew $1 fi ftp EOF
-
将脚本通过 FTP 拷贝到指标服务器
指标服务器配置的 FTP Server 信息(须要替换):
地址:192.168.16.8
端口:12358
用户名:UserName
明码:UserPwdcat >> /data/tools/auto_copy.sh << EOF #!/bin/bash # fp="/data/app/lego/.lego/certificates/" while read dn pass do /usr/bin/expect <<-END spawn /data/tools/cou_cert.sh $dn expect {"ftp>" {send "!ftp 192.168.16.8 12358\r";exp_continue} "Name (192.168.16.8:root):" {send "UserName\r";exp_continue} "Password:" {send "UserPwd\r"} } expect "ftp>" {send "send $fp$dn.crt x.$dn.pem\rsend $fp$dn.key x.$dn.key\rquit\rquit\r"} expect eof END done < /data/tools/dns EOF
-
打算工作,增加工作,启动服务,增加开机启动,查看服务状态
echo 0 0 1 * * /data/tools/auto_copy.sh >> /etc/crontab systemctl start crond & systemctl enable crond & systemctl status crond
- 指标服务器
须要应用 FileZilla Server 搭建 FTP 服务器,配置证书、用户名、明码、用户目录 (作为证书的专用目录) 和对应权限;
依据本人的状况,查看是间接配置证书门路还是再加一层同步操作。
定期重启 web 服务,确保最新的证书失效。
配置 FileZilla Server 请参照另一篇文章《用 FileZilla 搭建 FTP 服务器及相干问题》 -
参考文献:
- 用 Lego 实现 Let‘s Encrypt HTTPS 通配符证书
- Lego 的版本信息
- Expect 免交互
- for 循环嵌套 expect
- 在线 crontab 表达式执行工夫计算
正文完