📌  相关文章
📜  windows 致命:无法访问 SSL 证书问题:无法获取本地颁发者证书 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:21:11.122000             🧑  作者: Mango

Windows 致命:无法访问 SSL 证书问题:无法获取本地颁发者证书 - Shell-Bash

本文将介绍在 Windows 平台下,出现无法访问 SSL 证书问题,具体表现为无法获取本地颁发者证书的解决方案,将涵盖以下内容:

  • 问题描述
  • 常见原因
  • 解决方案及步骤
  • 相关工具
  • 参考资料
问题描述

当使用 Windows 系统自带的 Powershell 或 Git Bash 等 Shell 工具进行网络请求时,可能会遇到如下报错信息:

fatal: unable to access 'https://example.com/': SSL certificate problem: unable to get local issuer certificate

该报错信息表明 SSL 证书验证失败,无法获取本地颁发者证书。

常见原因

出现此问题的原因包括但不限于以下情况:

  • 网络环境问题:网络代理、DNS 解析等问题可能导致 SSL 证书验证失败。
  • SSL 证书问题:证书格式、证书链、证书过期等问题可能导致 SSL 证书验证失败。
  • 操作系统配置问题:操作系统内置根证书不完整、证书信任等问题可能导致 SSL 证书验证失败。
解决方案及步骤

以下将介绍针对 Windows 平台下无法获取本地颁发者证书问题的解决方案及步骤。

方案一:忽略 SSL 证书验证

忽略 SSL 证书验证是一个不太安全的临时解决方案,不建议在生产环境中使用。

如果你希望忽略 SSL 证书验证,可以在网络请求的命令中添加 --insecure 参数,示例如下:

curl --insecure https://example.com/
方案二:获取证书链

如果没有证书链,可以尝试通过以下步骤获取证书链:

  1. 打开网站,获取证书信息,可以通过浏览器开发者工具、openssl 等工具获得。

  2. 通过 openssl 工具导出证书信息,示例命令如下:

    openssl s_client -connect example.com:443
    
  3. 复制输出内容包括 -----BEGIN CERTIFICATE----------END CERTIFICATE----- 之间的内容,保存为 .cer 文件。

  4. 可以通过以下命令将 .cer 文件转换为 .pem 文件:

    openssl x509 -in example.cer -out example.pem -outform PEM
    
  5. 修改网络请求命令,添加证书参数,示例如下:

    curl --cacert example.pem https://example.com/
    
方案三:安装证书

如果某些操作系统自带的根证书不完整,可以考虑手动安装缺失的根证书。

以下为安装证书的步骤:

  1. 到 https://curl.se/docs/caextract.html 下载 cacert.pem 文件。

  2. cacert.pem 文件添加到环境变量中:

    set CURL_CA_BUNDLE=c:\path\to\cacert.pem
    
  3. 重新启动 Shell 窗口,再次运行网络请求命令即可。

相关工具

本文中提到的工具:

  • Powershell: Windows 自带的 Shell 工具,支持 .NET 框架。
  • Git Bash:Windows 上常用的 Bash Shell 工具,常用于 Git 版本控制。
  • Curl:常用于网络请求的命令行工具,支持 HTTP、HTTPS、FTP 等协议。
  • OpenSSL:开源的加密和解密工具,支持通用证书操作、SSL/TLS 握手等功能。
参考资料

以下为本文中提到的参考资料:

  • https://stackoverflow.com/questions/21181231/git-error-ssl-certificate-problem-unable-to-get-local-issuer-certificate
  • https://www.sslshopper.com/article-most-common-openssl-commands.html
  • https://stackoverflow.com/questions/37772967/where-to-get-the-latest-cacert-pem
  • https://curl.se/docs/releases.html