通过 saltstack 批量更新 SSL 证书

这篇具有很好参考价值的文章主要介绍了通过 saltstack 批量更新 SSL 证书。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

哈喽大家好,我是咸鱼。

之前写过两篇关于 SSL 过期巡检脚本的文章:

  1. SSL 证书过期巡检脚本
  2. SSL 证书过期巡检脚本(Python 版)

这两篇文章都是讲如何通过脚本去自动检测 SSL 过期时间的,当我们发现某一域名的 SSL 证书过期之后,就要及时更换。

如果这个域名下有很多服务器,我们一台一台手动登录机器然后更新证书的话效率是非常低的,所以我们可以通过一些自动化运维工具去完成这些大量重复的工作。

像 ansible、puppet 这类工具也可以实现同样的效果,但是咸鱼这边主要用的还是 saltstack,所以今天介绍一些如何通过 saltstack 去批量更新 SSL 证书。

关于 saltstck 的介绍:

  1. 干货篇 | 自动化运维工具-saltstack(上)
  2. 干货篇 | 自动化运维工具-saltstack(中)
  3. 干货篇 | 自动化运维工具-saltstack(下)

首先我们在 salt-master 的主目录下创建一个新的目录,用于存放 SSL 证书和脚本,我自己机器上的 master 主目录为 /home/salt/

mkdir -pv /home/salt/ssl_update/ssl

然后把 SSL 证书放在 /home/salt/ssl_update/ssl 目录下,如果有多个域名的话需要在下面创建多个对应的目录

[root@localhost]# tree /home/salt/ssl_update/
/home/salt/ssl_update
├── rollback.sls
├── update.sls
├── ssl
│   ├── domain1
│   │   ├── server.key
│   │   └── server.pem
│   ├── domain2
│   │   ├── server.key
│   │   └── server.pem
│   └── domain3
        ├── server.key
        └── server.pem

接下来我们开始编写 saltstack 状态脚本:

  1. update.sls 负责更新证书
  2. rollback.sls 负责回滚证书

因为之前遇到过更新证书之后由于证书链不完整导致证书失效,然后不得不紧急手动还原之前的证书。

所以觉得有必要做一个回滚操作,这样新证书有问题的时候能够及时自动还原。

我们先来看一下负责更新证书的 update.sls,这个脚本分成了三个模块:

  1. SSL 证书备份
  2. SSL 证书更新
  3. Nginx 重启
{% set domain = 'doamin1' %}
{% set ssl_dir = '/usr/local/nginx/ssl' %}
{% set dst_dir = ssl_dir + '/' + domain %}
{% set bak_dir = '/opt/backup/ssl/' + domain %}

backup_ssl:
  cmd.run:
      - name: "year=$(openssl x509 -in {{ dst_dir }}/server.pem -noout -dates|grep Before|awk '{print $4}') && mkdir -p {{ bak_dir }}/${year} && \\cp {{dst_dir}}/* {{ bak_dir }}/${year}"

ssl_update:
  file.recurse:
    - source: salt://ssl_check/ssl/{{domain}}
    - name: {{ dst_dir }}
    - require:
      - cmd: backup_ssl


nginx_reload:
  cmd.run:
    - name: /usr/local/nginx/sbin/nginx -t && /usr/local/nginx/sbin/nginx -s reload
    - require:
      - file: ssl_update

首先是变量的定义

{% set domain = 'doamin1' %}
{% set ssl_dir = '/usr/local/nginx/ssl' %}
{% set dst_dir = ssl_dir + '/' + domain %}
{% set bak_dir = '/opt/backup/ssl/' + domain %}
  • domain: 设置域名为 'doamin1'
  • ssl_dir: 设置 SSL 证书存放目录为 '/usr/local/nginx/ssl'
  • dst_dir: 设置 SSL 证书实际存放路径为 ssl_dir + '/' + domain
  • bak_dir: 设置备份目录为 '/opt/backup/ssl/' + domain

然后就是 SSL 证书备份。首先创建名为 backup_ssl 的命令执行模块,通过 cmd.run 执行 shell 命令,这个命令通过 OpenSSL 获取证书的有效期限,然后将证书拷贝到备份目录,以年份为子目录。

backup_ssl:
  cmd.run:
      - name: "year=$(openssl x509 -in {{ dst_dir }}/server.pem -noout -dates|grep Before|awk '{print $4}') && mkdir -p {{ bak_dir }}/${year} && \\cp {{dst_dir}}/* {{ bak_dir }}/${year}"

