Squid, аутентификация, Outlook Anywhere, Windows 7 и HTTP 1.1 = NIGHTMARE
Я использую прокси-сервер Squid (последняя версия, 3.1.4) в Linux CentOS 5.4 с Samba 3.5.4, чтобы разрешить аутентифицированный веб-доступ для пользователей домена; все работает отлично, и даже клиенты Windows 7 полностью поддерживаются. Аутентификация прозрачна для пользователей домена, в то время как она явно запрашивается для не доменных, и она работает, если пользователь может предоставить действительные учетные данные домена. Все хорошо и хорошо.
Затем начинается Outlook Anywhere, и наступает боль и страдания.
Когда Outlook (будь то 2007 или 2010, это не имеет значения) работает на клиентах Windows XP, он изящно подключается через прокси-сервер Squid к своему удаленному серверу Exchange.
Когда он работает на Windows 7, это не так.
Если требование проверки подлинности снято с прокси-сервера, все работает и в Windows 7, поэтому проблема, очевидно, связана с проверкой подлинности NTLM со Squid.
Углубившись вглубь (WireShark), я обнаружил, что Outlook Anywhere использует HTTP 1.1 при работе в Windows 7, а HTTP 1.0 - в Windows XP. И похоже, что у Squid, даже в его последнем воплощении, все еще есть некоторые серьезные проблемы с правильной обработкой HTTP 1.1, особенно когда в смесь включены аутентификация SSL и прокси.
В ожидании полной и официальной поддержки Squid HTTP 1.1 (и, похоже, это может занять довольно много времени), я ищу одно из следующих решений:
- Заставьте Squid справиться с этим правильно, если это вообще возможно.
- Определите соединения Outlook Anywhere и Squid не требует для них аутентификации. Но это нелегко: опять же, поведение Outlook отличается при работе в Windows XP и Windows 7, и хотя в Windows XP Outlook отправляет действительно хорошую строку user-agent "MSRPC", в Windows 7 она не отправляет любой (почему? ПОЧЕМУ?!?).
- Заставить Outlook Anywhere использовать HTTP 1.0 даже при работе в Windows 7. И нет, это не так просто, как отменить выбор "использовать HTTP 1.1" в Internet Explorer, похоже, что Outlook игнорирует этот параметр и самостоятельно выбирает, какой протокол использовать.
- Любое другое возможное решение, которое не включает внесение в белый список определенных конечных серверов Exchange, и это последнее средство, которое я стараюсь избегать.
3 ответа
Windows 7, Server 2008 и я полагаю, что даже Vista не поддерживает NTLMv1 по умолчанию. Если он работает на XP, но не на Windows 7, я бы начал с включения NTLMv1 и проверки, решает ли он вашу проблему. Вот пост, который помог мне, когда у меня была похожая проблема. Windows7 - "Указанный сетевой пароль неверен", если пароль действительно правильный
Загрузка rpcping.exe
в Dependency Walker, ясно, что он использует WinHttp.dll
вместо WinInet.dll
, Итак, копирование WinHttp.dll
из Windows XP SP3 в C:\Program Files\Microsoft Office\Office11
где Outlook.exe
находится заставляет Outlook отправлять HTTP/1.0
запросы с User-Agent
и все остальные поля заголовка, как это было на моем старом компьютере.
Существующая версия для Windows 7 SP1: 6.1.7601.17514
Скопированная версия из Windows XP SP3: 5.1.2600.6175
Это не самое чистое решение, но оно должно сделать сейчас. Если у кого-то есть идея получше, я все уши...
3.1.4 не является последней версией Squid - текущая версия восходящего потока в ветке 3.1 - 3.1.16, и в журнале изменений много изменений, связанных с соответствием HTTP 1.1. Возможно, вам придется попробовать более новую версию.
В этом посте от пользователей squid говорится, что по крайней мере в январе даже использования самой последней версии 3.1.x было недостаточно, а необходимые исправления поддержки HTTP 1.1 были только в 3.2 бета-версиях.