首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在Python中修复<urlopen error [SSL: CERTIFICATE_VERIFY_FAILED]证书验证失败(_ssl.c:833)>?

在Python中修复<urlopen error [SSL: CERTIFICATE_VERIFY_FAILED]证书验证失败(_ssl.c:833)>的问题,可以采取以下几种方法:

  1. 忽略证书验证:可以通过设置urllib库的全局参数,忽略证书验证。代码示例如下:
代码语言:txt
复制
import ssl
import urllib.request

# 忽略证书验证
ssl._create_default_https_context = ssl._create_unverified_context

# 发起HTTPS请求
response = urllib.request.urlopen("https://example.com")

这种方法会忽略证书验证,存在一定的安全风险,不推荐在生产环境中使用。

  1. 添加缺失的根证书:可以手动下载缺失的根证书,并将其添加到Python的证书存储中。具体步骤如下:
  • 打开浏览器,访问目标网站,获取证书链。
  • 下载根证书(.crt或.pem格式)。
  • 打开Python安装目录下的Lib\site-packages\certifi\cacert.pem文件。
  • 将下载的根证书内容复制到cacert.pem文件的末尾。
  • 保存文件并重新运行Python程序。
  1. 使用自定义证书验证回调函数:可以自定义一个证书验证回调函数,用于验证服务器证书的有效性。代码示例如下:
代码语言:txt
复制
import ssl
import urllib.request

def verify_certificate(cert, hostname):
    # 自定义证书验证逻辑
    # 返回True表示验证通过,返回False表示验证失败
    return True

# 创建SSL上下文
context = ssl.create_default_context()
context.check_hostname = False
context.verify_mode = ssl.CERT_NONE
context.verify_flags = ssl.VERIFY_PEER

# 设置证书验证回调函数
context.verify_callback = verify_certificate

# 使用自定义SSL上下文发起HTTPS请求
response = urllib.request.urlopen("https://example.com", context=context)

verify_certificate函数中,可以根据自己的需求编写证书验证逻辑,返回True表示验证通过,返回False表示验证失败。

以上是修复<urlopen error [SSL: CERTIFICATE_VERIFY_FAILED]证书验证失败(_ssl.c:833)>的几种方法,根据具体情况选择适合的方法进行修复。

腾讯云相关产品和产品介绍链接地址:

  • SSL证书管理:https://cloud.tencent.com/product/ssl
  • 云服务器SSL证书:https://cloud.tencent.com/product/cvm/ssl-certificate
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券