这条命令看着很长,其实可以拆解成

# 获取证书有效期限然后赋值给 year 变量
year=$(openssl x509 -in {{ dst_dir }}/server.pem -noout -dates|grep Before|awk '{print $4}')

# 创建带年份后缀的备份目录
mkdir -p {{ bak_dir }}/${year} 

# 把当前的证书备份到备份目录中
cp {{dst_dir}}/* {{ bak_dir }}/${year}

接着我们开始更新 SSL 证书。创建名为 ssl_update 的文件递归模块,然后通过 file.recurse 把 salt-master 上的证书复制到指定服务器目录

ssl_update:
  file.recurse:
    - source: salt://ssl_check/ssl/{{domain}}
    - name: {{ dst_dir }}
    - require:
      - cmd: backup_ssl

更新完之后我们还要对指定服务器上的 Nginx 服务进行配置检查并重启一下

nginx_reload:
  cmd.run:
    - name: /usr/local/nginx/sbin/nginx -t && /usr/local/nginx/sbin/nginx -s reload
    - require:
      - file: ssl_update

然后我们看一下负责回滚证书的 rollback.sls,这个脚本分成了两个个模块:

  1. 证书回滚
  2. Nginx 重启
{% set domain = 'doamin1' %}
{% set ssl_dir = '/usr/local/nginx/ssl' %}
{% set dst_dir = ssl_dir + '/' + domain %}
{% set bak_dir = '/opt/backup/ssl/' + domain %}
{% set year = salt['pillar.get']('year') or salt['cmd.run']('echo $(date +%Y) - 1| bc') %}


rollback:
  cmd.run:
    - name: "cp {{ bak_dir }}/$(({{ year }}))/* {{ dst_dir }}"

start:
  cmd.run:
    - name: /usr/local/nginx/sbin/nginx -t && /usr/local/nginx/sbin/nginx -s reload
    - require:
      - cmd: rollback

设置变量 year 的命令有点复杂,我们来看一下

{% set year = salt['pillar.get']('year') or salt['cmd.run']('echo $(date +%Y) - 1| bc') %}
  1. salt['pillar.get']('year'): 尝试从 Salt Pillar 中获取名为 year 的变量的值。
  2. or: 如果前面的操作未成功(即 year 在 Pillar 中不存在),or 后面的表达式将会被执行。
  3. salt['cmd.run']('echo $(date +%Y) - 1| bc'): 这部分代码使用 SaltStack 的 cmd.run 模块执行一个 shell 命令,该命令通过 date 命令获取当前年份,然后减去 1 得到前一年的年份。bc 是一个计算器工具,用于执行数学运算。
  4. 总结一下:首先从 Salt Pillar 中查找,如果找不到则使用 shell 命令获取前一年的年份,确保在没有 Pillar 配置的情况下也有一个默认的年份

然后就是 SSL 证书回滚。创建名为 rollback 的命令执行模块,通过 cmd.run 执行 shell 命令

该命令通过将指定服务器备份目录中指定年份的证书拷贝到 SSL 证书目录实现回滚。

rollback:
  cmd.run:
    - name: "cp {{ bak_dir }}/$(({{ year }}))/* {{ dst_dir }}"

回滚完之后对指定服务器上的 Nginx 服务进行配置检查并重启一下,上面内容有,这里就不再介绍了。文章来源地址https://www.toymoban.com/news/detail-837762.html

到了这里,关于通过 saltstack 批量更新 SSL 证书的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 腾讯云免费SSL证书申请流程_2023更新教程

    腾讯云免费SSL证书申请流程_2023更新教程

    2023腾讯云免费SSL证书申请流程,一个腾讯云账号可以申请50张免费SSL证书,免费SSL证书为DV证书,仅支持单一域名,申请腾讯云免费SSL证书3分钟即可申请成功,免费SSL证书品牌为TrustAsia亚洲诚信,腾讯云百科分享腾讯云免费SSL证书申请流程,3分钟搞定: 目录 腾讯云免费SSL证

    2024年02月09日
    浏览(48)
  • 通过openSSL生成自签名的SSL证书

    通过openSSL生成自签名的SSL证书

    自签名证书:就是 指的根证书,就是颁发者:和颁发给: 是相同的。证书的签名是用证书里的公钥对应的私钥进行的签名。这样的证书除非是受信任的颁布机构颁发f,一般是不被第三方信任。一般用于内部使用及测试使用。 下面介绍生成证书的方法: 1. 生成私 钥 要创建

    2023年04月17日
    浏览(8)
  • 群晖DSM下套件及系统网页服务器ssl证书自动更新

    : DSM ssl  证书 群晖下自建服务(alist3)和系统服务在外部网络访问需要加ssl安全证书来实现基础的传输保护。 申请证书和续期手动操作都还好,不算太麻烦,但是每个应用单独证书需要复制和重启,再配合服务重启一套下来就比较麻烦了,于是有了这篇文章和末尾的

    2024年02月10日
    浏览(22)
  • ssl证书到期监控脚本,通过企业微信提前一个月通知提醒

            以下是一个简单的SSL证书到期监控脚本,它可以检查指定域名的SSL证书是否将在一个月内到期,并通过企业微信应用程序发送通知。该脚本使用 openssl 命令检查证书到期日期,并使用 curl 命令发送企业微信应用程序消息。          在这个脚本中,您需要将以下

    2024年02月16日
    浏览(12)
  • 42了解自动化运维工具 Saltstack 的基本用法,包括配置管理、批量执行

    42了解自动化运维工具 Saltstack 的基本用法,包括配置管理、批量执行

    Saltstack 是一款流行的自动化运维工具,可以用于配置管理、批量执行等任务。下面是 Saltstack 的基本用法教程。 安装 Saltstack 首先需要在控制节点上安装 Saltstack。具体安装方法可以参考 Saltstack 的官方文档。在安装过程中需要选择一个角色,通常有 master 和 minion 两个选项,

    2024年02月06日
    浏览(15)
  • Mybatis-plus通过其他字段批量更新或新增

    根据某个或者多个非ID字段进行批量更新 示例通过名称与id两个字段更新 引用mybatis-plus根据某个指定字段批量更新数据库 通过其他字段批量更新或新增

    2024年02月12日
    浏览(14)
  • 知识变现海哥:我是如何通过知识变现年赚100万的

    知识变现海哥:我是如何通过知识变现年赚100万的

      我叫王海青,大家都称我海哥,是一名知识变现导师,海青教育创始人。从2011年开始,已经从事知识变现培训服务10多年,帮助3000+人实现了个人知识技能变现,一直致力于帮助普通人,把自己的一项知识技能、兴趣爱好或特长,变成一份事业。 2014年成立海青教育,专注知

    2024年02月02日
    浏览(17)
  • 【我是土堆 - PyTorch教程】学习随手记(已更新 | 已完结 | 10w字超详细版)

    【我是土堆 - PyTorch教程】学习随手记(已更新 | 已完结 | 10w字超详细版)

    目录 1. Pytorch环境的配置及安装 如何管理项目环境? 如何看自己电脑cuda版本? 安装Pytorch  2. Python编辑器的选择、安装及配置 PyCharm  PyCharm神器 Jupyter(可交互)  3. Python学习中的两大法宝函数 说明  实战操作 总结 4. Pycharm及Jupyter使用及对比 如何在PyCharm中新建项目? Pyth

    2024年01月21日
    浏览(28)
  • 【SSL】ssl证书简介、ssl证书生成工具与ssl证书生成步骤

    【SSL】ssl证书简介、ssl证书生成工具与ssl证书生成步骤

    SSL证书是数字证书的一种,类似于驾驶证、护照和营业执照的电子副本。因为配置在服务器上,也称为SSL服务器证书。 SSL证书就是遵守 SSL协议,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能。 SSL证书通过在客户端浏览

    2024年02月10日
    浏览(12)
  • 【ssl认证、证书】SSL 证书基本概念、证书格式、openssl和keytool的区别

    【ssl认证、证书】SSL 证书基本概念、证书格式、openssl和keytool的区别

    相关文章: //-----------Java SSL begin---------------------- 【ssl认证、证书】SSL双向认证和SSL单向认证的区别(示意图) 【ssl认证、证书】java中的ssl语法API说明(SSLContext)、与keytool 工具的联系 【ssl认证、证书】SSL双向认证java实战、keytool创建证书 【ssl认证、证书】Wireshark抓包分析 【s

    2024年02月02日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包