当前位置: 首页 > news >正文

如何使用SaltStack批量替换SSL证书方案

以下是借助 SaltStack 批量替换 SSL 证书的完整方案,该方案结合了自动化更新与回滚机制,以保障操作的高效性与安全性:


一、准备工作

  1. 目录结构搭建

    • 在 Salt Master 的 /home/salt/ssl_update 目录下构建如下结构:
      ssl_update/
      ├── update.sls        # 更新证书的状态文件 
      ├── rollback.sls      # 回滚证书的状态文件 
      └── ssl/             # 存放证书文件 
          ├── domain1/     # 按域名分类 
          │   ├── server.key  
          │   └── server.pem  
          └── domain2/
              ├── server.key  
              └── server.pem  
      
    • 按照域名分类,将新证书存入对应的目录。
  2. SaltStack 环境确认

    • 确保所有目标 Minion 已通过 salt-key -A 完成证书认证。

二、证书更新流程(update.sls )

# 定义变量(使用 Jinja 模板)
{% set domain = 'domain1' %}
{% set ssl_dir = '/usr/local/nginx/ssl' %}
{% set dst_dir = ssl_dir + '/' + domain %}  # 目标证书路径 
{% set bak_dir = '/opt/backup/ssl/' + domain %}  # 备份目录 
 
# 模块1:备份旧证书 
backup_ssl: 
  cmd.run: 
    - name: |
        year=$(openssl x509 -in {{ dst_dir }}/server.pem  -noout -enddate | awk -F '=' '{print $2}' | awk '{print $4}')
        mkdir -p {{ bak_dir }}/$year 
        cp {{ dst_dir }}/* {{ bak_dir }}/$year/
 
# 模块2:更新证书 
ssl_update: 
  file.recurse: 
    - source: salt://ssl_update/ssl/{{ domain }}  # Master 证书源路径 
    - name: {{ dst_dir }}
    - require: 
      - cmd: backup_ssl 
 
# 模块3:重启服务(以 Nginx 为例)
nginx_reload: 
  cmd.run: 
    - name: /usr/local/nginx/sbin/nginx -t && /usr/local/nginx/sbin/nginx -s reload 
    - require: 
      - file: ssl_update 

关键点

  • 备份时依据证书的有效期年份创建子目录,以便后续进行回滚操作;
  • 运用 file.recurse 同步证书文件,自动覆盖旧文件;
  • 通过 require 确保操作步骤的顺序为:备份 → 更新 → 重启服务。

三、回滚机制(rollback.sls )

# 获取备份年份(优先从 Pillar 读取,否则取前一年)
{% set year = salt['pillar.get']('year',  default=$(date +%Y -d "last year")) %}
 
rollback: 
  cmd.run: 
    - name: cp {{ bak_dir }}/{{ year }}/* {{ dst_dir }}/
    - onchanges: 
      - file: ssl_update  # 仅当证书

相关文章:

  • Java 大视界 -- Java 大数据在智慧环保污染源监测与预警中的应用(104)
  • HTML 日常开发常用标签
  • TaskBuilder设置排序条件
  • c++_sort函数
  • Spark基础篇-Application、Job、Stage 和 Task
  • 川翔云电脑优势总结
  • 三菱FX5U PLC工字轮排线算法(ST源代码)
  • LVS+Keepalived高可用群集配置案例
  • 跟着AI学vue第十三章
  • DeepSeek-OpenSourceWeek-第四天-Optimized Parallelism Strategies
  • wpf中如何让TextBox 显示字体的颜色为白色
  • Vue 3 + Vite 项目配置访问地址到服务器某个文件夹的解决方案
  • 多元数据直观表示(R语言)
  • DeepSeek 使用 手册 并解决系统繁忙问题
  • burpsuit安装教程,证书安装,jdk环境安装
  • Chapter 4 Noise performance of elementary transistor stages
  • 【拉姆齐定理:阴谋论的数学解释 关键字摘取】
  • Locust性能压测工具使用指南
  • 硬件基础(3):三极管(2):实践应用(持续更新)
  • Python—Excel全字段转json文件(极速版+GUI界面打包)
  • 四川甘孜炉霍县觉日寺管委会主任呷玛降泽被查
  • 杨文庄当选中国人口学会会长,曾任国家卫健委人口家庭司司长
  • 南方降水频繁暴雨连连,北方高温再起或现40°C酷热天气
  • 泽连斯基:正在等待俄方确认参加会谈的代表团组成
  • 崔登荣任国家游泳队总教练
  • 美国和沙特签署上千亿美元军售协议