带有cacert选项的Ansible URI模块

问题描述 投票:1回答:1

我正在尝试做相当于:

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模块来绕过这个问题?

ssl curl ansible
1个回答
3
投票

uri module不是cURL,它是完整的python实现。所以cURL env-vars或选项无法发挥作用。 others选项被记录为“文件模块接受的所有参数也在这里工作”,因此它只是意味着您可以使用ownergroupmode等来设置dest的属性。

client_certclient_key在最近的2.4中被添加以修复issue #18141并且他们没有考虑服务器TLS认证...

我可以看到3个解决方案:

  • 将CA证书添加到系统证书中(在uri任务的目标主机上)
  • 使用validate_certs: no选项禁用服务器证书验证(因此不使用CA证书)
  • 提出一个问题(也许是PR)来增加对cacert选项的支持
© www.soinside.com 2019 - 2024. All rights reserved.