Pyhton ca-证书默认设置

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

我的本地设置:

安装了 python 3.8 的 pyenv 在这个环境中安装了 checkov 及其依赖项

问题:

当我运行 checkov 时,我得到以下信息:SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败:无法获取本地颁发者证书

当我添加这样的 ca-cert 引用时:checkov --ca-certificate=/usr/local/etc/openssl@3/cert.pem 或这样:checkov --ca-certificate=/Users/myuser/。 pyenv/versions/3.8.18/lib/python3.8/site-packages/certifi/cacert.pem

工作没有问题。

但是,单独运行 checkov 仍然会抱怨它无法找到有效的 ca 证书。

问题:

如何在这个 pyenv 中将此捆绑包设置为默认值。

我尝试过的:

创建符号链接:ln -s /Users/myuser/.pyenv/versions/3.8.18/lib/python3.8/site-packages/certifi/cacert.pem /etc/ssl/certs/cert.pem

导出REQUESTS_CA_BUNDLE:导出REQUESTS_CA_BUNDLE=/Users/myuser/.pyenv/versions/3.8.18/lib/python3.8/site-packages/certifi/cacert.pem

这也解决了我的问题:如何让Python使用来自Mac OS TrustStore的CA证书?

质疑这是否是唯一的选择。

python ssl-certificate pyenv
1个回答
0
投票

要在您的

pyenv
环境中默认使用 CA 证书捆绑包,您可以按照几个步骤来确保证书始终可用,而无需在每次运行
checkov
时手动指定。您可以采取以下一些方法:

  1. 设置
    REQUESTS_CA_BUNDLE
    环境变量

您可以在 shell 配置文件(例如 .bashrc、.zshrc 等)中设置 REQUESTS_CA_BUNDLE 环境变量以指向 CA 证书包。这将确保当您运行 Python 脚本或命令时它始终可用。

export REQUESTS_CA_BUNDLE=/Users/myuser/.pyenv/versions/3.8.18/lib/python3.8/site-packages/certifi/cacert.pem

将此行添加到您的 shell 配置文件中并重新加载它:

source ~/.bashrc  # or ~/.zshrc, depending on your shell
  1. 使用
    certifi
    设置 CA 捆绑包

您还可以使用

certifi
包来设置 CA 捆绑包。这是一种更 Pythonic 的处理方式。

import certifi
import os

os.environ['REQUESTS_CA_BUNDLE'] = certifi.where()

您可以将此代码添加到运行 checkov 或任何其他需要 SSL 验证的脚本之前运行的 Python 脚本中。

  1. 修改
    checkov
    脚本

如果您想修改

checkov
脚本本身以始终使用 CA 捆绑包,您可以编辑
checkov
脚本并在开头添加以下行:

import certifi
import os

os.environ['REQUESTS_CA_BUNDLE'] = certifi.where()

这可确保

checkov
始终使用正确的 CA 捆绑包。

  1. 使用自定义 CA 捆绑包

如果您有要使用的自定义 CA 捆绑包,您可以在系统 SSL 配置识别的目录中创建指向它的符号链接。

sudo ln -s /Users/myuser/.pyenv/versions/3.8.18/lib/python3.8/site-packages/certifi/cacert.pem /usr/local/share/ca-certificates/custom-ca.crt
sudo update-ca-certificates

此方法可确保系统识别并默认使用自定义 CA 捆绑包。

  1. 使用pyenv设置环境变量

您还可以专门为您的

pyenv
环境设置环境变量。在项目目录中创建一个
.python-version
文件并在其中添加环境变量:

echo "export REQUESTS_CA_BUNDLE=/Users/myuser/.pyenv/versions/3.8.18/lib/python3.8/site-packages/certifi/cacert.pem" >> .python-version

这可确保每当您激活此 pyenv 环境时都会设置环境变量。

结论 在 shell 配置文件中或直接在

REQUESTS_CA_BUNDLE
脚本中设置
checkov
环境变量是确保 CA 证书包始终可用的最直接、最有效的方法。这种方法避免了每次运行时都需要手动指定 CA 证书
checkov

© www.soinside.com 2019 - 2024. All rights reserved.