На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Serafim, fatalist
  
    > php и сертификаты для HTTPS , проблема с сертификатами при выполнении php - запроса
      Доброго всем.
      Суть вопроса:
      Есть договор с организацией, предусматривающий обмен xml по протоколу https. В openssl сделал запрос на сертификат. OpenSSL сгенерил мне 2 файла:
      формат .pem
      -----BEGIN CERTIFICATE REQUEST-----
      ....
      -----END CERTIFICATE REQUEST-----
      и .pem
      -----BEGIN ENCRYPTED PRIVATE KEY-----
      ....
      -----END ENCRYPTED PRIVATE KEY-----
      длина ключа задана 1024 (их требования).
      REQUEST отослал в организацию, вернули 2 файла: сгенерированный сертификат .cer и свой корневой .crt
      Запрос (XML) из oracle идёт на SunOS и оттуда переправляется через curl по средствам .php
      В
      curl_setopt($ch,CURLOPT_SSLCERT,'полный_путь_к_файлу_присланного_сертификата.cer'); ---присланный сертификат
      curl_setopt($ch,CURLOPT_SSLKEY,'полный_путь_к_файлу_закрытого_ключа.pem'); ---private key из
      curl_setopt($ch, CURLOPT_SSLCERTPASSWD,"пароль");

      fulllog выдаёт ошибку

      * About to connect() to бла-бла-бла.ru port 8444
      * Trying ХХХ.ХХ.ХХ.Х... * connected
      * Connected to pay.mobile-win.ru (ХХХ.ХХ.ХХ.Х) port 8444
      * unable to set private key file: 'бла-бла-бла.pem' type PEM

      * Closing connection #0

      и такую же на .cer

      Из сертификатов .cer и PRIVATE KEY сляпал .p12 и в браузере на своей машине (Win7) соединился с искомым https адресом
        UPD проблемы. Кое-что я нарыл. Сам дурак: не обратил внимание, что в действующей схеме закрытый ключ rsa private key, а я пытаюсь подложить encrypted private key. Ок, переделал. Теперь rsa private key. Кидаю запрос, протокол выполнения:

        * About to connect() to ХХХ.ХХ.ХХ.Х port 8444
        * Trying ХХХ.ХХ.ХХ.Х... * connected
        * Connected to ХХХ.ХХ.ХХ.Х (185.15.39.6) port 8444
        * successfully set certificate verify locations:
        * CAfile: /usr/share/curl/curl-ca-bundle.crt
        CApath: none
        * Unknown SSL protocol error in connection to ХХХ.ХХ.ХХ.Х:8444
        * Closing connection #0

        Пробовал разные ключи с сертификатом: 1024, 2048...
          UPD вопроса. Сделал php чисто для проверки коннекта по адресу. В echo возвращает ошибку
          Error: 35 - Unknown SSL protocol error in connection to XXX.XX.XX.X:8444

          Добавлено
          Всё, решена проблема.... Кому интересно, то дело в следующем:
          CURLOPT_SSLVERSION
          В мануале по php указано, что эту опцию лучше не ставить, НО, блин, оставил как в рекомендации - фиг там, ошибка 35. Установил CURLOPT_SSLVERSION в значении 1 - всё заработало.
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0316 ]   [ 15 queries used ]   [ Generated: 16.04.24, 21:04 GMT ]