Curl error: error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
通常是由于你尝试与服务器进行 SSL/TLS 握手时,协议版本不匹配导致的。
具体来说,服务器要求更高版本的 TLS,而 cURL 使用的是较旧的 SSL/TLS 版本。
错误的原因
协议版本问题
你当前的 cURL 客户端可能使用的是较旧的 TLS 协议(如 TLS 1.0 或 TLS 1.1),而目标服务器要求更高版本的 TLS(如 TLS 1.2 或 TLS 1.3)。
解决方式:强制使用更高的 TLS 版本(如 TLS 1.2 或 TLS 1.3)
你可以在 cURL 请求中强制指定使用较新的 TLS 版本。通过 CURLOPT_SSLVERSION
选项,指定使用 TLSv1.2
或更高版本:
curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
OpenSSL 版本过低
如果你的系统上安装的 OpenSSL 版本较低,可能不支持新版本的 TLS 协议。
解决方式:更新 OpenSSL 和 cURL
确保你使用的 OpenSSL 和 cURL 版本是最新的。较新的 OpenSSL 版本会支持更高版本的 TLS 协议。
在 Linux 上,你可以使用以下命令来更新:
sudo apt-get update
sudo apt-get install –only-upgrade openssl
sudo apt-get install –only-upgrade curl
在 Windows 上,你可以下载和安装最新版本的 cURL 和 OpenSSL。
其他方式:禁用 SSL 检查(仅限调试)
如果你只是想绕过这个问题进行调试,可以暂时禁用 SSL 证书验证(不推荐在生产环境中使用):
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
但请注意,禁用 SSL 验证会降低安全性,因此仅应在调试时使用。