ansible - 在 Ansible 中生成证书链
问题描述
我正在尝试使用 Ansible OpenSSL 模块生成证书链(自签名 + 一个由自签名的证书)。
到目前为止有以下任务:
- name: Generate a Self Signed OpenSSL certificate
become: yes
block:
- apt:
name: python-openssl
update_cache: yes
- openssl_privatekey:
path: /tmp/ansible.com.pem
- openssl_csr:
path: /tmp/ansible.com.csr
privatekey_path: /tmp/ansible.com.pem
common_name: ansible.com
- openssl_certificate:
path: /tmp/ansible.com.crt
privatekey_path: /tmp/ansible.com.pem
csr_path: /tmp/ansible.com.csr
provider: selfsigned
- openssl_privatekey:
path: /tmp/child.com.pem
- openssl_csr:
path: /tmp/child.com.csr
privatekey_path: /tmp/child.com.pem
common_name: child.com
- openssl_certificate:
path: /tmp/child.com.crt
privatekey_path: /tmp/ansible.com.pem
csr_path: /tmp/child.com.csr
provider: selfsigned
但问题是子证书无效:
openssl verify -verbose -CAfile /tmp/ansible.com.crt /tmp/child.com.crt
/tmp/child.com.crt: CN = child.com
error 18 at 0 depth lookup:self signed certificate
OK
我正在使用 Ansible 2.6.1
解决方案
自签名证书是自签名证书,无论您为签名提供了什么密钥(无论如何,此密钥永远不会被验证,因为“您直接信任证书”)。
如果您child.com.crt
使用命令检查证书的内容openssl x509 -in /tmp/child.com.crt -text -noout
,您将看到:
Certificate:
Signature Algorithm: sha256WithRSAEncryption
Issuer: CN=child.com
Subject: CN=child.com
不是Issuer: CN=ansible.com
(并且在签名任务期间没有办法知道它是谁的密钥,仅基于密钥 - 密钥只是一个随机数;您需要在任务中的某处提供签名方的证书,这你没有)。
在 Ansible 2.7 中,您想要实现的目标将通过此提交ownca
引入的新提供程序实现:
'ownca' 提供程序旨在生成使用您自己的 CA(证书颁发机构)证书(自签名证书)签名的 OpenSSL 证书。
[ ]
例子:
- name: Generate an OpenSSL certificate signed with your own CA certificate openssl_certificate: path: /etc/ssl/crt/ansible.com.crt csr_path: /etc/ssl/csr/ansible.com.csr ownca_path: /etc/ssl/crt/ansible_CA.crt ownca_privatekey_path: /etc/ssl/private/ansible_CA.pem provider: ownca
现在(直到 Ansible 2.6.x)您需要使用该模块调用openssl x509 -req
(参见示例) 。command
推荐阅读
- javascript - 如果它仅取决于输入值而不是输入大小,如何确定 Big-o 复杂度?
- javascript - 创建 JSON 对象更新器
- java - Fargate Java 微服务遇到 java.net.SocketException:连接重置错误
- laravel - 关系分页
- dspace - 'dsrun' 不被识别为内部或外部命令
- docker - 码头集装箱内未经授权的 WGet
- javascript - 根据 Javascript 中的今天日期获取下一个或最后一个日期和月份
- internet-explorer-9 - 字体真棒 all.js 文件在 ie9 中不起作用
- c - 如何将二维数组传递给 C 中大小未知的函数?
- php - 通过 file_get_contents 发送 url 参数返回 nothig