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

使用 Ansible 在 Windows 服务器上安装 SSL 证书

在本教程中,我将向您展示如何使用 Ansible 在 Windows 服务器上安装 SSL 证书。使用 Ansible 自动化 SSL 证书安装过程可以提高 IT 运营的效率、一致性和协作性。我将介绍以下步骤:

  1. 将 SSL 证书文件复制到服务器
  2. 将 PFX 证书导入指定的存储区
  3. 获取导入的证书
  4. 将证书绑定到网站
  5. 重启网站
  6. 运行 Ansible 脚本

先决条件


开始之前,请确保您已满足以下先决条件:

  • 本地计算机上已安装 Ansible
  • SSL 证书文件(.pfx 格式)和密码
  • 目标 Windows 服务器的访问权限

 步骤 1:将 SSL 证书文件复制到服务器


首先,我将使用 win_copy 模块将 SSL 证书文件复制到目标服务器。这是必要的,因为证书文件需要在服务器上可访问才能导入。以下是执行此步骤的 playbook 任务:

 

  - name: Copy SSL certificate file to serverwin_copy:src: "{{ certificate_source_path }}\\{{ certificate_name }}.{{ certificate_file_extension }}"dest: "{{ certificate_target_path }}\\{{ certificate_name }}.{{ certificate_file_extension }}" 

此任务使用 win_copy 模块将证书文件从源路径复制到目标路径。src 和 dest 选项分别指定源路径和目标路径。请务必将 certificate_source_path、certificate_name、certificate_file_extension 和 certificate_target_path 替换为您的证书的实际值。

步骤 2:导入 PFX 证书


接下来,我将使用 win_pfx_certificate 模块将 PFX 证书导入到指定的存储区。执行此步骤的 playbook 任务如下:

  - name: Import PFX Certificatewin_pfx_certificate:path: "{{ certificate_target_path }}\\{{ certificate_name }}.{{ certificate_file_extension }}" password: "{{ lookup('env', 'CERTIFICATE_PASSWORD') }}"store: "{{ store_name }}"exportable: yesforce: yes

 此任务使用 win_pfx_certificate 模块导入位于指定路径的证书。password 选项指定证书的密码,store 选项指定导入证书的存储位置。exportable 选项设置为 yes 表示允许导出私钥,force 选项设置为 yes 表示如果证书已存在于存储中,则覆盖该证书。

步骤 3:获取导入的证书


我将使用 win_certificate 模块从目标 Windows 服务器上指定的证书存储区检索导入的证书。name 和 store 选项指定要检索的证书的名称和存储区。

register 选项将此任务的结果存储在名为 imported_certificate 的变量中,该变量可在后续任务中使用。

- name: Get Certificatewin_certificate:name: "{{ certificate_name }}"store: "{{ store_name }}"register: imported_certificate

此任务很有用,因为我需要在其他任务中使用该证书,例如将其绑定到 IIS 网站。

步骤 4:将证书绑定到网站


证书已导入,我们可以将其绑定到网站了。为此,我将使用 win_iis_website_binding 模块。以下是执行此步骤的 playbook 任务:

 

- name: Bind Certificate to Websites (except Default Web Site)win_iis_website_binding:name: "{{ item }}"certificate_hash: "{{ imported_certificate.thumbprint }}"certificate_store: "{{ store_name }}"binding_information: "*:443:"state: presentwhen: "item != 'Default Web Site'"loop: "{{ iis_target_website_names }}"

 此任务使用 win_iis_website_binding 模块将证书绑定到 iis_target_website_names 列表中的每个网站。certificate_hash 和 certificate_store 选项指定要使用的证书,binding_information 选项指定网站的绑定信息,在本例中使用端口 443 上的 HTTPS。when 条件确保证书未绑定到默认网站。loop 选项指定应将此任务应用于 iis_target_website_names 列表中的每个网站。

步骤 5:重启网站


