community.crypto.openssl_privatekey_pipe 模块 – 无需磁盘访问即可生成 OpenSSL 私钥

注意

此模块是 community.crypto 集合 (版本 2.22.3) 的一部分。

如果您使用的是 ansible 包,则可能已经安装了此集合。它不包含在 ansible-core 中。要检查它是否已安装,请运行 ansible-galaxy collection list

要安装它,请使用:ansible-galaxy collection install community.crypto。您需要其他要求才能使用此模块,有关详细信息,请参阅 要求

要在 playbook 中使用它,请指定:community.crypto.openssl_privatekey_pipe

community.crypto 1.3.0 中的新增功能

概要

  • 密钥以 PEM 格式生成。

  • 确保不要将此模块的结果写入日志或控制台,因为它包含私钥数据!使用 no_log 任务选项以确保安全。

  • 请注意,此模块实现为 action 插件,并且始终在控制器上执行。

  • 可以生成 RSADSAECCEdDSA 私钥。

  • 这允许在无需将中间版本写入磁盘的情况下读取和写入密钥到保管库。

  • 此模块允许用户无需磁盘访问即可(重新)生成 OpenSSL 私钥。

注意

此模块具有相应的 action 插件

要求

以下要求是在执行此模块的主机上需要的。

  • cryptography >= 1.2.3(较旧的版本也可能有效)

参数

参数

注释

cipher

字符串

用于加密私钥的密码。仅当提供 passphrase 时才使用。

必须为 auto

默认值: "auto"

content

字符串

当前的私钥数据。

幂等性所需。如果未提供,模块将始终返回更改,并且所有与幂等性相关的选项都将被忽略。

content_base64

布尔值

如果内容是 base64 编码的,则设置为 true

选项

  • false ← (默认)

  • true

curve

字符串

请注意,并非所有曲线都受所有版本的 cryptography 支持。

为了最大限度地提高互操作性,应使用 secp384r1secp256r1

我们使用在 IANA TLS 注册表 中定义的曲线名称。

请注意,除了 secp224r1secp256k1secp256r1secp384r1secp521r1 之外的所有曲线都不建议用于新的私钥。

选项

  • "secp224r1"

  • "secp256k1"

  • "secp256r1"

  • "secp384r1"

  • "secp521r1"

  • "secp192r1"

  • "brainpoolP256r1"

  • "brainpoolP384r1"

  • "brainpoolP512r1"

  • "sect163k1"

  • "sect163r2"

  • "sect233k1"

  • "sect233r1"

  • "sect283k1"

  • "sect283r1"

  • "sect409k1"

  • "sect409r1"

  • "sect571k1"

  • "sect571r1"

format

字符串

确定私钥的写入格式。默认情况下,PKCS1(传统的 OpenSSL 格式)用于所有支持它的密钥。请注意,并非每个密钥都可以导出为任何格式。

auto 根据密钥格式选择格式。值 auto_ignore 也执行相同的操作,但对于现有的私钥文件,如果其格式不是自动选择的生成格式,则不会强制重新生成。

请注意,如果现有私钥的格式不匹配,则默认情况下会 **重新生成** 密钥。要更改此行为,请使用 format_mismatch 选项。

选项

  • "pkcs1"

  • "pkcs8"

  • "raw"

  • "auto"

  • "auto_ignore" ← (默认)

format_mismatch

字符串

如果私钥的格式与预期格式不匹配,但所有其他参数都符合预期,则确定模块的行为。

如果设置为 regenerate(默认值),则生成一个新的私钥。

如果设置为 convert,则密钥将转换为新格式。

仅受 cryptography 后端支持。

选项

  • "regenerate" ← (默认)

  • "convert"

passphrase

字符串

私钥的密码。

regenerate

字符串

允许配置模块允许在哪些情况下重新生成私钥。如果目标文件不存在,模块将始终生成一个新密钥。

