如何修复 failed (self signed certificate in certificate chain…

スポンサーリンク

解决“failed (self signed certificate in certificate chain)”错误的详尽指南

错误概述

在使用 HTTPS 连接时,您可能会遇到错误信息:“failed (self signed certificate in certificate chain)”。这个错误通常表示在 SSL/TLS 证书链中存在自签名证书,导致安全连接被拒绝。自签名证书没有被公认的证书颁发机构(CA)签名,因此客户端无法验证其真实性。这种情况下,连接会被视为不安全,导致操作失败。

常见原因

导致此错误的原因主要包括以下几点:

  1. 自签名证书:使用自签名证书而非由受信任的 CA 签发的证书。
  2. 证书链不完整:服务器未正确配置证书链,导致客户端无法验证。
  3. 过期或无效证书:所使用的证书已经过期或无效。
  4. 网络环境问题:在公司或其他受限的网络环境中,某些安全策略可能会阻止自签名证书的使用。
  5. 开发环境配置:某些开发工具(如 VSCode)可能未信任本地安装的证书。

解决方法

以下是解决该错误的多种方法:

方法 1: 使用 pip-system-certs

  1. 打开命令行工具。
  2. 安装 pip-system-certs
    bash
    pip install pip-system-certs
  3. 如果您尚未安装 python-certifi-win32,请运行以下命令:
    bash
    pip install python-certifi-win32

注意:python-certifi-win32 不再维护,建议使用 pip-system-certs

方法 2: 创建未验证的 HTTPS 上下文

  1. 在您的 Python 代码中,添加以下代码段:
    “`python
    import ssl

try:
_create_unverified_https_context = ssl._create_unverified_context
except AttributeError:
pass # 兼容旧版本 Python
else:
ssl._create_default_https_context = _create_unverified_https_context
“`
2. 将此代码放在源文件的开头,以确保 HTTPS 请求不进行证书验证。

方法 3: 检查证书有效性

  1. 使用以下代码段检查证书:
    python
    try:
    # 进行 HTTPS 请求
    except ssl.SSLError as e:
    print("SSL Error:", e)
  2. 如果错误信息显示证书无效或自签名,考虑更换证书。

方法 4: 安装 Win-CA 扩展(仅限 Windows)

  1. 在 VSCode 中,安装 win-ca 扩展。
  2. 打开设置,将 Inject 选项切换到 append 模式(默认不是这个模式)。
  3. 重启 VSCode。

方法 5: MacOS 用户解决方案

  1. Mac 用户可以考虑安装 linhmtran168.mac-ca-vscode 扩展,类似于 Windows 的 win-ca
  2. 访问 Mac CA VSCode 扩展页面 进行安装。

方法 6: 使用 OpenSSL 进行调试

  1. 使用以下命令检查 SSL 连接:
    bash
    openssl s_client -connect host:443 -state -debug
  2. 观察输出,检查是否存在证书验证错误。

方法 7: 更新 Java 版本(针对 Java 用户)

  1. 确保您的 JRE/JDK 更新到最新版本(Java 8 更新 >= 31)。
  2. 这样可以将 GoDaddy G2 CA 服务器包含在默认信任库中,避免证书问题。

预防提示

为避免将来出现类似问题,可以采取以下措施:
使用公认 CA 的证书:始终使用由受信任的证书颁发机构签署的证书。
定期检查证书有效性:定期检查和更新证书,确保其有效性和安全性。
了解网络环境:在使用公司网络时,了解网络的 SSL/TLS 策略,确保遵循最佳实践。

相关错误

  • SSL 证书问题:当推送到 Git 服务器时,可能会出现 “SSL certificate problem: self signed certificate in certificate chain” 错误。
  • 无效的 SSL 证书:在使用某些库或应用时,如果证书无效,可能会导致连接失败。

总结

遇到 “failed (self signed certificate in certificate chain)” 错误时,通常是因为使用了自签名证书或证书链配置错误。通过上述方法,您可以有效解决此问题,确保安全的 HTTPS 连接。无论是在开发环境还是生产环境,始终遵循 SSL/TLS 的最佳实践,以保障数据安全。

コメント

タイトルとURLをコピーしました