0

我们正在使用 Visual Studio 2019 开发 C# UWP 应用程序。我已成功设置监控正在从 USB 端口插入/移除的 YubiKey FIPS(4.4.5 固件)。我们将 YubiKey 设置为使用 PIV,并将证书加载到插槽 9c(使用 YubiKey PIV 管理器,我没有安装迷你驱动程序)。我确实注意到,当 YubiKey 插入 USB 时,它会使用插槽 9c 中的证书自动加载我的个人证书存储。我们收到来自服务器的质询,我需要使用它来验证 YubiKey。从插槽 9c 获取证书的下一步是什么(如果该密钥上有多个证书怎么办)?Yubico 没有显示如何将密钥与应用程序集成的示例(我不相信 Windows Hello 在这里适用,不是吗?)。我们正在尝试使用 Windows.Devices。智能卡命名空间。这个命名空间似乎没有槽的概念。这是正确的方向还是我们需要使用 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?
       }
    }
}
4

2 回答 2

0

要直接访问智能卡或 USB 令牌内容(如插槽、其中的密钥),您可能需要使用 PKCS#11。

但是,由于您说智能卡驱动程序 (CSP) 正在将智能卡内容加载到 Windows 证书存储区,因此您可以使用 Windows.Security、X509 证书和 RSA Provider(我不记得确切的 .NET 命名空间......)来提供签名请求使用 RSAProvider 和 CSP 会反过来将该请求发送到智能卡。许多人不需要直接访问智能卡进行签名。

基于浏览器的用户认证,请参考so answer

于 2020-05-23T00:39:33.267 回答
0

Windows 智能卡组件(包括Windows 收件箱智能卡微型驱动程序和Yubico 微型驱动程序)不直接实现支持的 PIV 概念,如插槽或对象。相反,微型驱动程序扫描 PIV 插槽并将任何现有密钥转换为“密钥容器”,这就是 Windows 处理私钥和证书的方式。Certificate Store 中的每个证书都有一个关联的密钥容器,但由于它没有 PIV 的概念,因此已抽象出诸如密钥引用槽之类的细节。

与大多数内置 Windows 组件一样,该应用程序不直接与智能卡对话,而是使用证书传播服务添加到个人存储中的证书。

如果您使用证书管理器 (certmgr.msc) 检查用户的个人存储,证书属性应该有一个注释,说明您有一个与证书关联的私钥。

要使用私钥进行签名加密,应用程序会从个人存储中获取证书,并将适当的 .NET CSP 与该证书一起使用。

通常,UWP 应用具有有限的本机互操作功能,并依赖于使用智能卡密钥存储提供程序 (KSP) 的基本 API,以便稍后通过 CNG 接口调用。

下面是使用 UserCertificateStore 与用户的个人证书存储中的证书进行交互的示例。

然后,您可以将该证书与您最喜欢的 CSP 软件库一起使用来签名或加密。这里举几个例子。

于 2020-05-27T16:40:55.187 回答