Сборка рабочего libcurl с поддержкой WinSSL, NTLM, HTTP2, SSH2 и IPv6 - PullRequest
0 голосов
/ 08 января 2019

В нашем PHP-приложении нам нужно встроенное PHP-расширение, которое поддерживает следующие функции:

  • WinSSL (доступ к хранилищу сертификатов Windows)
  • NTLM, базовая и дайджест-аутентификация
  • HTTP / 2 поддержка
  • Поддержка SSH2
  • Поддержка IPv6

Я пытался построить curl таким образом, чтобы добиться этого:

  • Свяжите это с WinSSL
  • Свяжите это с nghttp2
  • Свяжите это с libssh2
  • Включить IPv6

Я сделал это с помощью командной строки

nmake /f Makefile.vc mode=dll VC=15 ENABLE_WINSSL=yes DEBUG=no MACHINE=x64 ENABLE_SSPI=no WITH_NGHTTP2=dll WITH_ZLIB=static WITH_SSH2=static WITH_DEVEL=C:\curl\deps-x64

в кудрях winbuild/ подпапка. Затем я скомпилировал расширение php curl для результата.

В результате я получаю следующее некорректное поведение при выполнении HTTP-запроса к веб-сервису, который предлагает базовую аутентификацию, дайджест, NTLM и согласование (веб-сервис Exchange):

  • Если используется curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM);, все работает нормально
  • Если используется curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);, все тоже отлично работает
  • Если используется curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM | CURLAUTH_BASIC);, аутентификация не пройдена .

Сбой запроса содержит слишком короткий токен NTLM (кажется, в какой-то момент обрезается). Некоторые специалисты по поиску указали, что это может быть связано с тем, что curl компилируется для использования SSPI. Однако я не могу отключить SSPI, потому что WinSSL требует этого.

Кто-нибудь знает решение этой проблемы? Чтобы получить расширение php-curl, отвечающее всем вышеперечисленным требованиям?

...