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 私钥。

  • 这允许读取和写入 Vault 中的密钥,而无需将中间版本写入磁盘。

  • 此模块允许您(重新)生成无需磁盘访问的 OpenSSL 私钥。

注意

此模块具有相应的 action 插件

要求

执行此模块的主机需要满足以下要求。

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

参数

参数

注释

cipher

字符串

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

必须为 auto

默认值: "auto"

content

字符串

当前的私钥数据。

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

content_base64

布尔值

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

选择

  • false ←(默认)

  • true

curve

字符串

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

为了获得最大的互操作性,应使用 secp384r1secp256r1

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

请注意,除了 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

integer

要生成的 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

支持:

此 action 完全在控制器上运行。

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

check_mode

支持: 完整

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

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

可以在 check_mode 中运行,并返回更改的状态预测,而无需修改目标。

diff_mode

支持: 完整

当处于 diff 模式时,将返回有关已更改的内容(或可能需要在 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 私钥的椭圆曲线。

返回: changed 或 success,并且 typeECC

示例: "secp256r1"

fingerprint

dictionary

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

返回: changed 或 success

示例: {"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 编码。

返回: changed,或者 return_current_keytrue

size

integer

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

返回: changed 或 success

示例: 4096

type

字符串

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

返回: changed 或 success

示例: "RSA"

作者

  • Yanis Guenane (@Spredzy)

  • Felix Fontein (@felixfontein)