Как я могу выпустить (или создать) тикет Kerberos в окне?

Microsoft предоставляет множество поставщиков учетных данных Windows, называемых «поставщиком поддержки безопасности» как часть Microsoft Windows, например,
・ пароль (* 1)
・ смарт-карту (сертификаты в окне аутентификация) (* 2)
・ окно привет, PIN (FIDO 2) (* 3)

Kerberos - это основной метод аутентификации пользователей в Windows для интерактивного входа в систему с использованием паролей и входа в сеть с использованием билетов Kerberos. процесс входа пользователя домена

Используя вышеупомянутые (* 1), (* 2) или (* 3), я действительно хочу знать, есть ли какой-либо простой способ выпустить (создать) билеты Kerberos?

Я также проконсультировался с Microsoft API об этой модели (процесс входа в систему пользователя домена), но, похоже, не существует API для выдачи (создания) тикет-kerberos.

API, на который я ссылался: SSPI: https://docs.microsoft.com/en-us/windows/win32/api/sspi/ LsaLogonUser: https://docs.microsoft.com/en-us/windows/win32/api/ntsecapi/nf-ntsecapi-lsalogonuser

Пожалуйста, дай мне знать. Заранее спасибо!


person John    schedule 13.05.2020    source источник
comment
Во всех случаях именно ваш сервер домена Active Directory выдает учетные данные Kerberos после того, как вы прошли аутентификацию, и Windows хранит эти кредиты в своем кэше LSA (Linux будет использовать другие виды кеша учетных данных, но, как всегда, ребята из Microsoft думают, что они настолько умны, что должны изобретать проприетарные вещи)   -  person Samson Scharfrichter    schedule 13.05.2020
comment
Похоже, не только вы задаете такие вопросы, ср. stackoverflow.com/questions/61769720/   -  person Samson Scharfrichter    schedule 13.05.2020
comment
@SamsonScharfrichter Предполагая, что у меня есть 1 сертификат, есть ли способ передать учетные данные (сертификат) в AD для пройденной аутентификации?   -  person John    schedule 17.05.2020
comment
Проверьте документацию производителя вашей смарт-карты. Для сеанса Windows, если ОС обнаруживает совместимое USB-устройство, приглашение входа в систему должно предлагать выбор аутентификации с помощью login / pwd или с помощью соответствующего API, который должен обрабатывать запрос PIN-кода для доступа к card, затем вызов / ответ между AD и картой. (Обратите внимание, что сертификат является общедоступным, это не учетные данные - это запрос / ответ с использованием сертификата на стороне AD и PK на стороне карты, который создает учетные данные)   -  person Samson Scharfrichter    schedule 17.05.2020
comment
Привет @SamsonScharfrichter. Я ожидаю, что каким-то образом пройдет аутентификация с использованием учетных данных пользователя (сертификата) (а не имени пользователя / пароля), и я думаю, что использовать модель смарт-карты (сертификата). Интересно, как настроить отправку сертификата в AD для пройденной аутентификации - мой вопрос находится под ссылкой, заранее спасибо. - stackoverflow.com/questions/61867671/ ----   -  person John    schedule 19.05.2020


Ответы (1)


Поставщики учетных данных не являются поставщиками общих служб; они являются поставщиками учетных данных. Они передают учетные данные, которые вы используете, со входов (клавиатура, биография, смарт-карта) в SSP. Они не предназначены для тяжелой работы. Поставщики общих служб выполняют фактическую протокольную работу по аутентификации для любой службы, находящейся в вашем распоряжении.

Образ, на который вы ссылаетесь, не является технически точным, так как это процесс, предшествующий Vista. Все в левой части изображения устарело. Правая часть по-прежнему в основном правильная.

Не считая цветных комментариев, Самсон прав. AD является создателем билета, и единственный способ заставить его создать билет - это запросить его после аутентификации с использованием учетных данных и его для именованных учетных данных для определенной именованной службы. Вы можете запросить билеты через SSPI ACH и ISC функции. SSP - это внутренние реализации этих функций.

LsaLogonUser проверит учетные данные и сохранит полученный билет в выделенном кеше (отдельно от кеша сеанса по умолчанию для входа в систему). Часто вы вызываете CredUIPromptForWindowsCredentials для сбора creds и передать буфер в LsaLogonUser или функцию ACH.

person Steve    schedule 13.05.2020
comment
Спасибо за ваш ответ и, основываясь на вашем объяснении, я хотел бы резюмировать следующее: ①. Пользователь отправляет (передает) учетные данные (сертификат или пароль) в AD. ②. AD создает билет после аутентификации учетных данных (сертификата или пароля). ③. Используйте SSPI для запроса билетов и создания билетов. о потоке ① → ③ это правильно? Предполагая, что это правильно, я хотел бы задать еще один вопрос. Из ①. Сертификат есть. Итак, как мне отправить (передать) AD для аутентификации? Заранее спасибо. - person John; 17.05.2020
comment
Сертификаты и пароли взаимозаменяемы при входе в систему. Такова природа протокола Kerberos. Вы указываете дескриптор сертификата на шаге 1. - person Steve; 18.05.2020
comment
Фу. Kerberos с поддержкой сертификатов X509. Похоже, Microsoft переписала книгу Джорджа Оруэлла «1984» - «Мы изобрели Kerberos». В следующем году мы скажем, что изобрели кремний. - person Samson Scharfrichter; 19.05.2020
comment
Я не знаю, как ответить на такое заявление. PKINIT определен в RFC 4556, который является расширением RFC 4120, который ратифицировал исторический RFC 1510. PKINIT - это обработка PKI на основе сертификата X.509 и обмен ключами во время потока AS Kerberos. Фактически они взаимозаменяемы во время входа в систему AS. Windows предоставляет это определенным образом, и все основные реализации протокола поддерживают PKINIT (MIT, Heimdal, Java, Microsoft, Go и т. Д.). С чем именно вы не согласны? - person Steve; 19.05.2020
comment
@Steve Моя проблема в том, что я хочу использовать протокол kerberos для попытки входа в окно с сертификатом без использования смарт-карты (оборудования) и (не существующих учетных данных, созданных пользователем при входе в систему. Означает первый вход непосредственно с сертификатом). И есть ли способ сделать это? - Я также смотрел SSPI ACH (kerberos), но похоже, что он не поддерживает сертификаты. Только поддержка (имя пользователя / пароль) через структуру SEC_WINNT_AUTH_IDENTITY. заранее спасибо - person John; 21.05.2020