PHP的curl错误:"在连接中发生未知的SSL协议错误..."

5
我在使用PHP curl时遇到了极大的困难。我尝试通过PHP curl打开一个网站:https://www.novaprostaffing.com/np/index.jsp,但是它一直显示以下错误:“连接到www.novaprostaffing.com时出现未知的SSL协议错误”。
我的函数如下:
function getUrl($url) {
    $ch = curl_init();


    curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate');


    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

    curl_setopt($ch, CURLOPT_URL, $url);

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

    $buffer = curl_exec($ch);

    if (!$buffer)
       {
       echo "cURL error number:" .curl_errno($ch);
       echo " and url is $url and cURL error:" . curl_error($ch);

        }
    curl_close($ch);
    return $buffer;
}

我已经尝试了多种解决方法,包括:
  1. 强制使用curl版本3
  2. CURLOPT_SSL_VERIFYPEERCURLOPT_SSL_VERIFYHOST设为0
  3. 检查是否在curl 7.34上。有人告诉我这个版本有bug,但我用的是curl 7.19.1
以上所有方法都没有起作用。如果您有任何想法来解决这个问题,将不胜感激!

2
尝试使用 curl_setopt($ch, CURLOPT_SSLVERSION, 1); 进行设置。这将把版本设置为TLSv1(而不是SSLv1)。 - Emilie
谢谢,这个有效,非常感谢! - Jay Gupta
3个回答

2
尝试设置cURL选项CURLOPT_SSLVERSION。我以前也遇到过同样的问题,这个方法对我很有用 :)
curl_setopt($ch, CURLOPT_SSLVERSION, 3); // 1, 2 or 3

1
服务器仅支持TLS 1.0,尝试使用SSL 2.0或SSL 3.0连接将导致您看到的错误。这意味着在此服务器上将版本设置为3是完全错误的事情。除此之外,证书链不完整。服务器只提供叶子证书,而不是中间证书,直到可信根证书。这将导致验证失败。

0

你试过其他https的网址,看看是否有效吗?以下是三个常见原因:

  1. 目标站点不支持该协议
  2. 目标站点不支持该加密方式
  3. SSL私钥已过期

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接