curl с аутентификацией ntlm работает в командной строке, но не внутри переполнения стека

Я должен подключиться с хоста Centos к IIS с curl.

С помощью локон с —NTLM опция отлично работает в командной строке, но не в php. Сервер является Microsoft IIS и отвечает сначала с 401 Unauthorized, на втором проходе с 200 OK.

После нескольких часов расследования я не нашел рабочего решения ..

Когда я использую curl в командной строке (centos 6.4) для получения содержимого службы:

curl -v http://example.com/do.asmx --ntlm -u DOMAIN\\username:password

сервер успешно отвечает с этим кодом:

* About to connect() to example.com port 80 (#0)
*   Trying nn.nn.nn.nn... connected
* Connected to example.com (nn.nn.nn.nn) port 80 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* Server auth using NTLM with user 'DOMAIN\username'
> GET /do.asmx HTTP/1.1
> Authorization: NTLM xxxxxxxxxxxxxxxxxx
> User-Agent: curl/7.19.7 (i386-redhat-linux-gnu) libcurl/7.19.7 NSS/3.19.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2
> Host: example.com
> Accept: */*
>
< HTTP/1.1 401 Unauthorized
< Content-Type: text/html; charset=us-ascii
< Server: Microsoft-HTTPAPI/2.0
< WWW-Authenticate: NTLM xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
< Date: Thu, 07 Jan 2016 19:28:04 GMT
< Content-Length: 341
<
* Ignoring the response-body
* Connection #0 to host example.com left intact
* Issue another request to this URL: 'http://example.com/do.asmx'
* Re-using existing connection! (#0) with host example.com
* Connected to example.com (nn.nn.nn.nn) port 80 (#0)
* Server auth using NTLM with user 'DOMAIN\username'
> GET /do.asmx HTTP/1.1
> Authorization: NTLM xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
> User-Agent: curl/7.19.7 (i386-redhat-linux-gnu) libcurl/7.19.7 NSS/3.19.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2
> Host: example.com
> Accept: */*
>
< HTTP/1.1 200 OK
< Cache-Control: private, max-age=0
< Content-Type: text/html; charset=utf-8
< Server: Microsoft-IIS/7.5
< X-AspNet-Version: 4.0.30319
< Persistent-Auth: true
< X-Powered-By: ASP.NET
< X-UA-Compatible: IE=EmulateIE8
< Date: Thu, 07 Jan 2016 19:28:04 GMT
< Content-Length: 5340
<<html>
...

хорошо, пока это работает отлично. Теперь я попытался сделать то же самое в php:

$ch = curl_init();

curl_setopt( $ch, CURLOPT_URL, 'http://example.com/do.asmx' );
curl_setopt( $ch, CURLOPT_HEADER, true );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM );
curl_setopt( $ch, CURLOPT_USERPWD, "DOMAIN\\username:password" );
curl_setopt( $ch, CURLOPT_TIMEOUT, 10 );
curl_setopt( $ch, CURLOPT_VERBOSE, true );$output = curl_exec($ch);

print_r(curl_getinfo($ch));
echo curl_error($ch);
curl_close($ch);
var_dump($output);

но ничего не происходит результаты

print_r (curl_getinfo ($ ch)):

Array
(
[url] => http://example.com/do.asmx
[content_type] =>
[http_code] => 0
[header_size] => 0
[request_size] => 0
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 0
[namelookup_time] => 0.021611
[connect_time] => 0
[pretransfer_time] => 0
[size_upload] => 0
[size_download] => 0
[speed_download] => 0
[speed_upload] => 0
[download_content_length] => -1
[upload_content_length] => -1
[starttransfer_time] => 0
[redirect_time] => 0
[certinfo] => Array
(
)

)

echo curl_error ($ ch):

connect() timed out!

var_dump ($ output):

bool(false)

как можно решить эту проблему? это выходит за рамки моих знаний ..

2

Решение

Я предлагаю вам удалить строки base64 из заголовка http Authorization: NTLM TL... поскольку его можно расшифровать и прочитать домен и учетные данные, что подвергает вас огромной угрозе безопасности.

Также удалите эти IP-адреса, если они не являются внутренними (даже все равно, удалите их в любом случае)

1

Другие решения

Прежде всего, я рекомендую вам проверить свои политики безопасности. Ваш брандмауэр может блокировать некоторые пакеты.

0

По вопросам рекламы [email protected]