Я написал утилиту для декодирования BLOB-объектов NTLM, отправленных в сеансах IE и HttpWebRequest.
Когда я смотрю на HttpWebRequest и IE, они оба запрашивают 56-битное и 128-битное шифрование с сервера. Вот дамп сеанса с использованием HttpWebRequest
==== Type1 ----
Signature: NTLMSSP
Type: 1
Flags: E20882B7
NTLMSSP_NEGOTIATE_56
NTLMSSP_NEGOTIATE_KEY_EXCH
NTLMSSP_NEGOTIATE_128
RESERVED2
RESERVED3
RESERVED4
NTLMSSP_REQUEST_NON_NT_SESSION_KEY
NTLMSSP_TARGET_TYPE_DOMAIN
NTLMSSP_NEGOTIATE_OEM_DOMAIN_SUPPLIED
NTLMSSP_NEGOTIATE_DATAGRAM
NTLMSSP_REQUEST_TARGET
NTLM_NEGOTIATE_OEM
NTLMSSP_NEGOTIATE_UNICODE)
Domain :
Workstation:
==== Type2 ----
Signature: NTLMSSP
Type: 2
Flags: 201
NTLMSSP_NEGOTIATE_56
NTLMSSP_REQUEST_NON_NT_SESSION_KEY)
Context: D32FDDCB:63507CFA
Вот дамп из IE:
==== Type1 ----
Signature: NTLMSSP
Type: 1
Flags: A208B207
NTLMSSP_NEGOTIATE_56
NTLMSSP_NEGOTIATE_KEY_EXCH
NTLMSSP_NEGOTIATE_128
NTLMSSP_REQUEST_NON_NT_SESSION_KEY
NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY
NTLMSSP_TARGET_TYPE_SHARE
NTLMSSP_TARGET_TYPE_DOMAIN
NTLMSSP_NEGOTIATE_OEM_DOMAIN_SUPPLIED
NTLMSSP_NEGOTIATE_DATAGRAM
NTLMSSP_REQUEST_TARGET
NTLMSSP_NEGOTIATE_UNICODE)
Domain : XXXX.UK
Workstation: XXX-X31
==== Type2 ----
Signature: NTLMSSP
Type: 2
Flags: 201
NTLMSSP_NEGOTIATE_56
NTLMSSP_REQUEST_NON_NT_SESSION_KEY)
Context: D32FDDCB:63507CFA
В обоих IE / HttpWebRequest они запрашивают как 64, так и 128-битную безопасность. Однако для windows7 128-битная безопасность для NTLM была сделана по умолчанию, и без этого аутентификация не будет выполнена. Как видно из ответа сервера, сервер поддерживает только 64-битное шифрование.
Следующая ссылка содержит обсуждение аналогичной проблемы, с которой столкнулся другой человек.
http://social.msdn.microsoft.com/Forums/en-US/ncl/thread/f68e8878-53e9-4208-b589-9dbedf851198
Причина, по которой IE работает вместо управляемого приложения, заключается в том, что IE фактически не запрашивает NTLMSSP_NEGOTIATE_SEAL | NTLMSSP_NEGOTIATE_SIGN, который в конечном итоге требует шифрования. Однако HttpWebRequest запрашивает как SEAL | SIGN. Это требует 128-битного шифрования, тогда как способ, которым IE инициализирует NTLMSSP (без SEAL & SIGN), не требует шифрования. Следовательно, IE работает, а HttpWebRequest - нет. (см. ссылку выше)
Я думаю, что если вы измените свою политику безопасности, чтобы разрешить 64-битное шифрование для NTLM, ваше приложение с управляемым кодом будет работать. Или, альтернативно, попросите поставщика прокси поддержать 128-битное шифрование для NTLM.
Надеюсь, это поможет.