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

使用 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.lryc.cn/news/2403154.html

相关文章:

  • 厂区能源监控系统:网关赋能下的高效能源管理与环保监测
  • CentOS 7 如何安装llvm-project-10.0.0?
  • Cursor 1.0 的核心功能亮点及技术价值分析
  • 软考 系统架构设计师系列知识点之杂项集萃(83)
  • NLP学习路线图(二十六):自注意力机制
  • Unity3D仿星露谷物语开发60之定制角色其他部位
  • C++动态链接库封装,供C#/C++ 等编程语言使用——C++动态链接库概述(总)
  • Google机器学习实践指南(机器学习模型泛化能力)
  • MySQL性能调优:Mysql8高频面试题汇总
  • Neo4j 数据建模:原理、技术与实践指南
  • 【数据结构知识分享】顺序表详解
  • vue+elementUI+springboot实现文件合并前端展示文件类型
  • 高效绘制业务流程图!专业模板免费下载
  • Spring Boot + Prometheus 实现应用监控(基于 Actuator 和 Micrometer)
  • PowerBI企业运营分析—列互换式中国式报表分析
  • BugKu Web渗透之需要管理员
  • Java集合初始化:Lists.newArrayList vs new ArrayList()
  • VBA清空数据
  • 【信息系统项目管理师-选择真题】2025上半年(第二批)综合知识答案和详解(回忆版)
  • Java Lambda 表达式的缺点和替代方案
  • TDengine 开发指南—— UDF函数
  • 使用vsftpd搭建FTP服务器(TLS/SSL显式加密)
  • 1.1Nodejs和浏览器中的二进制处理
  • 入门AJAX——XMLHttpRequest(Post)
  • Qt(part1)Qpushbutton,信号与槽,对象树,自定义信号与槽,lamda表达式。
  • 西北某省级联通公司:3D动环模块如何实现机房“一屏统管”?
  • 【WPF】从普通 ItemsControl 到支持筛选的 ItemsControl:深入掌握 CollectionViewSource 用法
  • Zookeeper 和 Kafka 版本与 JDK 要求
  • 3步布局关键词让流量更精准
  • 视觉分析在人员行为属性检测中的应用