ansibleguy.infra_pki

公钥基础设施

Ansible 角色 - 公钥基础设施 (PKI)

此角色用于在目标服务器上部署和管理一个或多个 PKI

请我喝杯咖啡

使用 EasyRSA 脚本 作为“后端”简化自动化过程。

Molecule 测试状态 YamlLint 测试状态 PyLint 测试状态 Ansible-Lint 测试状态 Ansible Galaxy

Molecule 日志: 简短, 完整

已测试:

  • Debian 11

安装

# 最新版本
ansible-galaxy role install git+https://github.com/ansibleguy/infra_pki

# 从 Galaxy 安装
ansible-galaxy install ansibleguy.infra_pki

# 或安装到自定义角色路径
ansible-galaxy install ansibleguy.infra_pki --roles-path ./roles

# 安装依赖
ansible-galaxy install -r requirements.yml

使用

你想要一个简单的 Ansible 界面?请查看我的 Ansible WebUI

配置

按需要定义配置:

示例

你可以在这里找到更详细的示例: 示例

最小设置

pki:
  crl_distribution:
    domain: 'crl.ansibleguy.net'

  instances:
    root:
      pwd_ca: !vault |
        $ANSIBLE_VAULT;1.1;AES256
        ...

      sub_cas:
        main:
          pwd_ca: !vault |
            $ANSIBLE_VAULT;1.1;AES256
            ...

          certs:
            server:  # 服务器证书
              ansibleguy_net:
                cn: 'AnsibleGuy 网站'
                san:
                  dns: ['www.ansibleguy.net', 'ansibleguy.net']
                  ip: '135.181.170.217'
                  uri: 'https://www-ansibleguy.net'

            client:  # 客户端证书
              workstation1:
                cn: 'AnsibleGuy 工作站'

你可能想使用 'ansible-vault' 来加密你的密码:

ansible-vault encrypt_string

执行

运行剧本:

ansible-playbook -K -D -i inventory/hosts.yml playbook_pki.yml

还有一个用于管理单个证书的“入口点” - 如果这些证书由其他角色自动管理,这会很有用。

# 交互式运行
ansible-playbook -K -D -i inventory/hosts.yml playbook_single_cert.yml

还有一些有用的 标签 可用:

  • instances => 跳过基本任务,但处理所有 PKI 实例(RootCA)
  • subcas => 跳过基本和实例(RootCA)任务,但处理所有 SubCA 任务
  • certs => 仅处理与管理证书相关的任务
  • certs_create => 创建不存在的证书
  • certs_renew => 续订状态为 'renewed' 的证书
  • certs_revoke => 撤销状态为 'revoked' 或 'absent' 的证书

要调试错误,可以在运行时设置 'debug' 变量:

# 警告:将记录密码!
ansible-playbook -K -D -i inventory/hosts.yml playbook.yml -e debug=yes

注意: --check 模式不支持此角色,因为它严重依赖于脚本命令任务。


功能

  • 软件包安装

    • OpenSSL
  • 配置

    • 使用组来允许对公钥的只读访问

    • 默认配置

      • 路径:
        • PKI 基础路径: '/var/local/lib/pki'
        • 脚本: '/usr/local/sbin/easyrsa'
      • PKI 用户: 'pki'
      • 只读组: 'pki_read'
      • EasyRSA 变量
        • 过期:
          • Root-CA: 20 年
          • Sub-CA: 15 年
          • 证书: 3 年
        • 哈希:
          • Root-CA: sha512
          • Sub-CA/证书: sha256
        • 算法: rsa
        • 密钥大小: 4096
      • 证书:
        • 不对证书私钥进行密码加密
        • 导出格式:
          • pkcs12 (private/.p12)
          • 证书链 (issued/.chain.crt)
    • 默认选项

      • 添加专用的 PKI 用户和只读组
      • 将 CA/Sub-CA/证书密码保存到文件,便于自动化
        • 有关替代方案的信息,请参见下方
      • 安装和配置 Nginx 服务器以提供 CRL 和 CA 公钥(_尚未实现_)
    • 默认禁用选项

      • 清除孤立(_存在但未配置_)的证书
      • 对证书私钥进行加密(_非 CA/Sub-CA_)

信息

  • 注意: 大部分角色功能可以选择启用或禁用。

    有关所有可用选项,请参见 主默认文件中的默认配置

  • 信息: 为确保角色配置“按预期”工作,使用分子进行测试!

    例如:在使用多个 Root-CA 和 Sub-CA 生成多个证书后,检查证书属性、文件和目录权限及所有权。

    请参见 验证测试

  • 警告: 你提供的不是每个设置/变量都将被检查有效性。错误的配置可能会破坏角色!

  • 注意: 如果你想了解有关 PKI 和证书的更多信息:

    • EasyRSA 项目有 很好的文档
    • 对于 (x509) 证书,请查看 OpenSSL 文档
    • 如果你想了解如何使用 'keyUsage' 和 'extendedKeyUsage',请查看此 StackExchange 的回答: 链接
    • 如果你想知道如何使用 EasyRSA 手动创建 PKI/SubCA,请查看 @QueuingKoala 的简单示例: GitHub Gist
  • 警告: 为了抵御 CA 受损,应:

    1. 确保角色创建了所需的所有 Sub-CA

    2. 将 CA 私钥 (${path_base}/ca/private/ca.key) 复制到离线介质(_记住保持冗余_)

    3. 保存用于初始化 CA 的密码(_不同于同一介质_)

    4. 使用“安全删除”工具(如 'shred')将 ca.key 文件从在线系统中删除:

      shred -vzu -n10 ca.key
      
  • 注意: 你有多种选项来提供 CA/Sub-CA/证书密码:

    • 如果 'save_passwords' 设置为 true - 保存的密码将在 CA 初始化后检索
    • 作为清单变量(_ansible-vault 加密以便在运行时解密_)
    • 运行时使用 --extra-vars
    • 如果未设置密码,角色将在运行时提示输入
  • 注意: 在全局级别设置的证书变量将被所有实例及其子 CA 继承。

    在实例级别设置的将被其子 CA 继承。

    实例/子 CA 级别的特定配置将始终覆盖继承的配置。

  • 注意: 你可以找到用于自动化证书到期监控的脚本,可以与 Zabbix 等监控系统集成,位置在 files/usr/local/bin/monitoring

  • 警告: CRL 分发设置 无法轻易更改

    一旦设置更改,所有现有证书必须重新生成。

  • 注意: 根 CA 的 'cert_expire' 变量将设置子 CA 的运行时间!

  • 注意: 用于 CA/Sub-CA/证书加密的密码将检查复杂性规则:

    • 最少 8 个字符长
    • 必须包含
      • 数字
      • 大写字母
      • 小写字母
  • 注意: 证书状态 可以设置为:

    • 'present' 或 'created' 确保证书存在
    • 'absent' 或 'revoked' 确保证书不存在
    • 'renewed' 以续订证书
关于项目

Ansible Role to provision and manage one or multiple PKI's on the target server

安装
ansible-galaxy install ansibleguy.infra_pki
许可证
other
下载
2.6k
拥有者
[email protected] | GPG: https://badges.ansibleguy.net/public.gpg