Curl HTTPS请求给出了“SSL对等端没有收到握手消息”


Curl HTTPS request gives "SSL peer was not expecting a handshake message it received."

我有这个简单的cURL代码,在一台机器(PHP 5.2.17)上工作良好,但在另一台机器(PHP 5.6.13)上失败。在较新的版本中,cURL调用会抛出

异常。

SSL对等体没有收到握手消息。

代码如下:

private function postRequest($url, $request) {
    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER,  FALSE);
    curl_setopt($curl, CURLOPT_CAINFO,          "certificate.der");
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,  2);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER,  1);
    curl_setopt($curl, CURLOPT_POST,            1);
    curl_setopt($curl, CURLOPT_POSTFIELDS,      $request);
    curl_setopt($curl, CURLOPT_HTTPHEADER,      array('Content-Type: text/xml'));
    $r = curl_exec($curl);
    if ($r == false) {
        $r = curl_error($curl);
    }
    return $r;
}

您可以使用:

curl_setopt($curl, CURLOPT_SSLVERSION,  CURL_SSLVERSION_SSLv3);

选项:

CURL_SSLVERSION_DEFAULT
CURL_SSLVERSION_TLSv1
TLSv1.x
CURL_SSLVERSION_SSLv2
SSLv2
CURL_SSLVERSION_SSLv3
SSLv3
CURL_SSLVERSION_TLSv1_0
TLSv1.0 (Added in 7.34.0)
CURL_SSLVERSION_TLSv1_1
TLSv1.1 (Added in 7.34.0)
CURL_SSLVERSION_TLSv1_2
TLSv1.2 (Added in 7.34.0) 

http://curl.haxx.se/libcurl/c/CURLOPT_SSLVERSION.html