| ||||
| ||||
Коллеги, пытаюсь разобраться в механизме входа в систему(w2k) с помощью Smart Card (usb token). Прочитал уже кучу документации, но самое интересное каждый раз остается за кадром. В результате никак не могу сформировать общую картинку. Надеюсь на квалифицированную помощь:) ----------- И так, участники процесса входа в систему: Gina, Lsa, Authentication Package, Smart Card, Crypto Provider. Gina обнаруживает наличие smart card, запрашивает PIN, далее она должна обратиться к LSA, передав некие credentials и указав Authentication Package, который будет использоваться. В случае с Kerberos+SmartCard, сам Authentication Package должен подписывать определенные данные на приватном ключе пользователя. Так вот собственно и вопросы: - что происходит между запросом PIN из Gina и вызовом LsaLogonUser - какие Credentials Gina передает в LsaLogonUser, есть ли где-нибудь описание этих форматов - откуда Authentication Package знает, к какому Crypto Provider обращаться, ведь насколько я понимаю, это должен быть именно Crypto Provider для данной Smart Card, ключ-то на ней. Также буду очень благодарен за всякие полезные ссылки. Заранее спасибо. | ||||
Ответы: | ||||
| ||||
Принципиально ничем не отличается от стандартного входа в систему. Ключевое отличие - только в SAS и методах ввода имени-пароля. Если в первом случае достаточно уметь работать с окнами :), то во втором уметь читать MSDN по предоставляемому API по работе со смарт-картами. В нете достаточно примеров реализации своей GINA. | ||||
| ||||
насчет механики ничего не могу сказать :) А вот процесс входа в домен по смарт-карте прекрасно опсисан в MSDN: http://search.microsoft.com/search/results.aspx?view=msdn&st=b&na=82&qu=smart+card+logon, точнее http://www.microsoft.com/windows2000/techinfo/howitworks/security/sclogonwp.asp, про CSP тут: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnscard/html/smartcardcspcook.asp?frame=true. | ||||
| ||||
to Ivan Varzar: Иван, ко ли Вы такой крутой, может напишите нам, бестолковым фрагмент работающего вызова LsaLogonUser для входа по карте? Тпа куда PIN пихать и т.п. На сайте Микрософт, куда Вы нас "послали", можно даже не искать этой информации - она закрыта, вне зависимости от того, умеем ли мы читать или нет. | ||||
| ||||
typedef struct _KERB_SMART_CARD_LOGON { KERB_LOGON_SUBMIT_TYPE MessageType; UNICODE_STRING Pin; ULONG CspDataLength; PUCHAR CspData; } KERB_SMART_CARD_LOGON, *PKERB_SMART_CARD_LOGON; | ||||
| ||||
Я прошу фрагмент работающего кода :) Про эту структуру все знают и все, кто пробовал сделать логон по ПиНу знают, что это не работает. Есть еще какоето необходимое условие. В чистом виде использование этой схемы согласно MSDN даст ошибку "не найден сервер для проверки сертификата" | ||||
| ||||
Вот код, работающий на XP и запрашивающий любые credentials, в том числе сертификаты и смарт-карты (для работы с КриптоПро CSP 3.0 требуется КриптоПро Winlogon) DWORD res = 0; PWSTR pszTargetName = L"Server"; WCHAR pszUserName[CREDUI_MAX_USERNAME_LENGTH + 1]; WCHAR pszPassword[CREDUI_MAX_PASSWORD_LENGTH + 1]; STARTUPINFOW StartupInfo; PROCESS_INFORMATION ProcessInfo; BOOL pfSave = FALSE; ZeroMemory(pszUserName, CREDUI_MAX_USERNAME_LENGTH + 1); ZeroMemory(pszPassword, CREDUI_MAX_PASSWORD_LENGTH + 1); ZeroMemory( &StartupInfo, sizeof(StartupInfo) ); StartupInfo.cb = sizeof(StartupInfo); ZeroMemory( &ProcessInfo, sizeof(ProcessInfo) ); res = CredUIPromptForCredentialsW( NULL, pszTargetName, NULL, 0, pszUserName, CREDUI_MAX_USERNAME_LENGTH, pszPassword, CREDUI_MAX_PASSWORD_LENGTH, &pfSave, CREDUI_FLAGS_GENERIC_CREDENTIALS | CREDUI_FLAGS_ALWAYS_SHOW_UI); res = CreateProcessWithLogonW( pszUserName, NULL, pszPassword, LOGON_WITH_PROFILE, L"cmd.exe", NULL, CREATE_NEW_CONSOLE, NULL, NULL, &StartupInfo, &ProcessInfo); Причем UserName получается весьма странный - явно маскированный - дальше пока не копал, а пин-код передается в чистом виде в pszPassword. Как это сделать на низком уровне, пока не совсем понятно - будет время разберусь. | ||||
| ||||
Это тоже вроде работает LogonUserW(pszUserName, NULL, pszPassword, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_WINNT50, &phToken); | ||||
| ||||
содержимое pszUserName связано с CredMarshalCredential/CredUnMarshalCredential, так что этот код только для XP (когда сертификат со смарт-карты автоматически отображается в хранилище), вопрос с 2k пока открыт. | ||||
| ||||
Спасибо! на счет 2k гимор изрядный - уже больше месяца ищу решение. Под XP - попробую, хотя задачи такой пока не стоит. | ||||
| ||||
Hey http://viagra-de.pillsmag.com http://viagra-da.pillsmag.com http://viagra-it.pillsmag.com http://viagra-se.pillsmag.com http://cialis-it.pillsmag.com Bye-bye | ||||
| ||||
Hi [url=http://viagra-de.pillsmag.com]viagra[/url] [url=http://viagra-da.pillsmag.com]viagra[/url] [url=http://viagra-it.pillsmag.com]viagra[/url] [url=http://viagra-se.pillsmag.com]viagra[/url] [url=http://cialis-it.pillsmag.com]cialis[/url] Regads | ||||