Привет, коллеги-программисты,
Я делаю API с https-соединением. Я хочу, чтобы вызов API был проверен сертификатом. Теперь я загрузил cacert.pem из curl и поместил его в свою папку, но он не работает и дает мне эту ошибку:
SSL certificate problem: unable to get local issuer certificate
Ну, я действительно уверен, что файл cacert.pem находится правильно, но для вас, ребята, какой-то код, который я писал, чтобы заставить его работать:
$ch = curl_init($url); curl_setopt($ch, CURLOPT_POST ,1); curl_setopt($ch, CURLOPT_USERPWD, $this->api_key . ":" . $this->api_secret); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . "/cacert.pem"); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($ch, CURLOPT_POSTFIELDS ,$post_vars); curl_setopt($ch, CURLOPT_FOLLOWLOCATION ,0); curl_setopt($ch,CURLOPT_HTTPHEADER,array('Accept: application/json')); curl_setopt($ch, CURLOPT_RETURNTRANSFER ,1); // RETURN THE CONTENTS OF THE CALL $data = curl_exec($ch);
Надеюсь, вы, некоторые из вас, ребята, ответили на мой вопрос, потому что я действительно мало знаю о соединениях SSL.
Заранее спасибо!
Убедившись, что ваш комплект сертификатов читается скриптом, который вы используете, следующим шагом является исследование самого сервера.
Если это ваш собственный сервер, вероятно, вы забыли установить промежуточные сертификаты, то есть между выпущенным сертификатом и одним из органов сертификации, который поставляется вместе с пакетом.
Если вы работаете с самозаверяющим сертификатом, ваш cacert.pem
должен содержать общедоступный сертификат сервера, к cacert.pem
вы подключаетесь; это может быть создано из частного сертификата, описанного здесь , называемого файлом .crt
.