当我使用 python boto 连接到 aws ec2 时,它显示 SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败 (_ssl.c:661)

And*_*rew 1 python boto amazon-web-services

我使用的是 Windows 10 操作系统。

我想统计AWS的IP地址数量。

我使用python 2.7.14boto 2.6.0

我添加一个文件,其名称boto.config位于 C:\Users\Administrator 文件夹

boto.config 的内容是:

[Credentials]

aws_access_key_id=******

aws_secret_access_key=*****
Run Code Online (Sandbox Code Playgroud)

脚本是:

#!/usr/bin/env python

# -*- encoding: utf8 -*-

import boto.ec2

from pprint import pprint

import ssh

import requests

import urllib3

import certifi

import ssl

conn = boto.ec2.connect_to_region('cn-north-1')

reservations = conn.get_all_instances()

InstanceMap=[]

for reservation in reservations:

    for instance in reservation.instances:

        if 'env' in instance.tags and instance.tags['env'] == 'test':

            InstanceMap.append(instance.ip_address)

f = open('F:\ip.txt','w')

pprint(InstanceMap, f)
Run Code Online (Sandbox Code Playgroud)

当我运行此脚本时,它显示错误信息:

SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败 (_ssl.c:661)

我有什么方法可以解决这个问题?

Ind*_*nil 5

我在机器上boto3也遇到了同样的问题。事实证明,由于我使用安装了代理的企业设备,*.amazonaws.com 证书被代理证书取代。此代理证书链需要受到 Python模块的信任。无论您是否有代理,以下方法都应该解决错误。Python 3.7Windows 10certifiSSL: CERTIFICATE_VERIFY_FAILED

这是我为解决问题所做的 -

  1. 找到cacert.pem所在路径 -

如果没有,请安装证书。命令:pip install certifi

import certifi
certifi.where()
C:\\Users\\[UserID]\\AppData\\Local\\Programs\\Python\\Python37-32\\lib\\site-packages\\certifi\\cacert.pem
Run Code Online (Sandbox Code Playgroud)
  1. AWS_CA_BUNDLE将环境变量设置为cacert.pem路径 -

    AWS_CA_BUNDLE=C:\Users\[UserID]\AppData\Local\Programs\Python\Python37-32\Lib\site-packages\certifi\cacert.pem

  2. 从 amazonaws.com URL 下载证书链。例如:在浏览器上访问https://sts.amazonaws.com/xyz并导出 Root、所有中间证书、域证书并保存为 base64 编码的 .cer 文件。在记事本中打开证书,复制所有内容。

  3. 现在在记事本中打开 cacert.pem,然后---Begin Certificate--- *** ---End Certificate---在末尾添加每个下载的证书内容 ( )。

重新启动命令行提示符或 PowerShell,SSL 验证错误应该得到解决。

请勿 is_secure = False在您组织的环境中使用。这实质上是禁用 SSL 验证。