Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > HTTP сервера > Проблемы с запросами из nginx с сертификатом


Автор: Archelon 25.05.19, 08:08
Доброго времени. Такая проблема и не знаю, где копать. Суть проблемы:
Есть БД (oracle), есть переадресующие сервера новый nginx на centos7, старый - apache на SunOS. Т.к. версия oracle некорректно работает с сертификатами (11) и пропатчить её до нужной версии не представляется возможным,то для переадресации xml-запросов из oracle был развёрнут сервер сначала apache (ещё до начала времён), а ныне на замену nginx. Oracle обращается к переадресующему серверу, дёргает .php-скрипт, где прописан curl с опциями и далее в биллинг контрагента. Это общая схема работы, ничего такого военного. Но тут с столкнулся проблемой:
Взял .php скрипты с apache и скопировал на nginx. Есть сервисы, работающие без сертификата, а есть с сертификатом (прописываются в curl_setopt). Допустим синтаксис такой:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    curl_setopt($ch, CURLOPT_URL,            $url);
    curl_setopt($ch, CURLOPT_HTTPGET,        1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_USERAGENT,      'User-Agent=Mozilla/5.0 Firefox/1.0.7');
    curl_setopt($ch, CURLOPT_HTTPAUTH,       CURLAUTH_BASIC);
    curl_setopt($ch, CURLOPT_HEADER,         $head);
    curl_setopt($ch, CURLOPT_POST,           1);
    curl_setopt($ch, CURLOPT_POSTFIELDS,     http_build_query($params));
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_SSLCERT,        '*полный путь к сертификату*');
    .....
    $result=curl_exec($ch);
    .....
    echo $result;

Соответственно $result возвращается в oracle и его там обрабатываю. Схема 156% рабочая, пашет на apache не первый год с результатом "отлично".
С nginx столкнулся с проблемой (я не настраивал сервер, ибо не входит в мои обязанности и знания, я им только пользуюсь), что over 15% $result приходит null, пусто, ни error_log, ни connect_log nginx-а не показывают никаких ошибок. сначала пытался грешить не сертификат, но та же схема на apache работает шикарно. Но другие схемы на nginx без сертификатов так же работают без отказов и null в $result. Понимаю, что скорее всего где-то проблема в каких-то настройках nginx, но не могу допереть - где. Обращения к сотрудникам, кто поднимал сервер nginx не дало никаких результатов, т.к. мне пытались доказать (на основе логов nginx), что сервер работает как часики и проблема в моей базе. никакие аргументы типа "на apache ни одного пустого возвращаемого $result по тому же алгоритму нет" не вразумили.

Автор: Archelon 27.05.19, 09:52
upd
Включил расширенный лог в .php
все неудачные запросы ложатся так:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    *   Trying (***.***.***.***)...
    * TCP_NODELAY set
    * Connected to бла-бла-бла-сайт.ru (***.***.***.***) port 443 (#0)
    *   CAfile: none
      CApath: none
    * Unable to load client key: Incorrect password
    * NSS error -8177 (SEC_ERROR_BAD_PASSWORD)
    * The security password entered is incorrect.
    * Closing connection 0


следом этот же запрос, но уже удачный

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    *   Trying (***.***.***.***)...
    * TCP_NODELAY set
    * Connected to бла-бла-бла-сайт.ru (***.***.***.***) port 443 (#0)
    *   CAfile: none
      CApath: none
    * skipping SSL peer certificate verification
    * NSS: client certificate from file


PS. Сертификат без пароля

Автор: Archelon 15.07.19, 10:34
Вопрос закрыт. Проблема была в 2-х кривых потоках nginx. Их закрытие и открытие заново решило проблему, но вопрос - почему эти два потока не подхватывали сертификат остался открытым.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)