community.crypto.x509_certificate_info 模块 – 提供 OpenSSL X.509 证书信息

注意

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

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

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

要在剧本中使用它,请指定:community.crypto.x509_certificate_info

摘要

要求

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

参数

参数

注释

content

字符串

在 community.crypto 1.0.0 中添加

PEM 格式的 X.509 证书内容。

必须指定 pathcontent,但不能同时指定两者。

name_encoding

字符串

如何对返回值中的名称(DNS 名称、URI、电子邮件地址)进行编码。

ignore 将使用后端返回的编码。

idna 将把域名中的所有标签转换为 IDNA 编码。将优先使用 IDNA2008,如果 IDNA2008 编码失败,则使用 IDNA2003。

unicode 将把域名中的所有标签转换为 Unicode。将优先使用 IDNA2008,如果 IDNA2008 解码失败,则使用 IDNA2003。

注意idnaunicode 需要安装 idna Python 库

选项

  • "ignore" ← (默认)

  • "idna"

  • "unicode"

path

path

从远程绝对路径加载证书文件。

必须指定 pathcontent,但不能同时指定两者。

支持 PEM 和 DER 格式。

select_crypto_backend

字符串

确定要使用的加密后端。

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

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

选项

  • "auto" ← (默认)

  • "加密"

有效时间

字典

一个名称映射到时间规范的字典。此处指定的每个时间都将检查证书在此时间点是否有效。有关结果的信息,请参见valid_at返回值。

时间可以指定为相对时间或绝对时间戳。

时间始终解释为UTC。

有效格式为[+-]timespec | ASN.1 TIME,其中timespec可以是整数+[w | d | h | m | s](例如+32w1d2h),以及ASN.1 TIME(换句话说,模式YYYYMMDDHHMMSSZ)。请注意,所有时间戳都将被视为UTC。

属性

属性

支持

描述

check_mode

支持:完全支持

此操作不会修改状态。

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

diff_mode

支持:N/A

此操作不会修改状态。

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

备注

注意

  • 所有时间戳值均以ASN.1 TIME格式提供,换句话说,遵循YYYYMMDDHHMMSSZ模式。它们都为UTC。

另请参见

另请参见

community.crypto.x509_certificate

生成和/或检查OpenSSL证书。

community.crypto.x509_certificate_pipe

生成和/或检查OpenSSL证书。

community.crypto.x509_certificate_info 过滤器插件

此模块的过滤器变体。

community.crypto.to_serial 过滤器插件

将整数转换为以冒号分隔的十六进制数字列表。

示例

- name: Generate a Self Signed OpenSSL certificate
  community.crypto.x509_certificate:
    path: /etc/ssl/crt/ansible.com.crt
    privatekey_path: /etc/ssl/private/ansible.com.pem
    csr_path: /etc/ssl/csr/ansible.com.csr
    provider: selfsigned


# Get information on the certificate

- name: Get information on generated certificate
  community.crypto.x509_certificate_info:
    path: /etc/ssl/crt/ansible.com.crt
  register: result

- name: Dump information
  ansible.builtin.debug:
    var: result


# Check whether the certificate is valid or not valid at certain times, fail
# if this is not the case. The first task (x509_certificate_info) collects
# the information, and the second task (assert) validates the result and
# makes the playbook fail in case something is not as expected.

- name: Test whether that certificate is valid tomorrow and/or in three weeks
  community.crypto.x509_certificate_info:
    path: /etc/ssl/crt/ansible.com.crt
    valid_at:
      point_1: "+1d"
      point_2: "+3w"
  register: result

- name: Validate that certificate is valid tomorrow, but not in three weeks
  ansible.builtin.assert:
    that:
      - result.valid_at.point_1      # valid in one day
      - not result.valid_at.point_2  # not valid in three weeks

返回值

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

描述

authority_cert_issuer

列表 / 元素=字符串

证书的颁发机构证书颁发者,作为一般名称列表。

如果AuthorityKeyIdentifier扩展不存在,则为none

