我正在尝试做相当于:
curl -X POST --data <json> --key <path to key> --cert <path to cert> --cacert <path to cacert> --header "Content-Type: application/json" <url>
在 ansible 游戏中。以下文档来自http://docs.ansible.com/ansible/latest/uri_module.html http://docs.ansible.com/ansible/latest/uri_module.html,有密钥、证书、X、标头和数据的等效项,但我还没有找到传递证书颁发机构文件的方法。
我试过了:
environment:
CURL_CA_BUNDLE: <path to cacert>
uri:
url: <url>
client_cert: <path to cert>
client_key: <path to key>
body: <json>
method: POST
body_format: json
由于 mancurl 指定它将读取环境变量CURL_CA_BUNDLE
。我也尝试过:
uri:
url: <url>
client_cert: <path to cert>
client_key: <path to key>
body: <json>
method: POST
body_format: json
others: --cacert <path to cacert>
这两种方法都没有奏效。如果没有 cacert,我会收到错误:“无法验证 SSL 证书<url>
。确保您的托管系统安装了有效的 CA 证书...”。我知道如果我通过validate_certs=False
,那么该方法将起作用,并且我知道它可以通过带有curl的命令行起作用。
是否有其他选项可以传递到 URI 模块来绕过此问题?
The uri module https://github.com/ansible/ansible/blob/devel/lib/ansible/modules/net_tools/basics/uri.py不是 cURL,它是完整的 python 实现。因此 cURL 环境变量或选项不可能起作用。
The others
选项被记录为“文件模块接受的所有参数也在这里工作”,所以它只是意味着您可以使用owner
, group
, mode
等来设置属性dest
.
client_cert
and client_key
在最近的2.4中添加只是为了修复问题#18141 https://github.com/ansible/ansible/pull/18141他们没有考虑服务器 TLS 身份验证...
我可以看到 3 个解决方案:
- 将您的 CA 证书添加到系统证书中(在目标主机上)
uri
任务) -仅对 python >= 2.7.9 有效
- Use the
validate_certs: no
禁用服务器证书验证的选项(因此无需使用 CA 证书)
- 提出问题(也许是 PR)以增加对某个问题的支持
cacert
option
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)