На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! Дополнения к правилам (только для данного раздела)
- Используйте подсветку синтаксиса при выделении исходного кода;
- В описании темы обязательно укажите язык программирования;
- Прежде чем задать вопрос, обязательно воспользуйтесь поиском и загляните в FAQ раздела.
- Если вопрос касается серверного ПО, указывайте ОС.
- Если вопрос касается ASP.NET то лучше будет задать его в соответствующем разделе. Там вы сможете получить ответ намного быстрее.

Модераторы: Serafim, fatalist
  
> Проблемы с запросами из nginx с сертификатом
    Доброго времени. Такая проблема и не знаю, где копать. Суть проблемы:
    Есть БД (oracle), есть переадресующие сервера новый nginx на centos7, старый - apache на SunOS. Т.к. версия oracle некорректно работает с сертификатами (11) и пропатчить её до нужной версии не представляется возможным,то для переадресации xml-запросов из oracle был развёрнут сервер сначала apache (ещё до начала времён), а ныне на замену nginx. Oracle обращается к переадресующему серверу, дёргает .php-скрипт, где прописан curl с опциями и далее в биллинг контрагента. Это общая схема работы, ничего такого военного. Но тут с столкнулся проблемой:
    Взял .php скрипты с apache и скопировал на nginx. Есть сервисы, работающие без сертификата, а есть с сертификатом (прописываются в curl_setopt). Допустим синтаксис такой:
    ExpandedWrap disabled
      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 по тому же алгоритму нет" не вразумили.
      upd
      Включил расширенный лог в .php
      все неудачные запросы ложатся так:
      ExpandedWrap disabled
        *   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


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

      ExpandedWrap disabled
        *   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 -
        Вопрос закрыт. Проблема была в 2-х кривых потоках nginx. Их закрытие и открытие заново решило проблему, но вопрос - почему эти два потока не подхватывали сертификат остался открытым.
        1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script Execution time: 0,0663 ]   [ 14 queries used ]   [ Generated: 17.11.19, 09:32 GMT ]