有关如何处理IDN,请参见name_encoding

返回:成功

示例:["DNS:www.ansible.com", "IP:1.2.3.4"]

authority_cert_serial_number

整数

证书的颁发机构证书序列号。

如果AuthorityKeyIdentifier扩展不存在,则为none

此返回值为**整数**。如果您需要以冒号分隔的十六进制字符串形式的序列号,例如11:22:33,则需要使用community.crypto.to_serial将其转换为该形式。

返回:成功

示例:12345

authority_key_identifier

字符串

证书的颁发机构密钥标识符。

标识符以十六进制返回,使用:分隔字节。

如果AuthorityKeyIdentifier扩展不存在,则为none

返回:成功

示例:"00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:00:11:22:33"

basic_constraints

列表 / 元素=字符串

basic_constraints扩展中的条目,如果扩展不存在,则为none

返回:成功

示例:["CA:TRUE", "pathlen:1"]

basic_constraints_critical

布尔值

basic_constraints扩展是否为关键。

返回:成功

expired

布尔值

证书是否已过期(换句话说,notAfter在过去)。

返回:成功

extended_key_usage

列表 / 元素=字符串

extended_key_usage扩展中的条目,如果扩展不存在,则为none

返回:成功

示例:["Biometric Info", "DVCS", "Time Stamping"]

extended_key_usage_critical

布尔值

extended_key_usage扩展是否为关键。

返回:成功

extensions_by_oid

字典

为每个扩展OID返回一个字典。

返回:成功

示例:{"1.3.6.1.5.5.7.1.24": {"critical": false, "value": "MAMCAQU="}}

critical

布尔值

扩展是否为关键。

返回:成功

value

字符串

扩展的Base64编码值(DER格式)。

注意根据使用的cryptography版本,无法提取扩展的ASN.1内容,而只能在cryptography解析扩展的情况下提供扩展的重新编码内容。这通常会产生完全相同的值,除非原始扩展值格式错误。

返回:成功

示例:"MAMCAQU="

fingerprints

字典

在community.crypto 1.2.0中添加

整个证书的DER编码形式的指纹。

针对每个可用的哈希算法,都会计算指纹。

返回:成功

示例:"{'sha256': 'd4:b3:aa:6d:c8:04:ce:4e:ba:f6:29:4d:92:a3:94:b0:c2:ff:bd:bf:33:63:11:43:34:0f:51:b0:95:09:2f:63', 'sha512': 'f7:07:4a:f0:b0:f0:e6:8b:95:5f:f9:e6:61:0a:32:68:f1..."

issuer

字典

证书的颁发者。

请注意,对于重复的值,只返回最后一个值。

返回:成功

示例:{"commonName": "ca.example.com", "organizationName": "Ansible"}

issuer_ordered

列表 / 元素=列表

证书的颁发者,作为有序的元组列表。

返回:成功

示例:[["organizationName", "Ansible"], [{"commonName": "ca.example.com"}]]

issuer_uri

字符串

在community.crypto 2.9.0中添加

颁发者URI(如果包含在证书中)。如果没有包含颁发者URI,则为none

返回:成功

key_usage

字符串

key_usage扩展中的条目,如果扩展不存在,则为none

返回:成功

示例:"['Key Agreement', 'Data Encipherment']"

key_usage_critical

布尔值

key_usage扩展是否为关键。

返回:成功

not_after

字符串

作为ASN.1 TIME的notAfter日期。

返回:成功

示例:"20190413202428Z"

not_before

字符串

作为ASN.1 TIME的notBefore日期。

返回:成功

示例:"20190331202428Z"

ocsp_must_staple

布尔值

如果存在OCSP Must Staple扩展,则为true,否则为none

返回:成功

ocsp_must_staple_critical

布尔值

ocsp_must_staple扩展是否为关键。

返回:成功

ocsp_uri

字符串

OCSP响应者URI(如果包含在证书中)。如果没有包含OCSP响应者URI,则为none

