需要UWP应用PIV实例

问题描述 投票:0回答:1

我们正在使用Visual Studio 2019开发一个C# UWP应用程序。 我已经成功地设置了对YubiKey FIPS(4.4.5固件)从USB端口插入removed的监控。 我们设置YubiKey使用PIV,并已将证书加载到插槽9c中(使用YubiKey PIV管理器,我没有安装迷你驱动程序)。 我注意到,当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?
       }
    }
}
c# uwp smartcard yubico
1个回答
0
投票

Windows智能卡组件(包括 Windows收件箱智能卡迷你驱动Yubico minidriver)没有直接实现支持的PIV概念,比如插槽或对象。取而代之的是,minidriver扫描PIV插槽并将任何存在的密钥转换为 "密钥容器",这就是Windows处理私钥和证书的方式。证书库中的每个证书都有一个相关的密钥容器,但由于它没有PIV的概念,所以像密钥参考槽这样的细节已经被抽象掉了。

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

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

标志加密 与私钥,应用程序从个人存储中获取证书,并使用该证书的相应.NET CSP。

一般来说,UWP应用程序的原生互操作能力有限,需要依靠使用智能卡密钥存储提供商(KSP)的基本API,以后再通过CNG接口调用。

下面是一个 例子 使用UserCertificateStore与用户个人证书库中的证书进行交互。

然后,你可以使用该证书与你最喜欢的CSP软件库进行签名或加密。以下是几个例子 此处.


1
投票

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

但既然你说智能卡的内容是由智能卡驱动程序(CSP)加载到Windows证书存储中的,你可以使用Windows.Security、X509证书和RSA Provider(我不太记得.NET的命名空间了......)来使用RSAProvider发出签名请求,然后CSP再将该请求发送给智能卡。你通常不需要直接访问智能卡进行签名。

对于基于浏览器的用户认证,请参考 于是回答

© www.soinside.com 2019 - 2024. All rights reserved.