cURL PHP 错误:连接中出现未知 SSL 协议错误


cURL PHP ERROR: Unknown SSL protocol error in connection

我正在尝试使用 cURL PHP 发送Ajax请求,但它给出了错误

Unknown SSL protocol error in connection

而我能够login到同一台服务器。

我试过这个

curl_setopt( $ch, CURLOPT_SSLVERSION, 1 );

Ajax请求是这样的

$header = array('Accept' => '*/*', 
"X-Requested-With" => "XMLHttpRequest", 
"Content-Type" => "application/x-www-form-urlencoded");
$data = array('ClientNumber=999999&OrderClass=ContractOrders&ShowAll=ContractOrders&ShowPerPage=500');
echo $page = Spider::spider($header, 'https://wfs.nursefinders.com/MasterConsole/displayorders.cfm?ShowAll=ContractOrders', 'https://wfs.nursefinders.com/MasterConsole/BuildOrderDisplaySection.cfm', FALSE, $data[0]);

请注意spider函数中,第一个参数是header,第二个是referrer第三个参数是url to access,第四个参数无关紧要it's for cookie file,第五个参数是data o post

我正在使用UBUNTU 14.10cURL Version根据此命令curl 7.37.1 /usr/bin/curl -V

php phpinfo()打印相同

请帮忙

我相信您问题的原因是您与之通信的服务器不支持您的 SSL 协议。

这里有一个页面,其中包含有关这方面的信息:http://blog.techstacks.com/2010/03/3-common-causes-of-unknown-ssl-protocol-errors-with-curl.html

有关更直接的信息,请尝试查看 API 文档,了解其服务器所需的连接协议。他们可能已经提供了一个可以连接的样本。

这个服务器坏得很厉害。它不支持最兼容的SSLv23握手,如果尝试握手,就会挂起。它仅支持显式 SSL 3.0 或 TLS 1.0 握手。通过查看 cURL 的源代码,在我看来,强制执行 TLS1.0+ 的所有变体都将进行 SSLv23 握手,而服务器无法做到:

-- curl-7.41.0/lib/vtls/openssl.c
1719   default:
1720   case CURL_SSLVERSION_DEFAULT:
1721   case CURL_SSLVERSION_TLSv1:
1722   case CURL_SSLVERSION_TLSv1_0:
1723   case CURL_SSLVERSION_TLSv1_1:
1724   case CURL_SSLVERSION_TLSv1_2:
1725     /* it will be handled later with the context options */
1726     req_method = SSLv23_client_method();

这只剩下使用不安全的SSL 3.0的选项,即

curl_setopt( $ch, CURLOPT_SSLVERSION, 3 );

虽然我没有PHP可以测试,但curl -1与 命令行上的curl -3确认1的CURLOPT_SSLVERSION将不起作用,而3应该工作。