当前位置: 首页 > 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  # 仅当证书
http://www.lryc.cn/news/544084.html

相关文章:

  • Golang快速上手01/Golang基础
  • [Web 安全] 反序列化漏洞 - 学习笔记
  • 【学习笔记】Google的Lyra项目:基于神经网络的超低比特率语音编解码技术
  • Unity Dedicated Server 控制台 输出日志LOg 中文 乱码
  • 【Excel】 Power Query抓取多页数据导入到Excel
  • 去耦电容的作用详解
  • HTTPS 与 HTTP 的区别在哪?
  • let、const【ES6】
  • openharmony5.0中hdf框架中实现驱动程序的动态加载和管理的技术细节分析
  • TVS管学习记录
  • 数据库表的各种设计
  • JWT使用教程
  • 【大模型系列篇】如何解决DeepSeek-R1结构化输出问题,使用PydanticAl和DeepSeek构建结构化Agent
  • 老旧android项目编译指南(持续更)
  • linux中安装部署Jenkins,成功构建springboot项目详细教程
  • AI开发利器:Anaconda
  • java网络编程--基于TCP协议的网络编程
  • PageHelper新发现
  • Redis 数据结构和使用详解(带示例)
  • 深度解读 Chinese CLIP 论文:开启中文视觉对比语言预训练
  • SpringBoot 2 后端通用开发模板搭建(异常处理,请求响应)
  • 【Oracle专栏】sqlplus显示设置+脚本常用显示命令
  • DeepSeek 助力 Vue3 开发:打造丝滑的页眉(Header)
  • JVM线程分析详解
  • 【备赛】点亮LED
  • 【音视频】编解码相关概念总结
  • Python爬虫(四)- Selenium 安装与使用教程
  • Node.js项目启动流程以及各个模块执行顺序详解
  • 各种类型网络安全竞赛有哪些 网络安全大赛的简称
  • 浅谈人工智能与深度学习的应用案例研究