如何修复以下 ansible galaxy SSL 错误?

How to fix following ansible galaxy SSL error?

开始学习 Ansible 并希望简化 ansible-galaxy search nginx 命令,但我得到:

ERROR! Unknown error when attempting to call Galaxy at 'https://galaxy.ansible.com/api/api': <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)> 

曾尝试使用 ansible-galaxy --ignore-certs search nginxansible-galaxy -c search nginx 但现在得到 ansible-galaxy: error: unrecognized arguments: --ignore-certs 的展位。

OS :

Distributor ID: Ubuntu Description: Ubuntu 18.04.5 LTS Release: 18.04 Codename: bionic

Ansible 版本:

ansible 2.9.5
  config file = /home/maciej/projects/priv/ansible_nauka/packt_course/ansible.cfg
  configured module search path = ['/home/maciej/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/maciej/.local/lib/python3.6/site-packages/ansible
  executable location = /home/maciej/.local/bin/ansible
  python version = 3.6.9 (default, Jul 17 2020, 12:50:27) [GCC 8.4.0]

为我工作:

ansible-galaxy search --ignore-certs postgresql

我有同样的问题,但是在 Mac OS X.

根本问题是您的 Python 环境没有 finding/making 使用安装在 OS 上的默认根证书。需要这些根证书才能(通过 TLS)与 Ansible Galaxy 安全连接。

For Mac OS X 我能够根据这个答案解决这个问题:

即通过 运行 安装证书的脚本,随安装一起提供:

cd /Applications/Python\ 3.7/
./Install\ Certificates.command

对于 Ubuntu / Debian:

更新:正如 Maciej 在接受的答案中指出的那样,可以重新生成证书并将其添加到环境中:

sudo update-ca-certificates --fresh
export SSL_CERT_DIR=/etc/ssl/certs

P.S.:我不建议使用--ignore-certs,这会跳过TLS连接中的证书验证,使连接不安全(允许 Man-in-the-middle attacks

回到这个问题...生活是最好的动力。对我有帮助的是:

sudo update-ca-certificates --fresh
export SSL_CERT_DIR=/etc/ssl/certs

对于RHEL/CENTOS

您可能需要检查加密政策,如果政策设置为未来暂时将其设置为默认值

sudo update-crypto-policies --set=DEFAULT