PHP Curl - у однорангового SSL-сервера возникла неопределенная проблема с полученным сертификатом - PullRequest
0 голосов
/ 15 апреля 2020

Это запрос, который я отправляю с моим PHP кодом-

$url = 'https://mywebserviceurl.com';
$method='GET';

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
    curl_setopt($ch, CURLOPT_VERBOSE, '1');
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, '2');
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 'TRUE');
    curl_setopt($ch, CURLOPT_CAINFO, __DIR__.'/print_ca_ca.cer');
    curl_setopt($ch, CURLOPT_SSLCERT, __DIR__.'/print_ca_cert.cer');
    curl_setopt($ch, CURLOPT_SSLKEY, __DIR__.'/print_ca_key_decr.pem');
    curl_setopt($ch, CURLOPT_SSLCERTPASSWD, 'somepassword');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $response    = curl_exec($ch);
    $resp = json_encode($response);
    $this->setErrorCodeMessage('401', 'Response-> '.$resp); //get a False here

    $error = curl_error($ch);
    $this->setErrorCodeMessage('401', 'Error-> '.$error); //get Error here

    $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    if ($status_code == '200' && !empty($response)) {
            $this->setErrorCodeMessage('401', 'Inside 200 OK..');
    }

Ошибка, которую я вижу в моих журналах ошибок:

SSL-узел некоторая неуказанная проблема с сертификатом, который он получил.

Когда я делаю php -a и пытаюсь выполнить запрос как есть на оболочке вместе с приведенной выше строкой ошибки Я также получаю следующее:

Ошибка NSS -12224 (SSL_ERROR_CERTIFICATE_UNKNOWN_ALERT)

У меня изначально был файл p12, и я получил цепочку ca (файл .cer), сертификат ssl (файл .cer) и файлы ключей (файл .pem) из него с помощью команд openssl, и я использую эти файлы с запросом Curl. На данный момент я попробовал все; используя файлы pem, crt, cer, устанавливая значения CURLOPT_SSL_VERIFYHOST и CURLOPT_SSL_VERIFYPEER в разные значения, а также пытался получить запрос POST, но я продолжаю получать У равноправного участника SSL была некоторая неопределенная проблема с полученным сертификатом.

Есть ли что-то, что я делаю не так? Любые предложения?

PS - Я использовал исходный файл P12 и его пароль на Postman и смог отправить оба запроса GET / POST без проблем.

1 Ответ

0 голосов
/ 15 апреля 2020

Полученная ошибка связана с тем, что сервер не принимает ваш клиентский сертификат (print_ca_cert.cer). CURLOPT_SSL_VERIFYHOST et c не поможет, так как эта опция предназначена для проверки сертификата сервера клиентом.

Неясно, что серверу не нравится с вашим сертификатом клиента, так как неизвестно, каковы требования для этого сертификата и что на самом деле в файлах, которые вы получили. Возможно, print_ca_ca.cer - это не центр сертификации для сертификата сервера, который вы настраиваете с помощью CURLOPT_CAINFO, а промежуточный центр сертификации, который необходимо отправить вместе с сертификатом клиента. В этом случае вам нужно добавить ваш print_ca_ca.cer к вашему print_ca_cert.cer. Но опять же, это всего лишь предположения, так как о содержимом этих файлов ничего не известно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...