• 安装包

    yum -y install ftp expect
  • 阿里云账号配置
    登录阿里云账号之后,顺次点击:访问控制 -> 用户 -> 新建用户
    登陆名: ds(可自行更改)
    显示名: ds(可自行更改)
    拜访形式: 编程式拜访
    增加权限: AliyunDNSFullAccess
    取得新用户的 AccessKey IDAccessKeySecret
  • 筹备要签发证书的域名
    abc.com,示意要签发的通配符证书实用于域名 abc.com*.abc.com
    留神:每一行只能一个域名!

    cat > /data/tools/dns << EOFabc.comwx.abc.comyz.abc.comEOF
  • 创立文件夹,下载压缩包,解压,创立链接

    mkdir -p /data/tools /data/appcd /data/appwget https://github.com/go-acme/lego/releases/download/v4.3.1/lego_v4.3.1_linux_amd64.tar.gztar -xvf lego_v4.3.1_linux_amd64.tar.gzln -s /data/app/lego/lego /usr/local/bin/lego
  • 环境筹备:环境变量,常用命令自定义

    cat > /etc/profile.d/lego_env.sh << EOF#!/bin/bash# 后面新用户的 AccessKey IDexport ALICLOUD_ACCESS_KEY="TS***bp"# 后面新用户的 AccessKeySecretexport ALICLOUD_SECRET_KEY="x0d***ac6"#export ALICLOUD_HTTP_TIMEOUT=300#export ALICLOUD_POLLING_INTERVAL=300#export ALICLOUD_PROPAGATION_TIMEOUT=600export 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_aliasessource /etc/profile.d/lego_env.shdnfile=/data/app/lego/.lego/certificates/$1.crtif [ ! -f "$dnfile" ];then  legorun $1else  legorenew $1fiftpEOF
  • 将脚本通过FTP拷贝到指标服务器
    指标服务器配置的FTP Server信息(须要替换):
    地址:192.168.16.8
    端口:12358
    用户名:UserName
    明码:UserPwd

    cat >> /data/tools/auto_copy.sh << EOF#!/bin/bash# fp="/data/app/lego/.lego/certificates/"while read dn passdo  /usr/bin/expect <<-ENDspawn /data/tools/cou_cert.sh $dnexpect {"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 eofENDdone < /data/tools/dnsEOF
  • 打算工作,增加工作,启动服务,增加开机启动,查看服务状态

    echo 0 0 1 * * /data/tools/auto_copy.sh >> /etc/crontabsystemctl 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表达式执行工夫计算