botocore.exceptions.SSLError:Windows上的SSL验证失败

fafcakar  于 2023-04-06  发布在  Windows
关注(0)|答案(3)|浏览(162)

下面的代码用于获取区域。

import boto3
ec2 = boto3.client('ec2', 'region-name')
print(ec2.describe_regions())

在我的机器上执行此代码时,我得到此错误。
botocore.exceptions.SSLError:https://ec2.region-name.amazonaws.com/的SSL验证失败[SSL:CERTIFICATE_VERIFY_FAILED]证书验证失败:无法获取本地颁发者证书(_ssl.c:1108)
我在Windows 10机器上运行此代码,VS代码作为我的编辑器。我寻找其他答案,他们需要安装Install Certificates.command文件。然而,看起来它只在macOS上找到。
有人能告诉我这个问题的原因吗?
此外,上周从AWS收到通知,他们正在将所有AWS FIPS端点更新到TLS 1.2,因此需要连接到TLS版本1.2 FIPS端点。我检查了我的TLS版本here。它说我有TLS版本1.2。有任何与此相关的信息吗?因为在此通知之前,我的脚本运行良好。
请有人告诉这个错误的原因和可能的纠正。此外,纠正我,如果我提到的东西与我的理解错误。

mzillmmw

mzillmmw1#

[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate是因为Python ssl库无法在本地计算机上找到证书进行验证。
调试的一种方法是查看是否将ca_bundle设置为其他值:

python -c "from botocore.session import Session; print(Session().get_config_variable('ca_bundle'))"

如果它不打印任何东西,那么它使用默认路径。您可以通过以下方式检查默认路径:

python -c "import ssl; print(ssl.get_default_verify_paths())"

如果ca_bundle打印了一些东西,那么它是由AWS_CA_BUNDLE环境变量或过去的aws configure set default.ca_bundle <some path>设置的。如果您不小心在那里设置了~/.aws/config,请检查~/.aws/config(Windows的配置文件位置:https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)。
Install Certificates.command基本上是一个Python脚本,你可以自己运行https://gist.github.com/marschhuynh/31c9375fc34a3e20c2d3b9eb8131d8f3。保存为install-cert.py并运行它python install-cert.py

vaqhlq81

vaqhlq812#

也许是一个边缘情况,但我有这个问题发送请求到一个docker容器,并为我的修复是打在http://localhost:8000而不是https://localhost:8000的docker容器,因为容器无法接收SSL请求。希望这有助于任何人在这种特殊情况下!

tf7tbtn2

tf7tbtn23#

import boto3    

from urllib3.exceptions import InsecureRequestWarning    
from urllib3 import disable_warnings    
disable_warnings(InsecureRequestWarning)

session = boto3.Session(profile_name='dev')    
client = session.client('ec2', verify=False)

相关问题