![](/img/trans.png)
[英]PHP cURL (SSL certificate problem: self signed certificate in certificate chain)
[英]PHP CURL and SSL certificate (or cert chain)
美好的一天!
我有REST API,可通過SSL(https://)訪問。 我想將正確的證書(或證書鏈)以及編寫為PHP和CURL的腳本一起提出請求。
這是我的目標( http://api.vkontakte.ru )中的證書在Firefox中的外觀:
http://speedcap.net/img/bc687485819715c65d6fe1e4ca1fdc40/1a2be.png
這是來自Firefox的已保存“ PEM格式的證書鏈X.509”的摘錄(在此處進行了描述: http : //unitstep.net/blog/2009/05/05/using-curl-in-php-to-access- https-ssltls-protected-sites / ):
-----BEGIN CERTIFICATE-----
MIIFVzCCBD+gAwIBAgIHKx5Ov2FOejANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
[..skip...]
0npsf5fkvT8E13NgVY0PK6V/baMTlTgWXKQZ
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIE3jCCA8agAwIBAgICAwEwDQYJKoZIhvcNAQEFBQAwYzELMAkGA1UEBhMCVVMx
[..skip...]
qDTMBqLdElrRhjZkAzVvb3du6/KFUJheqwNTrZEjYx8WnM25sgVjOuH0aBsXBTWV
U+4=
-----END CERTIFICATE-----
這是CURL init的代碼示例:
$this->ch = curl_init();
curl_setopt_array($this->ch, array(
CURLOPT_TIMEOUT => 30,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_AUTOREFERER => TRUE,
CURLOPT_FOLLOWLOCATION => TRUE,
CURLOPT_SSL_VERIFYPEER => TRUE,
CURLOPT_SSL_VERIFYHOST => 2,
CURLOPT_CAINFO => <path to my cert>,
));
我有CURL錯誤60( CURLE_SSL_CACERT
)抱怨wron證書。
我嘗試過的:
我已驗證使用了我的證書文件,因為當我指定錯誤的路徑時,它會抱怨找不到證書(錯誤70)
我已經與Facebook SDK及其證書鏈進行了核對,證明我的CURL可用於此類設置
我試圖導出不同的鏈(包括或不包括)鏈中的最后一個證書
嘗試過CURLOPT_SSL_VERIFYHOST => 1
。
歡迎任何想法!
幾年前,Vkontakte從vkontakte.ru域名移至vk.com。 他們也更改了自己的api處理程序網址。 這是我的解決方案:
這是我的帶有curl選項的代碼:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_CAINFO, getcwd() ."/ffchainvk.crt"); // ok
其中ffchainvk.crt
是帶有導出證書鏈的文件。
Curl在服務器上與系統其余部分(如台式機)不同的位置使用CA證書。 我之前必須將CA證書安裝到文件系統中。 PHP libcurl將使用命令行實用程序也使用的庫。 請參閱http://curl.haxx.se/docs/sslcerts.html 。
這些步驟似乎起作用:
然后單擊每個級別並導出每個證書:
根CA
服務器CA和
example-website.invalid 。
您應該將所有三個文件保存到計算機。 將所有三個文件復制到一個文件中,例如custom_name_cert.pem
將該pem文件復制到PHP可以訪問的目錄中,理想情況下,該文件具有644權限。您甚至可以使用444來防止篡改,並在需要更新時將其更改為644。
然后更新代碼中的路徑,例如:
CURLOPT_CAINFO => '/var/www/certs/custom_name_cert.pem'
警告:當網站更新其SSL證書時,以上文件可能已過期,並且HTTPS cURL調用可能失敗,從而破壞了您的應用程序。 希望有人會在這里回答一個自動更新此文件的好方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.