WSL2不能上网,Failed to connect to github.com port 443问题解决方案

本文解决WSL2中无法上网的问题,包括ping不通外部网站及git命令失败的情况。通过编辑wsl.conf文件禁用自动配置,并手动设置DNS服务器来解决。同时介绍了如何正确配置hosts文件以确保特定域名的解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

WSL2不能上网:

问题:ping外网无效

例如:ping www.baidu.com失败

解决方案:

在wsl:
$sudo vi /etc/wsl.conf

wsl.conf:
[network]
generateResolvConf = false
在PowerShell:
$sudo vi /etc/etc/resolv.conf

resolv.conf:
# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateResolvConf = false
nameserver 8.8.8.8

git命令失败

问题:Failed to connect to github.com port 443

解决方案

1.git config --global --list

有代理的,把下面的代理删掉

2.添加下图黄色部分—140.82.114.3 github.com
sudo gedit /etc/hosts

在这里插入图片描述

<think>首先,用户的问题是:解决 PHP 下载 https://api.github.com/ 出现的 SSL 错误 "error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed"。这是一个 SSL 证书验证失败的错误。 我需要参考系统级指令: - 所有行内数学表达式必须用 $...$,比如 $x^2$。 - 独立公式用 $$...$$ 并单独成段。 - LaTeX 语法正确。 - 用中文回答。 - 生成相关问题。 - 在引用的段落末尾添加引用标识,如 [^1]。 用户提供了几个引用,我需要参考它们,但用户说这些引用仅供参考,不是真正的需求。用户上一次的问题是关于 SSL 错误的,所以我应该基于这些引用来构建回答。 引用内容: - [^1]: 提到了 SSL handshake 失败,错误是 "unsupported protocol"。 - [^2]: 讨论了 websockify 的问题,涉及到 ssl_version 被写死为 TLSv1。 - [^3]: CondaHTTPError,SSL 证书验证失败。 - [^4]: git clone 错误,建议禁用旧协议并使用更高版本。 - [^5]: 错误 "error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version",建议更新软件。 用户的问题具体是 PHP 下载 GitHub API 时遇到 "certificate verify failed"。错误代码是 error:1416F086,这表示证书验证失败。 在 SSL 上下文中,这个错误通常意味着客户端无法验证服务器的证书,可能是由于证书链不完整、根证书缺失、证书过期或不匹配。 现在,针对 PHP,我需要提供解决方案。PHP 使用 cURL 或流上下文来处理 HTTPS 请求。 可能的解决方案: 1. **更新 CA 证书包**:证书验证失败可能是因为本地 CA 证书包过期或缺失。GitHub 使用 Let's Encrypt 或其他 CA,所以确保系统有最新的根证书。 2. **在 PHP 代码中禁用 SSL 验证**:不推荐,因为不安全,但作为临时解决方案。在 cURL 中设置 `CURLOPT_SSL_VERIFYPEER` 为 false。 3. **指定自定义 CA 证书路径**:在 PHP 中设置证书路径。 4. **检查系统时间**:如果系统时间不正确,证书验证可能失败。 5. **更新 PHP 和 OpenSSL**:旧版本可能有 bug 或不支持现代协议。 从引用中提取相关点: - [^3] 提到检查网络连接和证书问题。 - [^4] 建议强制使用更高版本的 TLS 协议。 - [^5] 建议更新软件。 对于 PHP,具体步骤: - 如果使用 cURL: - 设置 `curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);` // 启用验证 - 设置 `curl_setopt($ch, CURLOPT_CAINFO, '/path/to/cacert.pem');` // 指定证书文件 - 如果使用 file_get_contents 或流: - 创建流上下文:`$context = stream_context_create(['ssl' => ['verify_peer' => true, 'cafile' => '/path/to/cacert.pem']]);` 获取最新的 CA 证书包:可以从 cURL 网站下载,如 https://curl.se/docs/caextract.html。 回答结构: 1. **解释错误**:简要说明错误原因。 2. **提供解决方案**:逐步指导如何解决。 3. **生成相关问题**:在最后添加相关问题。 4. **添加引用标识**:在引用内容末尾添加。 使用中文回答。 完整回答框架: - 开头:确认问题。 - 步骤: a. 更新 CA 证书包。 b. 在 PHP 代码中配置证书验证。 c. 检查系统时间和更新软件。 - 结尾:建议最佳实践。 - 相关问题。 引用用户提供的引用,在适当的地方添加 [^1] 等。</think>### 解决 PHP 下载 GitHub API 时出现的 SSL 证书验证错误 您在 PHP 中尝试下载 `https://api.github.com` 时遇到 SSL 错误 `error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed`,这表示客户端无法验证服务器的 SSL 证书。这种错误通常由以下原因引起: - **证书链不完整**:本地 CA 根证书缺失或过期,无法验证 GitHub 的证书(GitHub 使用 Let's Encrypt 等 CA)。 - **协议或库过时**:旧版 PHP 或 OpenSSL 不支持 GitHub 的 TLS 协议(GitHub 要求 TLS 1.2+)。 - **系统配置问题**:系统时间错误或证书路径未正确设置。 以下是逐步解决方案,基于 SSL/TLS 握手原理和常见实践。请按顺序操作,确保安全性和兼容性。 --- ### 步骤 1: 更新本地 CA 证书包 证书验证失败最常见的原因是本地 CA 根证书缺失或过期。GitHub 的证书由公共 CA 签发,需确保 PHP 能访问最新的根证书。 - **下载最新 CA 证书包**: - 访问 [cURL CA 证书包下载页](https://curl.se/docs/caextract.html) 获取 `cacert.pem` 文件。 - 或使用命令行下载: ```bash wget https://curl.se/ca/cacert.pem -O /path/to/cacert.pem ``` - **在 PHP 代码中指定证书路径**: - 如果使用 **cURL**: ```php <?php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://api.github.com"); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); // 启用证书验证 curl_setopt($ch, CURLOPT_CAINFO, "/path/to/cacert.pem"); // 指定 CA 证书路径 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); if (curl_errno($ch)) { echo "cURL 错误: " . curl_error($ch); } curl_close($ch); ?> ``` - 如果使用 **file_get_contents** 或流: ```php <?php $context = stream_context_create([ 'ssl' => [ 'verify_peer' => true, // 启用验证 'cafile' => '/path/to/cacert.pem' // 指定 CA 证书路径 ] ]); $response = file_get_contents('https://api.github.com', false, $context); if ($response === false) { echo "下载失败: " . error_get_last()['message']; } ?> ``` **注意**:将 `/path/to/cacert.pem` 替换为实际路径(如 `/etc/ssl/certs/cacert.pem`)。此方法优先推荐,因为它保持安全性[^3]。 --- ### 步骤 2: 检查并更新 PHP 和 OpenSSL 旧版 PHP 或 OpenSSL 可能不支持 GitHub 的 TLS 协议(如仅支持 TLS 1.0),导致握手失败。GitHub 要求 TLS 1.2+,强制使用旧协议会触发错误[^4][^5]。 - **检查版本**: - 运行命令查看版本: ```bash php -v openssl version ``` - 确保 PHP ≥ 7.1 和 OpenSSL ≥ 1.1.1(较新版本默认支持 TLS 1.2+)。 - **更新软件**: - Linux 系统(如 Ubuntu): ```bash sudo apt update sudo apt upgrade php openssl ``` - Windows:下载最新 PHP 版本从 [PHP 官网](https://windows.php.net/download/)。 - **强制使用高版本 TLS**(可选): - 在 PHP cURL 中设置协议版本: ```php curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2); // 强制 TLS 1.2 ``` 这能避免旧协议导致的握手问题[^4][^5]。 --- ### 步骤 3: 验证系统时间和网络配置 证书验证依赖正确的时间和网络环境。 - **检查系统时间**: - 运行命令确保时间准确: ```bash date # Linux/WSL ``` - 如果时间错误,同步时间: ```bash sudo ntpdate pool.ntp.org # Linux ``` - **禁用防火墙或代理干扰**: - 临时禁用防火墙测试: ```bash sudo ufw disable # Ubuntu ``` - 如果使用代理,在 PHP 中设置代理选项: ```php curl_setopt($ch, CURLOPT_PROXY, "http://proxy-ip:port"); ``` --- ### 步骤 4: 临时解决方案(不推荐) 如果以上步骤无效,可临时禁用证书验证(仅限测试环境,生产环境不安全): - **cURL 方式**: ```php curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); ``` - **流上下文方式**: ```php $context = stream_context_create(['ssl' => ['verify_peer' => false]]); ``` **警告**:这会暴露中间人攻击风险,仅作为最后手段[^3]。 --- ### 最佳实践总结 - **优先更新 CA 证书和软件**:90% 的此类错误通过更新 `cacert.pem` 解决。 - **监控证书有效期**:GitHub 证书自动续签,但本地 CA 包需定期更新。 - **测试连接**:使用工具验证: ```bash openssl s_client -connect api.github.com:443 -showcerts ``` 输出应显示完整证书链和 `Verify return code: 0 (ok)`。 如果问题持续,检查 GitHub 状态页([https://www.githubstatus.com/](https://www.githubstatus.com/))排除服务端问题[^1]。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值