我正在測試使用curl_exec
php函數和CA證書的API,但出現問題,並且我有點遺失。SSL對等證書或SSH遠程密鑰不正確
我在我的apache VirtualHost上配置了SSL並且看起來沒問題(打開https:://[myVHost]
...作品)。
然而,API調用捲曲給我回這個消息:
SSL peer certificate or SSH remote key was not OK
我不是很有經驗的SSL所以我對那起因一些想法。
UPDATE:
這是我用我的捲曲請求的代碼,我有評論2條線,並改變它們的值(看「TODO」線),並以這種方式工作,然而,這只是一個以防萬一的工作......
$opts[CURLOPT_URL] = $url;
$opts[CURLOPT_RETURNTRANSFER] = true;
$opts[CURLOPT_CONNECTTIMEOUT] = 50;
$opts[CURLOPT_TIMEOUT] = 100;
$headers = array(
'Accept: application/json',
"User-Agent: APIXXX-PHP-Client");
$opts[CURLOPT_HTTPHEADER] = $headers;
$opts[CURLOPT_USERPWD] = $env->getApiKey() . ':';
if (certificatePresent()) {
// $opts[CURLOPT_SSL_VERIFYPEER] = true;
// $opts[CURLOPT_SSL_VERIFYHOST] = 2;
// TODO: SET IT BACK
$opts[CURLOPT_SSL_VERIFYPEER] = 0;
$opts[CURLOPT_SSL_VERIFYHOST] = 0;
$opts[CURLOPT_CAINFO] = $path
}
curl_setopt_array($curl, $opts);
$response = curl_exec($curl);
我們需要您使用的完整且完整的代碼來提出請求,其中包括設置所有捲曲選項。另外,這是一個自簽名證書嗎? – Charles
信息添加:)關於'自簽署certificate'問題,我不知道:該證書提供與API ... – WonderLand
您已經成功地識別出的根本原因:'CURLOPT_SSL_VERIFYHOST'爲2。如果設置爲2 ,curl將驗證證書是否有效,並且它是由它所信任的CA頒發的。如果遠程證書是自簽名的或者不是由其信任的CA頒發的,它會發出抱怨並給出錯誤信息,如所給出的錯誤。如果您從第三方獲得證書,則需要說服curl相信簽署該證書的CA。你說你有一個CA證書,對吧?你用它做了什麼? – Charles