ansibleguy.infra_pki
Ansible 角色 - 公钥基础设施 (PKI)
此角色用于在目标服务器上部署和管理一个或多个 PKI。
使用 EasyRSA 脚本 作为“后端”简化自动化过程。
已测试:
- 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 )
- pkcs12 (private/
- 路径:
默认选项:
- 添加专用的 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 受损,应:
确保角色创建了所需的所有 Sub-CA
将 CA 私钥 (${path_base}/ca/private/ca.key) 复制到离线介质(_记住保持冗余_)
保存用于初始化 CA 的密码(_不同于同一介质_)
使用“安全删除”工具(如 '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