Необходим пример PIV приложения UWP

Мы разрабатываем приложение C # UWP с использованием Visual Studio 2019. Я успешно настроил мониторинг YubiKey FIPS (прошивка 4.4.5), вставляемого / удаляемого из USB-порта. Мы настроили YubiKey для использования PIV и загрузили сертификат в слот 9c (используя YubiKey PIV Manager, я не установил мини-драйвер). Я отмечаю, что когда YubiKey вставлен в USB, он автоматически загружает мое личное хранилище сертификатов с сертификатом, который находится в слоте 9c. Мы получаем запрос от нашего сервера, и мне нужно использовать его для проверки YubiKey. Каков следующий шаг для получения сертификата из слота 9c (что, если у вас есть несколько сертификатов на этом ключе)? У Yubico нет примера, показывающего, как интегрировать ключ с приложением (я не верю, что Windows Hello здесь применима, нет?). Мы пытаемся использовать пространство имен Windows.Devices.SmartCards. В этом пространстве имен, похоже, нет концепции слотов. Это правильное направление или нам нужно использовать библиотеки Yubico (мини-драйвер), я не в курсе. Документация ограничена.

var yubiKeys = Readers.Where(r => r.Value.Name.Contains("Yubi", StringComparison.OrdinalIgnoreCase));

foreach (KeyValuePair<string, SmartCardReader> item in yubiKeys)
{
    IReadOnlyList<SmartCard> cards = await item.Value.FindAllCardsAsync();

    foreach(SmartCard card in cards)
    {
       SmartCardProvisioning prov = await SmartCardProvisioning.FromSmartCardAsync(card);

       using (SmartCardChallengeContext context = await prov.GetChallengeContextAsync())
       {
            IBuffer yubiKeyChallenge = context.Challenge;  // IS THIS THE CARDS ADMIN PIN?

            // Challenge to acquire cert here perhaps?
            // the card object has no concept of slots, would each slot be a card in the reader?
            // if so, how would I use the Challenge for that card?
       }
    }
}

person ByronH    schedule 27.04.2020    source источник


Ответы (2)


Компоненты смарт-карты Windows (включая Минидрайвер смарт-карты Windows Inbox и Минидрайвер Yubico) напрямую не реализуют поддерживаемые концепции PIV, такие как слоты или объекты. Вместо этого минидрайвер сканирует слоты PIV и преобразует имеющиеся ключи в «контейнеры ключей», как Windows работает с закрытыми ключами и сертификатами. Каждый сертификат в хранилище сертификатов имеет связанный контейнер ключей, но, поскольку он не имеет понятия PIV, такие детали, как слот ссылки на ключ, были абстрагированы.

Как и большинство встроенных компонентов Windows, приложение не взаимодействует со смарт-картой напрямую, вместо этого оно использует сертификат, который служба распространения сертификатов добавляет в личное хранилище.

Если вы проверяете личное хранилище пользователя с помощью диспетчера сертификатов (certmgr.msc), в свойствах сертификата должно быть указано, что у вас есть закрытый ключ, связанный с сертификатом.

Чтобы подписать или зашифровать с помощью закрытого ключа, приложение получает сертификат из личного хранилища и использует соответствующий .NET CSP с этим сертификатом.

Как правило, приложения UWP имеют ограниченные собственные возможности взаимодействия и полагаются на использование элементарных API-интерфейсов поставщика хранилища ключей смарт-карт (KSP), которые впоследствии будут вызываться через интерфейс CNG.

Вот пример использования UserCertificateStore для взаимодействия с сертификаты в личном хранилище сертификатов пользователя.

Затем вы можете использовать этот сертификат с вашей любимой программной библиотекой CSP для подписи или шифрования. Несколько примеров можно найти здесь.

person Dennis H    schedule 27.05.2020

Чтобы получить доступ к смарт-карте или содержимому токена USB, например к слотам и ключам, вам может потребоваться напрямую использовать PKCS # 11.

Но поскольку вы сказали, что содержимое смарт-карты загружается драйвером смарт-карты (CSP) в хранилище сертификатов Windows, вы можете использовать Windows.Security, сертификаты X509 и поставщик RSA (я точно не помню пространства имен .NET ...), чтобы отправить запрос на подпись использование RSAProvider и CSP, в свою очередь, отправит этот запрос на смарт-карту. Многим не нужно напрямую обращаться к смарт-карте для подписания.

Информацию об аутентификации пользователя на основе браузера см. На странице так ответьте

person Bharat Vasant    schedule 23.05.2020
comment
Возможно, вам не потребуется доступ к смарт-карте напрямую для подписи. - Верный. Приложение получает сертификат из личного магазина, а затем может использовать PKCS # 11 для подписи. - person Dennis H; 27.05.2020