最后,我将使用 win_iis_website 模块重启网站。此步骤必不可少,因为上一步中所做的绑定更改只有在网站重启后才会生效。重启网站可确保使用新的 SSL 证书。以下是执行此步骤的 playbook 任务:

  - name: Restart Websites (except Default Web Site)win_iis_website:name: "{{ item }}"state: startedwhen: "item != 'Default Web Site'"loop: "{{ iis_target_website_names }}"

此任务将重新启动 iis_target_website_names 列表中指定的网站(默认网站除外)。win_iis_website 模块用于管理 IIS 网站的状态。在本例中,state 选项设置为 started,这意味着如果网站已停止,则将启动该网站;如果网站已启动,则保持原样。when 条件确保默认网站不受此任务的影响。如果您出于某些原因不想重新启动默认网站,这将非常有用。loop 选项指定该任务应应用于 iis_target_website_names 列表中的每个网站。这允许您使用单个任务指定要重新启动的多个网站。

步骤 6:运行 Ansible playbook

运行playbook之前,先定义好变量:

 var.yml 内容 

---
certificate_source_path: "C:\\path\\to\\certificate\\source"
certificate_target_path: "C:\\path\\to\\certificate\\target"
certificate_name: "mycert"
certificate_file_extension: "pfx"
store_name: "Personal"
iis_target_website_names:- Site_XYZ- Site_ABC

ansible-playbook 命令用于运行 Ansible playbook。playbook是一个脚本,定义了一系列将由 Ansible 在托管主机上执行的任务。

--extra-vars 选项用于在运行时将变量传递给playbook。此选项的参数应采用 YAML 字典的形式。@ 符号表示该值是文件系统上包含 YAML 字典的文件的路径。该路径应在 @ 符号后提供。-i 选项指定 Ansible 清单文件的路径。清单文件是一个文本文件,其中列出了托管主机的主机名或 IP 地址,并按主机组分组。playbook.yml 参数是要运行的playbook的路径。

ansible-playbook --extra-vars "@vars.yml" -i inventory.ini playbook.yml

 

http://www.xdnf.cn/news/12291.html

相关文章:

  • Neo4j 集群管理:原理、技术与最佳实践深度解析
  • 基于J2EE架构的在线考试系统设计与实现【源码+文档】
  • Keepalived双主模式的高可用性解决方案!
  • caliper config.yaml 文件配置,解释了每个配置项的作用和注意事项
  • 越狱蒸馏-可再生安全基准测试
  • 七、数据库的完整性
  • mysql+keepalived
  • 李沐《动手学深度学习》d2l安装教程
  • pikachu靶场通关笔记17 CSRF关卡03-CSRF(Token)
  • Java持久层技术对比:Hibernate、MyBatis与JPA的选择与应用
  • 重构城市应急指挥布控策略 ——无人机智能视频监控的破局之道
  • 【HarmonyOS 5】教育开发实践详解以及详细代码案例
  • 抽象工厂模式深度解析:从原理到与应用实战
  • ​​高频通信与航天电子的材料革命:猎板PCB高端压合基材技术解析​​
  • CentOS 7 如何安装llvm-project-10.0.0?
  • Matlab实现任意伪彩色图像可视化显示
  • 机器学习KNN算法全解析:从原理到实战
  • rk3588 区分两个相同的usb相机
  • 数据库管理与高可用-MySQL主从复制与读写分离
  • Redux 实践与中间件应用
  • 分布式Session处理的五大主流方案解析
  • Tailwind CSS 实战:基于 Kooboo 构建 AI 对话框页面(八):异步处理逻辑详解
  • Copilot for Xcode (iOS的 AI辅助编程)
  • ubuntu 22 安装milvus
  • 【QT面试题】(二)
  • RocketMQ入门5.3.2版本(基于java、SpringBoot操作)
  • 构建 MCP 服务器:第 2 部分 — 使用资源模板扩展资源
  • Unity基于GraphView的可视化关卡编辑器开发指南
  • Playwright 测试框架 - .NET
  • 智能仓储的未来:自动化、AI与数据分析如何重塑物流中心