2016-03-21 35 views
2

私はcurlを使用してhttpsを介してrightmove APIにxmlファイルを送信しています。彼らは私にすべての証明書を提供しました。PHP CURLを使用したSSL証明書

私はエラーを取得しています:

60SSL証明書の問題:ローカル発行者 certificateResultを取得することができません=

私は類似した他のすべてのStackOverflowのポストに発見したと、何もありませんすべてを試してみました古いcacert.pemをダウンロードしようとしましたが、php.iniのファイルを変更して個人情報ファイルをインストールし、ブラウザとローカルマシンに証明書を作成しましたが、何もエラー60を取り除いていません。

これは私のPHPです:

<?php 
    $xml = file_get_contents("myxml.xml"); 

    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
    curl_setopt ($ch, CURLOPT_CAINFO, dirname(__FILE__).'\mypem.pem'); 

    curl_setopt($ch, CURLOPT_URL, "https://adfapi.adftest.rightmove.com/v1/property/sendpropertydetails"); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml')); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_POST, 1); 

    curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); 
    curl_setopt($ch, CURLOPT_REFERER, 'https://adfapi.adftest.rightmove.com/v1/property/sendpropertydetails'); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt ($ch, CURLOPT_VERBOSE , 1); 

    $ch_result = curl_exec($ch); 
print curl_errno($ch); 
print curl_error($ch); 
    echo "Result = ".$ch_result; 
    curl_close($ch); 

?> 

が、これは私が日のために私の頭を叩いてきた、私はどのような援助のために非常に感謝されます。

+0

curl_setopt($ ch、CURLOPT_SSL_VERIFYPEER、false)を設定してみてください。 curl_setopt($ ch、CURLOPT_SSL_VERIFYHOST、2)を削除します。 – Indrajit

+0

@Indrajitありがとうございます。しかし、APIには認証が必要です –

+0

おそらくあなたのブラウザで同じエラーが発生しているとは限りません。パッチを当てていないか、ご使用のプラットフォーム用に正しく構成されていないバージョンのPHPがインストールされています。 – symcbean

答えて

0

私の場合、私はkeyfileとsslcertとcertのパスワードを追加する必要がありました。

//$xml = file_get_contents("thexmlfile.xml"); 
    $xml= $propertyXml->asXML(); 
    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
    curl_setopt($ch, CURLOPT_CAINFO, getcwd() . '\pemfile.pem'); 

    curl_setopt($ch, CURLOPT_URL, "https://adfapi.adftest.rightmove.com/v1/property/sendpropertydetails"); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml')); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_SSH_PRIVATE_KEYFILE, getcwd() . '\myjks.jks'); 
    curl_setopt($ch, CURLOPT_SSLCERT, getcwd() . '\pemfile.pem'); 
    curl_setopt($ch, CURLOPT_SSLCERTPASSWD, "thesslpassword"); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); 
    curl_setopt($ch, CURLOPT_REFERER, "https://adfapi.adftest.rightmove.com/v1/property/sendpropertydetails"); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt ($ch, CURLOPT_VERBOSE , 1); 

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 

    $ch_result = curl_exec($ch); 
print curl_errno($ch); 
print curl_error($ch); 
    echo "Result = ".$ch_result; 
    curl_close($ch); 
+0

カールのリクエストをすべて貼り付けてください。私はCurl Request for Rightmoveで数日間苦労しています。 – tousif

+0

@tousifはい私は編集する –

0

curlがサーバーから提供された証明書を確認できないため、失敗しています。

は仕事にこれを取得するには、2つのオプションがあります。

1は、安全でない接続を作ることがカールできます、それは証明書を検証しませんカールです。

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 

2 php.iniでルートCAを(CAは、サーバー証明書に署名する)追加

curl.cainfo=/path/to/cacert.pem 

あなたがFTPサーバーを保護するために接続されることを保証オプションのthatsとして、あなたはオプション2を使用する必要があります。

+0

私はcacert.pem(他の投稿からインターネット上に見つかった複数のもの)でオプション2をうんざりしていて、何も変わりません。 –

+0

そして、私はcurl.cainfoを変更したときに私がホスト –

+0

を確認しようとしなかった場合、apiが認証失敗を返すことになります:60SSL証明書の問題:ローカル発行者を取得できませんcertificateResult = –