ssl - 带有 cacert 选项的 Ansible URI 模块

标签 ssl curl ansible

我正在尝试做相当于:

curl -X POST --data <json> --key <path to key> --cert <path to cert> --cacert <path to cacert> --header "Content-Type: application/json" <url>

在 ansible play 中。遵循来自 http://docs.ansible.com/ansible/latest/uri_module.html 的文档,有 key 、证书、X、 header 和数据的等效项,但我还没有找到传递证书颁发机构文件的方法。

我试过:

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 选项被记录为“文件模块接受的所有参数也在这里工作”,因此它只是意味着您可以使用 ownergroupmode 等将属性设置为 dest

client_certclient_key 是在最近的 2.4 中添加的,只是为了修复 issue #18141他们没有考虑服务器 TLS 身份验证...

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

  • 将您的 CA 证书添加到您的系统证书中(在 uri 任务的目标主机上)- 仅对 python >= 2.7.9 有效
  • 使用 validate_certs: no 选项来禁用服务器证书验证(因此不使用 CA 证书)
  • 提出问题(也许是 PR)以添加对 cacert 选项的支持

关于ssl - 带有 cacert 选项的 Ansible URI 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47890394/

相关文章:

c# - SslStream.DataAvailable 不是有效函数

php - Wordpress 站点中的 "Header already sent"错误

php - 显示 Curl POST 请求 header ?有没有办法做到这一点?

php - Xampp 返回 "Protocol POST http44 not supported or disabled in libcurl "

ansible - regex_replace 为 jinja 模板中的 var 内容

java - 将 RestTemplate 与 SSL 一起使用

php - 使用 PHP 将 ZOHO CRM 与 MySQL 集成...!

ansible - 运行 Ansible play 时 undefined variable

ansible - 检查 Ansible 流水线是否启用/工作

Apache VirtualHost 多域多 SSL