搭建域名通配符证书签发服务器

Ably
  • 安装包

    yum -y install ftp expect
  • 阿里云账号配置
    登录阿里云账号之后,依次点击:访问控制 -> 用户 -> 新建用户
    登陆名: ds(可自行更改)
    显示名: ds(可自行更改)
    访问方式: 编程式访问
    添加权限: AliyunDNSFullAccess
    获得新用户的 AccessKey IDAccessKeySecret
  • 准备要签发证书的域名
    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
    密码:UserPwd

    cat >> /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服务器及相关问题
  • 参考文献:

阅读 434

Better
不积跬步无以至千里,不积小流无以成江海。

Let everything around us become better

571 声望
40 粉丝
0 条评论
你知道吗?

Let everything around us become better

571 声望
40 粉丝
文章目录
宣传栏