Curl错误:错误:1408F10B:SSL例程:SSL3_GET_RECORD:版本号错误。

4
我有以下代码,会出现“Curl Error: error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number”的错误。
$url='https://mysite/login';

$clientcert  =       "C:\\client.crt"; 
$keyfile     =       "C:\\server.key"; 
$challenge   =       "passphrase"; 
$CAFile      =       "C:\\server.pem";
print "<bR><BR>$challenge<br><br>"; 
print "<bR><BR>$keyfile<br><br>"; 
print "<bR><BR>$clientcert<br><br>"; 
print "<bR><BR>$CAFile<br><br>"; 

$header=array('contentType:application/json','MY-API-Key:34sdSDFSDFxcvxcvxcvEEE11','Content-Type:application/json','Accept: application/json');

$username=base64_encode("uname");
$password=base64_encode("pswd");

$ch = curl_init(); 
if(FALSE==$ch)
  echo "Unable to create Url Object" . "\n";

curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_HEADER, 1); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
curl_setopt($ch, CURLOPT_VERBOSE, 1); 
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_SSLVERSION,3);
//curl_setopt($ch, CURLOPT_POSTFIELDS,"$username:$password");
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; rv:26.0) Gecko/20100101 Firefox/26.0");       
curl_setopt($ch, CURLOPT_USERPWD,"$username:$password");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt($ch, CURLOPT_FAILONERROR, 1); 
curl_setopt($ch, CURLINFO_HEADER_OUT, 1); 
curl_setopt($ch, CURLOPT_SSLCERT, $clientcert); 
curl_setopt($ch, CURLOPT_CAPATH, $CAFile); 
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, $challenge); 
curl_setopt($ch, CURLOPT_SSLKEYPASSWD, $challenge); 
curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM'); 
curl_setopt($ch, CURLOPT_SSLKEY, $keyfile); 
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
//curl_setopt($ch, CURLOPT_HTTP_VERSION,CURL_HTTP_VERSION_1_0);
  $response = curl_exec($ch);  
 $info=curl_getinfo($ch);

我已使用与服务器相同的一种密码短语和sha384算法生成了证书。因此,我拥有私钥、证书(.crt文件)和密码短语,我已在Apache和curl脚本中设置了它们。请建议可能存在的问题。

2个回答

2

我遇到了同样的错误,通过更改解决了它。

sslVersion = 3 

更新至

sslVersion = 'all'

它对我有效

在您的情况下,我认为您需要进行更改

curl_setopt($ch, CURLOPT_SSLVERSION,3);

to

curl_setopt($ch, CURLOPT_SSLVERSION,'all'); 

它应该可以正常工作


看起来除了3以外的任何东西都可能有效。可能与POODLE有关(至少是你的问题,尽管不是提问者的问题)。https://en.wikipedia.org/wiki/POODLE - Arc
@Archimedix 感谢您的评论。我在paypal-sdk中遇到了这个问题。我已经按照上面的答案进行了更新,现在它可以正常工作了。除了这个更改之外,还有什么需要我做的吗? - Satish Shinde
这里需要澄清一下:'all' 可能会被转换为一个整数,即0,它指定了“使用默认的SSL版本”,而默认的SSL版本很可能是TLSv1。 - Arc

0

我遇到了相同的错误

我通过更改解决了它

curl_setopt($ch, CURLOPT_SSLVERSION,3);

curl_setopt($ch, CURLOPT_SSLVERSION,4);

它应该可以工作


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