默认情况下,如果密钥与模块选项不匹配,则会重新生成密钥,但密钥无法读取或密码不匹配的情况除外。请注意,这在 Ansible 2.10 中已更改。对于 Ansible 2.9,其行为如同指定了full_idempotence

如果设置为never,如果密钥无法读取或密码不匹配,则模块将失败,并且永远不会重新生成现有密钥。

如果设置为fail,如果密钥与模块选项不对应,则模块将失败。

如果设置为partial_idempotence,如果密钥不符合模块选项,则会重新生成密钥。如果密钥无法读取(文件损坏)、密钥受未知密码保护,或者密钥不受密码保护但指定了密码,则不会重新生成密钥。

如果设置为full_idempotence,如果密钥不符合模块选项,则会重新生成密钥。如果密钥无法读取(文件损坏)、密钥受未知密码保护,或者密钥不受密码保护但指定了密码,也是这种情况。使用此选项时,请务必进行备份

如果设置为always,模块将始终重新生成密钥。

请注意,如果format_mismatch设置为convert并且除了格式之外的所有内容都匹配,则密钥将始终被转换,除非regenerate设置为always

选项

  • "never"

  • "fail"

  • "partial_idempotence"

  • "full_idempotence" ← (默认)

  • "always"

return_current_key

布尔值

设置为true,以便在模块未生成新密钥时返回当前私钥。

请注意,在检查模式下,如果此选项未设置为true,则模块将始终返回当前密钥(如果已提供),并且 Ansible 将将其替换为VALUE_SPECIFIED_IN_NO_LOG_PARAMETER

选项

  • false ← (默认)

  • true

select_crypto_backend

字符串

确定要使用的加密后端。

默认选择是auto,如果可用,它将尝试使用cryptography

如果设置为cryptography,将尝试使用cryptography库。

选项

  • "auto" ← (默认)

  • "cryptography"

size

整数

要生成的 TLS/SSL 密钥的大小(以位为单位)。

默认值:4096

type

字符串

用于生成 TLS/SSL 私钥的算法。

请注意,ECCX25519X448Ed25519Ed448需要cryptography后端。X25519需要 cryptography 2.5 或更高版本,而X448Ed25519Ed448需要 cryptography 2.6 或更高版本。对于ECC,所需的最小 cryptography 版本取决于curve选项。

选项

  • "DSA"

  • "ECC"

  • "Ed25519"

  • "Ed448"

  • "RSA" ← (默认)

  • "X25519"

  • "X448"

属性

属性

支持

描述

action

支持:完全支持

表明这具有相应的 action 插件,因此可以在控制器上执行某些选项。

async

支持:不支持

此操作完全在控制器上运行。

支持与async关键字一起使用。

check_mode

支持:完全支持

目前在检查模式下,私钥不会被(重新)生成,只会设置更改状态。这将在 community.crypto 3.0.0 中更改。

从 community.crypto 3.0.0 开始,模块将忽略检查模式,并始终表现得好像检查模式未激活一样。如果您认为这破坏了您对此模块的使用案例,请在 community.crypto 存储库中创建一个问题。

可以在check_mode下运行,并在不修改目标的情况下返回更改状态预测。

diff_mode

支持:完全支持

在差异模式下,将返回有关已更改内容(或可能需要在check_mode中更改的内容)的详细信息。

另请参见

另请参见

community.crypto.openssl_privatekey

生成 OpenSSL 私钥。

community.crypto.openssl_privatekey_info

提供 OpenSSL 私钥的信息。

community.crypto.x509_certificate

生成和/或检查 OpenSSL 证书。

community.crypto.x509_certificate_pipe

生成和/或检查 OpenSSL 证书。

community.crypto.openssl_csr

生成 OpenSSL 证书签名请求 (CSR)。

community.crypto.openssl_csr_pipe

生成 OpenSSL 证书签名请求 (CSR)。

community.crypto.openssl_dhparam

