Не удается подключиться с помощью моих учетных данных к поставщику хранилища образцов ключей Microsoft (комплект разработки поставщика криптографических данных)

Моя текущая экологическая ситуация:
1. на стороне клиента я устанавливаю сертификат, выданный оконным сервером (ADCS) с типом поставщика (Microsoft Enhanced Cryptographic Provider v1.0) и закрытым ключом PFX в хранилище сертификатов (мое хранилище).
2. Сделайте команду для проверки: certutil -store my .
3. Установите соединение с моим поставщиком учетных данных для KSP через статью: эта статья по вопросу

Проблема: KSP (поставщик хранилища ключей) не загружается при входе в систему через поставщика учетных данных.

Интересно, проблема ниже:

  1. Является ли закрытый ключ, связанный с сертификатом (мой магазин), не типом поставщика хранилища ключей Microsoft? (текущее: Microsoft Enhanced Cryptographic Provider v1.0) Я до сих пор не знаю, как создать сертификат, закрытый ключ с помощью поставщика с именем Поставщик хранилища образцов ключей Microsoft. Кто-нибудь знает, может просто помочь мне?
  2. В функции ConstructAuthInfo(LPBYTE* ppbAuthInfo, ULONG *pulAuthInfoLen):
    WCHAR szCardName [] = L ""; // имя карты не указано, но вы можете указать его, если хотите
    WCHAR szContainerName [] = L "my_key_name";
    WCHAR szReaderName [] = L "";
    WCHAR szCspName [] = L "Поставщик хранилища образцов ключей Майкрософт";
    WCHAR szPin [] = L "11111111";
    -> Что означает это my_key_name? и может ли он установить значение L ""; Это нормально?
    -> Я не использую аппаратную смарт-карту, WCHAR szPin [] является необязательным значением?

Заранее спасибо.


person sliva    schedule 18.06.2020    source источник
comment
Вы зарегистрировали свой KSP с именем My Key Storage Provider?   -  person Frank    schedule 18.06.2020
comment
@Frank, я обновил вопрос, szCspName = Microsoft Sample Key Storage Provider, а имя KSP по умолчанию в реестре после сборки — также Microsoft Sample Key Storage Provider. Затем я проверил с помощью команды (symmclient -enum или certutil -csplist)   -  person sliva    schedule 19.06.2020
comment
@ Франк, я не использую LsaLogonUser, вместо этого я использую GetSerialization(): { ULONG ulAuthPackage; HRESULT hr = RetrieveNegotiateAuthPackage(&ulAuthPackage); ConstructAuthInfo(&pcpcs-›rgbSerialization, &pcpcs-›cbSerialization); pcpcs-›ulAuthenticationPackage = ulAuthPackage; pcpcs-›clsidCredentialProvider = CLSID_MyCredentialProvider; *pcpgsr = CPGSR_RETURN_CREDENTIAL_FINISHED; } Удалось ли вам использовать GetSerialization()?   -  person sliva    schedule 19.06.2020
comment
Да, есть, но я написал свой собственный KSP. В основном это сводится к этому вопросу и ответу: -provider" title="Провайдер хранилища ключей ksp не загружается при входе в систему через поставщика учетных данных">stackoverflow.com/questions/38398905/   -  person Frank    schedule 19.06.2020
comment
При упаковке структуры KERB_CERTIFICATE_LOGON вы должны установить правильное значение имени контейнера CspData, чтобы ключ мог быть идентифицирован KSP. Вы можете найти это с помощью certutil.   -  person Frank    schedule 19.06.2020
comment
Привет, @Frank, я попытался выполнить команду: certuril -csp Microsoft Sample Key Storage Provider -key, после чего вернул ошибку NTE_NOT_SUPORTED. Возможно, поэтому имя контейнера не может быть идентифицировано. Ранее я пытался использовать команду (Certutil -CSP Microsoft Sample Storage Provider -user -importPFX mycert.pfx) для импорта ключа в KSP, но возвращал ошибку. Есть ли способ импортировать или сохранить ключ от другого поставщика (например, поставщика хранилища ключей программного обеспечения Microsoft или Microsoft Enhanced Cryptographic Provider v1.0) в пользовательский KSP? В настоящее время пользовательский KSP не хранит никаких ключей.   -  person sliva    schedule 19.06.2020
comment
используйте команду certutil -csptest для получения дампа определенных возможностей провайдера. Я еще не просматривал пример кода, но, возможно, вы пытаетесь импортировать ключ с неподдерживаемыми функциями или перечисление ключей не реализовано в примере и поэтому возвращает NTE_NOT_SUPPORTED.   -  person Frank    schedule 19.06.2020
comment
@Frank, я успешно создал сертификат типа с поставщиком Microsoft Sample Key Storage Provider, а также получил контейнер ключей my_key_name из сертификата. Но я все еще не могу взаимодействовать со своим поставщиком учетных данных. Чтобы подтвердить каждую отладку, я поместил весь журнал в функцию, но почти никакая функция не вызывается.   -  person sliva    schedule 28.06.2020
comment
Нужны ли нам в образце KSP какие-либо специальные настройки для взаимодействия с поставщиком учетных данных? - Заранее спасибо.   -  person sliva    schedule 28.06.2020
comment
Да, я помню, что это тяжелая борьба, чтобы выяснить, что работает, а что нет. Не все методы в KSP вызываются при входе в систему. IIRC первый метод — это GetKeyStorageInterface, затем OpenProvider, затем OpenKey, несколько вызовов GetProviderProperty и GetKeyProperty и, наконец, SignHash. Если ни один из них не вызывается, вы должны дважды проверить свою конструкцию KERB_CERTIFICATE_LOGON. Это боль в заднице, чтобы получить эти относительные указатели правильно. Возможно, если бы вы могли поделиться полным кодом, где вы строите эту структуру, мы могли бы увидеть, где что-то идет не так.   -  person Frank    schedule 29.06.2020
comment
Да, я пытался ввести полный журнал в KSP, но функция не вызывалась. Я разместил свой код здесь: github.com/sliva1994/KSP-Custom/issues/1 -- И у меня есть вопрос, я вхожу в систему с доменом пользователя, нужно ли нам устанавливать значения в редакторе групповой политики (gpedit.msc)? -- Спасибо за поддержку.   -  person sliva    schedule 30.06.2020
comment
@Frank, я решил свою проблему, она связана с окружающей средой. Я успешно загрузил kSP, когда перешел на VMware и установил Windows 10 LTSC 2019 (версия 1809) (сборка ОС 1904). Странно, что раньше я использовал виртуалбокс и устанавливал винду (версия 2004, сборка ОС 17763), но это не сработало. Интересно, проблема связана с окном версии или с разницей между использованием virtualbox и vmware?   -  person sliva    schedule 01.07.2020
comment
Вы должны были упомянуть об этом с самого начала. В Windows 10 2004 есть неприятная ошибка. вам нужно оставить домен пустым (например, домен = L), иначе это вернет неверный параметр.   -  person Frank    schedule 01.07.2020