我正在尝试做相当于:
curl -X POST --data <json> --key <path to key> --cert <path to cert> --cacert <path to cacert> --header "Content-Type: application/json" <url>
在一个安莎的游戏中。根据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
因为man curl指定它将读取环境变量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,我收到错误:“无法验证<url>
的SSL证书。确保您的托管系统安装了有效的CA证书......”。我知道,如果我传入validate_certs=False
,那么该方法将起作用,我知道它可以通过命令行与curl一起工作。
是否有另一种选择我可以传入URI模块来绕过这个问题?
uri
module不是cURL,它是完整的python实现。所以cURL env-vars或选项无法发挥作用。
others
选项被记录为“文件模块接受的所有参数也在这里工作”,因此它只是意味着您可以使用owner
,group
,mode
等来设置dest
的属性。
client_cert
和client_key
在最近的2.4中被添加以修复issue #18141并且他们没有考虑服务器TLS认证...
我可以看到3个解决方案:
uri
任务的目标主机上)validate_certs: no
选项禁用服务器证书验证(因此不使用CA证书)cacert
选项的支持