生成 OpenSSL Diffie-Hellman 参数。

community.crypto.openssl_pkcs12

生成 OpenSSL PKCS#12 存档。

community.crypto.openssl_publickey

从其私钥生成 OpenSSL 公钥。

示例

- name: Generate an OpenSSL private key with the default values (4096 bits, RSA)
  community.crypto.openssl_privatekey_pipe:
  register: output
  no_log: true  # make sure that private key data is not accidentally revealed in logs!
- name: Show generated key
  ansible.builtin.debug:
    msg: "{{ output.privatekey }}"
  # DO NOT OUTPUT KEY MATERIAL TO CONSOLE OR LOGS IN PRODUCTION!


# The following example needs CNCF SOPS (https://github.com/getsops/sops) set up and
# the community.sops collection installed. See also
# https://docs.ansible.org.cn/ansible/latest/collections/community/sops/docsite/guide.html

- name: Generate or update a CNCF SOPS encrypted key
  block:
    - name: Update SOPS-encrypted key with the community.sops collection
      community.crypto.openssl_privatekey_pipe:
        content: "{{ lookup('community.sops.sops', 'private_key.pem.sops') }}"
        size: 2048
      register: output
      no_log: true  # make sure that private key data is not accidentally revealed in logs!

    - name: Update encrypted key when openssl_privatekey_pipe reported a change
      community.sops.sops_encrypt:
        path: private_key.pem.sops
        content_text: "{{ output.privatekey }}"
      when: output is changed
  always:
    - name: Make sure that output (which contains the private key) is overwritten
      ansible.builtin.set_fact:
        output: ''

返回值

常用返回值已在此处记录,以下是此模块特有的字段

Key

描述

curve

字符串

用于生成 TLS/SSL 私钥的椭圆曲线。

返回:已更改或成功,并且typeECC

示例:"secp256r1"

fingerprint

字典

公钥的指纹。将为每个可用的hashlib.algorithms生成指纹。

返回:已更改或成功

示例:{"md5": "84:75:71:72:8d:04:b5:6c:4d:37:6d:66:83:f5:4c:29", "sha1": "51:cc:7c:68:5d:eb:41:43:88:7e:1a:ae:c7:f8:24:72:ee:71:f6:10", "sha224": "b1:19:a6:6c:14:ac:33:1d:ed:18:50:d3:06:5c:b2:32:91:f1:f1:52:8c:cb:d5:75:e9:f5:9b:46", "sha256": "41:ab:c7:cb:d5:5f:30:60:46:99:ac:d4:00:70:cf:a1:76:4f:24:5d:10:24:57:5d:51:6e:09:97:df:2f:de:c7", "sha384": "85:39:50:4e:de:d9:19:33:40:70:ae:10:ab:59:24:19:51:c3:a2:e4:0b:1c:b1:6e:dd:b3:0c:d9:9e:6a:46:af:da:18:f8:ef:ae:2e:c0:9a:75:2c:9b:b3:0f:3a:5f:3d", "sha512": "fd:ed:5e:39:48:5f:9f:fe:7f:25:06:3f:79:08:cd:ee:a5:e7:b3:3d:13:82:87:1f:84:e1:f5:c7:28:77:53:94:86:56:38:69:f0:d9:35:22:01:1e:a6:60:...:0f:9b"}

privatekey

字符串

生成的私钥的内容。

请注意,如果结果未更改,则只有在return_current_key选项设置为true时,才会返回当前私钥。

如果密钥为原始格式,则将进行 Base64 编码。

返回:已更改,或return_current_keytrue

size

整数

TLS/SSL 私钥的大小(以位为单位)。

返回:已更改或成功

示例:4096

type

字符串

用于生成 TLS/SSL 私钥的算法。

返回:已更改或成功

示例:"RSA"

作者

  • Yanis Guenane (@Spredzy)

  • Felix Fontein (@felixfontein)