community.crypto.get_certificate 模块 – 从主机:端口获取证书
注意
此模块是 community.crypto 集合 (版本 2.22.3) 的一部分。
如果您使用的是 ansible
包,则可能已安装此集合。它不包含在 ansible-core
中。要检查它是否已安装,请运行 ansible-galaxy collection list
。
要安装它,请使用: ansible-galaxy collection install community.crypto
。您需要更多要求才能使用此模块,请参阅 要求 以了解详细信息。
要在剧本中使用它,请指定: community.crypto.get_certificate
。
概要
建立安全连接并返回有关所呈现证书的信息。
此模块使用 cryptography Python 库。
仅在 Python 2.7 及更高版本中支持 SNI (服务器名称指示)。
要求
执行此模块的主机需要以下要求。
使用
proxy_host
时,Python >= 2.7;当get_certificate_chain=true
时,Python >= 3.10cryptography >= 1.6
参数
参数 |
注释 |
---|---|
是否使用 Base64 对 文档长期以来声称这些值是 Base64 编码的,但实际上并非如此。为了兼容性,此选项设置为 默认值 选项
|
|
包含一个或多个根证书的 PEM 文件;如果存在,则证书将针对这些根证书进行验证。 请注意,这仅验证证书是由链签名的;而不是证书对呈现它的主机有效。 |
|
用于请求的 SSL/TLS 密码。 提供列表时,所有密码都将按顺序使用 有关更多详细信息,请参见 OpenSSL 密码列表格式。 可用的密码取决于 Python 和 OpenSSL/LibreSSL 版本。 |
|
如果设置为 服务器返回的链可以在 **注意** 这需要 **Python 3.10 或更高版本**。另请注意,只有 Python 3.13 或更高版本才正式支持此功能。该模块使用 Python 3.10、3.11 和 3.12 的内部 API 来实现相同的功能。Python 3.10、3.11 或 3.12 的未来版本可能会破坏此功能。 选项
|
|
获取证书的主机 (IP 地址也可以)。 |
|
连接的端口。 |
|
获取证书时使用的代理主机。 |
|
获取证书时使用的代理端口。 默认值: |
|
确定使用哪个加密后端。 默认选择是 如果设置为 选项
|
|
当主机名是IP地址或与服务器名称不同时,用于SNI(服务器名称指示)的服务器名称。 |
|
对于需要客户端启动加密的协议,请求安全连接。 目前仅适用于 选项
|
|
超时时间(秒)。 默认值: |
|
属性
属性 |
支持 |
描述 |
---|---|---|
支持:不支持 此操作不会修改状态。 |
可以在 |
|
支持: N/A 此操作不会修改状态。 |
在差异模式下,将返回有关已更改内容(或可能需要在 |
备注
注意
在OS X上使用ca_cert时,据报道在某些情况下验证将始终成功。
另请参见
另请参见
- community.crypto.to_serial 过滤器插件
将整数转换为以冒号分隔的十六进制数字列表。
示例
- name: Get the cert from an RDP port
community.crypto.get_certificate:
host: "1.2.3.4"
port: 3389
delegate_to: localhost
run_once: true
register: cert
- name: Get a cert from an https port
community.crypto.get_certificate:
host: "www.google.com"
port: 443
delegate_to: localhost
run_once: true
register: cert
- name: How many days until cert expires
ansible.builtin.debug:
msg: "cert expires in: {{ expire_days }} days."
vars:
expire_days: >-
{{ (
(cert.not_after | ansible.builtin.to_datetime('%Y%m%d%H%M%SZ')) -
(ansible_date_time.iso8601 | ansible.builtin.to_datetime('%Y-%m-%dT%H:%M:%SZ'))
).days }}
- name: Allow legacy insecure renegotiation to get a cert from a legacy device
community.crypto.get_certificate:
host: "legacy-device.domain.com"
port: 443
ciphers:
- HIGH
tls_ctx_options:
- OP_ALL
- OP_NO_SSLv3
- OP_CIPHER_SERVER_PREFERENCE
- OP_ENABLE_MIDDLEBOX_COMPAT
- OP_NO_COMPRESSION
- 4 # OP_LEGACY_SERVER_CONNECT
delegate_to: localhost
run_once: true
register: legacy_cert
返回值
常见的返回值已在 此处 记录,以下是此模块特有的字段
键 |
描述 |
---|---|
从端口检索到的证书。 返回:成功 |
|
指示证书是否已过期的布尔值。 返回:成功 |
|
应用于证书的扩展。 返回:成功 |
|
扩展的ASN.1内容。 如果 请注意,原始二进制值可能无法通过JSON序列化到Ansible控制器,也可能在显示时导致失败。更多信息请参见 https://github.com/ansible/ansible/issues/80258。 注意,根据使用的 返回:成功 |
|
扩展是否为关键扩展。 返回:成功 |
|
扩展的名称。 返回:成功 |
|
有关证书颁发者信息。 返回:成功 |
|
证书的过期日期。 返回:成功 |
|
证书的签发日期。 返回:成功 |
|
用于签署证书的算法。 返回:成功 |
|
有关证书主题的信息( 返回:成功 |
|
从端口检索到的已验证证书链。 第一项始终为 最后一个证书是追溯链的根证书。如果提供了 请注意, 返回:成功且 |
|
证书的版本号。 返回:成功 |