返回:成功

public_key

字符串

证书的PEM格式公钥。

返回:成功

示例:"-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A..."

public_key_data

字典

在community.crypto 1.7.0中添加

公钥数据。取决于公钥的类型。

返回:成功

curve

字符串

ECC的曲线名称。

返回:public_key_type=ECC

exponent

整数

RSA 密钥的公钥指数。

返回:public_key_type=RSA

exponent_size

整数

私钥的最大位数。这基本上是所用子群的位大小。

返回:public_key_type=ECC

g

整数

DSA 的 g 值。

这是跨越所用素数域的乘法群子群的元素。

返回:public_key_type=DSA

modulus

整数

RSA 密钥的模数。

返回:public_key_type=RSA

p

整数

DSA 的 p 值。

这是进行算术运算的素数模。

返回:public_key_type=DSA

q

整数

DSA 的 q 值。

这是一个除 p - 1 的素数,同时也是所用素数域的乘法群子群的阶。

返回:public_key_type=DSA

size

整数

模数(RSA)或素数(DSA)的位大小。

返回:public_key_type=RSApublic_key_type=DSA

x

整数

椭圆曲线上的公共点的 x 坐标。

返回:public_key_type=ECC

y

整数

对于 public_key_type=ECC,这是椭圆曲线上的公共点的 y 坐标。

对于 public_key_type=DSA,这是公开的群元素,其关于 g 的离散对数是私钥。

返回:public_key_type=DSApublic_key_type=ECC

public_key_fingerprints

字典

证书公钥的指纹。

针对每个可用的哈希算法,都会计算指纹。

返回:成功

示例:"{'sha256': 'd4:b3:aa:6d:c8:04:ce:4e:ba:f6:29:4d:92:a3:94:b0:c2:ff:bd:bf:33:63:11:43:34:0f:51:b0:95:09:2f:63', 'sha512': 'f7:07:4a:f0:b0:f0:e6:8b:95:5f:f9:e6:61:0a:32:68:f1..."

public_key_type

字符串

在community.crypto 1.7.0中添加

证书公钥的类型。

其中之一为 RSADSAECCEd25519X25519Ed448X448

如果无法确定密钥类型,则将以 unknown 开头。

返回:成功

示例: "RSA"

serial_number

整数

证书的序列号。

此返回值为**整数**。如果您需要以冒号分隔的十六进制字符串形式的序列号,例如11:22:33,则需要使用community.crypto.to_serial将其转换为该形式。

返回:成功

示例: 1234

signature_algorithm

字符串

用于签署证书的签名算法。

返回:成功

示例: "sha256WithRSAEncryption"

subject

字典

证书的主题,以字典形式表示。

请注意,对于重复的值,只返回最后一个值。

返回:成功

示例: {"commonName": "www.example.com", "emailAddress": "[email protected]"}

subject_alt_name

列表 / 元素=字符串

subject_alt_name 扩展中的条目,如果扩展不存在,则为 none

有关如何处理IDN,请参见name_encoding

返回:成功

示例:["DNS:www.ansible.com", "IP:1.2.3.4"]

subject_alt_name_critical

布尔值

subject_alt_name 扩展是否为关键扩展。

返回:成功

subject_key_identifier

字符串

证书的主题密钥标识符。

标识符以十六进制返回,使用:分隔字节。

如果 SubjectKeyIdentifier 扩展不存在,则为 none

返回:成功

示例:"00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:00:11:22:33"

subject_ordered

列表 / 元素=列表

证书的主题,以有序元组列表形式表示。

返回:成功

示例: [["commonName", "www.example.com"], [{"emailAddress": "[email protected]"}]]

有效时间

字典

对于 valid_at 选项中提供的每个时间戳,证书在该时间点是否有效。

返回:成功

version

整数

证书版本。

返回:成功

示例: 3

作者

  • Felix Fontein (@felixfontein)

  • Yanis Guenane (@Spredzy)

  • Markus Teufelberger (@MarkusTeufelberger)