我看到有噸後的SO,有關錯誤:證書鋼釘與PHP捲曲
SSL certificate problem: unable to get local issuer certificate
而且這是一個我得到。
所有他們的回答是剛從說下載根證書:
https://curl.haxx.se/ca/cacert.pem
並設置成CURLOPT_CAINFO或設置php.ini中的curl.cainfo。
但是,這樣做實際上只是告訴cURL信任根CA及其可信CA的列表。
從我的理解中,證書固定應該忽略所有這些根CA,並且只信任特定提供者的單個證書。
解決此錯誤的正確方法是什麼?
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_CAINFO, '/etc/httpd/static.gc.apple.com.pem');
curl_setopt($ch, CURLOPT_CAPATH, '/etc/httpd/');
//curl_setopt($ch, CURLOPT_PINNEDPUBLICKEY, "sha256//TeyzGG/8dvpuksAeSCb3tsvLEHbY6w9q63tXhOIf0Tg=");
$sslCertificate = curl_exec($ch);
我知道與libcurl本身,它有一個選項「CURLOPT_PINNEDPUBLICKEY」這不完全是我需要的,但目前PHP還沒有在PHP支持它......(它沒有這樣的常數,我有不知道常數的實際值是多少)
總是可以嘗試使用curl庫定義的'CURLOPT_PINNEDPUBLICKEY'的整數值,即使PHP沒有提供等效常量,請檢查[curl頭文件](https://github.com/curl/curl/ blob/master/include/curl/curl.h)。確保PHP使用的是支持它的cURL版本。 – apokryfos
,關注@ apokryfos的角度來看,CURLOPT_PINNEDPUBLICKEY'的'值是230,因此嘗試: 'curl_setopt($ CH,230, 「SHA256 // TeyzGG/8dvpuksAeSCb3tsvLEHbY6w9q63tXhOIf0Tg =」);' – Carey
@Carey從我在讀捲曲apokryfos發佈的標題,值是10230.因爲STRINGPOINT是10000.但無論如何,它沒有成功。我應用後沒有看到任何更改,我可以連接到任何https服務器。但我確認cURL版本是7.49.1,應該支持。並使用命令curl:curl --pinnedpubkey「sha256 // TeyzGG/8dvpuksAeSCb3tsvLEHbY6w9q63tXhOIf0Tg =」--url https://google.ca也給了我適當的錯誤。 –