Соскребание с запроса сертификата клиента с php и curl - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь загрузить файл, который должен быть аутентифицирован через цифровой сертификат клиента, у меня уже есть сертификат, но я не знаю, как настроить его в curl.

$useragent = '...';
$post = array( ... );
$certPass = '123456';
$certPath = _DIR_PATH.'cert/';
$certPfx = $certPath.'certificate.pfx';
$cert = $certPath.'certificate.pem';

$url = 'https://www.url.com/path/to/access';

$ch = curl_init( $url );
$options = array(
          CURLOPT_FAILONERROR => true,
                        CURLOPT_RETURNTRANSFER => true,
                        CURLOPT_AUTOREFERER => true,
                        CURLOPT_HEADER => true,
                        CURLOPT_NOBODY => true,
                        CURLOPT_CAINFO => $cert,
                        CURLOPT_CAPATH => $certPath,
                        CURLOPT_SSH_PRIVATE_KEYFILE => $certPfx,
                        CURLOPT_SSLCERT => $cert,
                        CURLOPT_SSLCERTPASSWD => $certPass,
                        CURLOPT_SSL_VERIFYHOST => 2,
                        CURLOPT_SSL_VERIFYPEER => true,
                        CURLOPT_POST => true,
                        CURLOPT_POSTFIELDS => $post,
                        CURLOPT_USERAGENT => $useragent,
                        CURLOPT_COOKIE => 'ASP.NET_SessionId='.$cookie
                    );
curl_setopt_array( $ch, $options );
$resp = curl_exec($ch);

$ch_errno = curl_errno($ch);
$ch_erro = curl_error($ch);

curl_close($ch);

Явсегда получаю сообщение: проблема с сертификатом SSL: невозможно получить сертификат локального эмитента.

Может ли кто-нибудь мне помочь?

Ответы [ 2 ]

0 голосов
/ 17 мая 2019

Вам необходимо настроить php.ini в соответствии с текущими (действительными) сертификатами.

curl.cainfo    = "/etc/php7.2/cacert.pem"
openssl.cafile = "/etc/php7.2/cacert.pem"

Посмотрите на https://curl.haxx.se/docs/caextract.html, чтобы загрузить текущий.После этого перезапустите ваш веб-сервер.

Не , а , что-то вроде

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

, которое будет работать, но отключит любую проверку и безопасность.

0 голосов
/ 17 мая 2019

PHP cURL: Исправлена ​​ошибка «Ошибка сертификата SSL: невозможно получить сертификат локального эмитента».

Если вы используете функции PHP cURL для подключения к URL-адресу HTTPS, вы можете столкнуться со следующей ошибкой:

Проблема с сертификатом SSL: невозможно получить сертификат локального эмитента. (код ошибки cURL 60)

Это распространенная ошибка, которая возникает, когда вы пытаетесь использовать функции PHP cURL для подключения к веб-сайту HTTPS. По сути, ваш клиент cURL не настроен для подключения к веб-сайтам с поддержкой SSL.

Быстрое исправление.

CURLOPT_SSL_VERIFYHOST: This option tells cURL that it must verify the host name in the server cert.
CURLOPT_SSL_VERIFYPEER: This option tells cURL to verify the authenticity of the SSL cert on the server.

Например.

$url = 'https://google.com';

//Initiate cURL.
$ch = curl_init($url);

//Disable CURLOPT_SSL_VERIFYHOST and CURLOPT_SSL_VERIFYPEER by
//setting them to false.
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

//Execute the request.
curl_exec($ch);

//Check for errors.
if(curl_errno($ch)){
    throw new Exception(curl_error($ch));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...