lego+systemctl实现SSL泛解析证书注册并自动更新

Tips:首先感谢 @Negoces 大佬的悉心指导,这篇文章主要是记录一下如何操作
文章同步发布于:小满云电工作室

愿天堂没有SSL
小满1221

了解什么是泛解析SSL证书

一、我们要先了解一下泛解析SSL证书是什么.

泛解析SSL证书使用户可以在一个证书上为一个域名在特定级别上保护无限数量的子域。泛解析采用的是*符号替代,可以保护域名旗下任何自定义的子域名。但如果三级域名需要泛解析就必须申请二级域名的SSL证书才可以,这个特性会让我们后续的维护操作变得很简单(不用费时间续订证书了)

注意:

  1. 实现这个操作需要使用DNS记录验证域名
  2. 一个泛域名SSL证书只能覆盖一个主域。如果只需要保护多个主域,则应选择一个多域泛域名SSL证书。
  3. 申请下来的证书有效期一般较短(90天)

    二、我们了解了一些关于SystemCtl的基础知识

    Systemd 并不是一个命令,而是一组命令,涉及到系统管理的方方面面。
    这些命令在几乎所有的Linux发行版上都有他的身影,他是一个很强大的命令,负责调用系统的所有资源(说法存在歧义,请理性指出)具体命令详解请点击:CSDN

    三、了解这次需要使用的软件:lego

    这是一个开源软件:Github
    Tips:工作室提供国内加速url,可以去看看(

    我们进入服务器Shell使用wget下载lego软件

    # 下面链接适用:Linux/Amd64
    wget https://github.com/go-acme/lego/releases/download/v4.10.0/lego_v4.10.0_linux_amd64.tar.gz
    # 解压文件到/opt/lego
    mkdir -p /opt/lego && tar -zxvf lego_v4.6.0_linux_amd64.tar.gz -C /opt/lego
    # 创建软连接
    ln -s /opt/lego/lego  /usr/local/bin/
    # 这时候我们的软件配置就可以正常了,输入以下命令测试:
    lego -v
    # 成功会显示版本 系统 架构信息
    # lego version 4.6.0 linux/amd64

    因为这里是SSL泛解析,我们只能使用DNS解析来验证我们的域名所有权
    LEGO提供了很多DNS供应商的验证方法:相关文档
    由于篇幅问题,本人在这里(和脚本)演示DNSPOD和AliDNS的配置方法。
    这里因为DNSPOD被腾讯云收购,所以在文档页面不要找DNSPOD,找TENCENT CLOUD DNS

    四、DNSPOD获取密钥和脚本配置

    首先我们打开DNSPOD的官网:https://dnspod.cn/
    然后我们登录,点击右上角头像下面的API管理,直达链接
    如果有则不用创建。我们复制这两个值备用。

Tips:如果显示未找到命令,说明您的主机没有此程序,您可以试试vi /opt/lego/lego-renew.sh
Debian/Ubuntu:apt install vim -y | Red Hat/CentOS: yum install vim -y

我们输入:vim /opt/lego/lego-renew.sh #新建一个脚本文件

#!/bin/bash
# /opt/lego/lego-renew.sh
export TENCENTCLOUD_SECRET_ID="your secret id"
export TENCENTCLOUD_SECRET_KEY="your secret key"
export LEGO_PATH="/opt/lego"
echo "Renew ing…"
/opt/lego/lego -–email="you@example.com" -–domains="example.org" –-domains="*.example.org"  –dns="tencentcloud" renew  && echo "Done."

输入(复制粘贴更改)完毕后,按下ESC,键入: :wq (英文小写)后回车

Tip:建议先运行一下官方示例,创建好证书然后再续订

# 官方实例:
TENCENTCLOUD_SECRET_ID=abcdefghijklmnopqrstuvwx \
TENCENTCLOUD_SECRET_KEY=your-secret-key \
LEGO_PATH=/opt/lego/ \
lego --email you@example.com --dns tencentcloud --domains my.example.org run

这里强烈建议设置你的LEGO_PATH,否则证书生成到 /用户家目录/.lego (反正我强迫症受不了)
而且证书不能移动,否则可能会续签失败,就是说别生成了久移动走了或者删除了
Tips:最后的run是第一次申请的时候使用的,后台挂Timer需要替换成renew

五、AliDNS获取密钥和脚本配置

阿里云的的方法和DNSPOD大同小异
首先我们先进入官网:https://www.aliyun.com/
登录后进入后台,鼠标移植头像点击AccessKey 管理,进入 RAM 访问控制 直达链接
没有就新建一个,有就用那个,可以配置权限
仍然是先运行一遍官方示例

ALICLOUD_ACCESS_KEY=your-secret-id\
ALICLOUD_SECRET_KEY=your-secret-key \
LEGO_PATH=/opt/lego/ \
lego –-email you@example.com –-dns alidns –-domains my.example.org run

然后:vim /opt/lego/lego-renew.sh 创建续订脚本

#!/bin/bash
# /opt/lego/lego-renew.sh
export ALICLOUD_ACCESS_KEY="your secret id"
export ALICLOUD_SECRET_KEY="your secret key"
export LEGO_PATH="/path/to/ca/"
echo "Renew ing…"
/opt/lego/lego –-email="you@example.com" –-domains="example.org" –-domains="*.example.org"  -–dns="alidns" renew  && echo "Done."

Tips:不要把你的任何Key写进环境变量里,因为你永远不知道会不会有恶意程序扫描您主机的环境变量

其他订阅方式请自行查询文档:官方文档

六:使用Timer调用Service的Unit进行计划任务。

实例:vim /usr/lib/systemd/system/lego-renew.service

[Unit]
Description=Lego-Renew
Documentation=https://studio.yhdzz.cn/posts/1024.html
[Service]
ExecStart=bash /opt/lego/lego-renew.sh
[Install]
WantedBy=multi-user.target

实例:vim /usr/lib/systemd/system/lego-renew.timer

[Unit]
Description=Lego-Renew-Timer
Documentation=https://studio.yhdzz.cn/posts/1024.html
[Timer]
OnCalendar=Sun *-*-* 02:50:00
Unit=lego-renew.service
[Install]
WantedBy=timers.target

七、启动服务

systemctl start lego-renew.timer
systemctl start lego-renew.service
# 将服务加入开机自启
systemctl enable lego-renew.service
systemctl enable lego-renew.timer

八、修正

2023年1月31日追加:

1、说法存在一定错误,泛解析只能保存特定的域名,不是无限数量的下面示例:

如果是 *.yhdzz.cn

那他能保护的只能是yhdzz.cn的子域,比如www.yhdzz.cn,blog.yhdzz.cn,studio.yhdzz.cn
但是不能保护三级域名,例如:music.api.yhdzz.cn,bgm.api.yhdzz.cn

这种域名是必须是*.api.yhdzz.cn

但是他只能保护上述的几个三级域名,诸如api.music.yhdzz.cn这种是没法保护的。所以使用这种证书需要规划好你的证书保护范围。

2、亲测证书renew的时候会重新申请证书并替换。

所以如果您用的是宝塔相关的SSL来管理证书的话,这个Renew对您无效,但是也有解决办法,就是在网页文件那里将Nginx配置:

    #HTTP_TO_HTTPS_END
    ssl_certificate    /www/server/panel/vhost/cert/blog.yhdzz.cn/fullchain.pem;
    ssl_certificate_key    /www/server/panel/vhost/cert/blog.yhdzz.cn/privkey.pem;

的路径改成设置的lego的证书生成路径,但是这种方法很费劲,您有多少网站就需要多少替换多少,而且宝塔的管理功能会失效

3、可能有点办法

就是宝塔的ssl泛解析目录在:/www/server/panel/vhost/ssl
假设你的lego生成的证书保存在:/opt/lego/certificates
这样你就可以设置ln -s软连接

# 这里我给个示例,替换我的泛解析为:yhdzz.cn的域名,因为是一个子域,所以只有一对pem和key
pwd
# /www/server/panel/vhost/ssl
cd yhdzz.cn
ls
# fullchain.pem  info.json  privkey.pem
#info.josn不管
mv fullchain.pem fullchain.pem.bak
mv privkey.pem privkey.pem.bak
# 原来的证书备份一下
ln -s /opt/lego/certificates/_.yhdzz.cn.crt /www/server/panel/vhost/ssl/yhdzz.cn/fullchain.pem
ln -s /opt/lego/certificates/_.yhdzz.cn.key /www/server/panel/vhost/ssl/yhdzz.cn/privkey.pem
# 这样我们就得到了证书的软连接
# 命令结束

lego+systemctl实现SSL泛解析证书注册并自动更新
这样的话就可以很方便的替换了,但是到期时间是在info.json,所以我们可以改也可以不改,因为不影响前面的显示和域名到期通知

下载权限
查看
  • 免费下载
    评论并刷新后下载
    登录后下载
  • {{attr.name}}:
您当前的等级为
登录后免费下载登录 小黑屋反思中,不准下载! 评论后刷新页面下载评论 支付以后下载 请先登录 您今天的下载次数(次)用完了,请明天再来 支付积分以后下载立即支付 支付以后下载立即支付 您当前的用户组不允许下载升级会员
您已获得下载权限 您可以每天下载资源次,今日剩余
温馨提示:

1.本站大部分内容均收集于网络!若内容若侵犯到您的权益,请发送邮件至:xiaoman1221@yhdzz.cn,工作室将第一时间处理!

2.资源所需价格并非资源售卖价格,是收集、整理、编辑详情以及本站运营的适当补贴,并且本站不提供任何免费技术支持。

3.所有资源仅限于参考和学习,版权归原作者所有。

给TA投喂
共{{data.count}}人
人已投喂
Kotlin默认

kotlin学习笔记-1

2022-9-14 0:30:24

感情日常默认

一周年 Powered By Ydstudio

2022-12-21 0:41:06

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
搜索