关于centos8:搭建域名通配符证书签发服务器

8次阅读

共计 2460 个字符,预计需要花费 7 分钟才能阅读完成。

  • 安装包

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

    • 用 Lego 实现 Let‘s Encrypt HTTPS 通配符证书
    • Lego 的版本信息
    • Expect 免交互
    • for 循环嵌套 expect
    • 在线 crontab 表达式执行工夫计算
正文完
 0