首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java SmartCard标识

Java SmartCard标识
EN

Stack Overflow用户
提问于 2021-08-26 23:11:17
回答 2查看 65关注 0票数 1

我正在尝试将为C#完成的一些功能复制到Java中。我已经在这个问题上苦苦思索了好几天,不知道我需要什么博士才能用Java完成这个任务。我正在使用智能卡身份验证,我已经阅读了很多关于这个主题的文章。我已经能够连接到阅读器,让它告诉我什么时候插入/删除了什么(简单的示例),以及它发生的阅读器的名称。但是,在从卡中获取证书时,我找不到任何东西。我记得在大学里有很多关于汇编语言的例子,但没有任何有用的东西来实现这个目标。作为参考,这段简单的代码是从各种示例中拼凑而成的,它恰好满足了我在C#中所需要的内容

代码语言:javascript
复制
      public static X509Certificate2 GetCertFromCard()
      {
         string magicString = magicString = "Microsoft Base Smart Card Crypto Provider";
         CspParameters cspParameters =  new CspParameters(1, magicString)
         RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider(cspParameters);
         string pubKeyXml = rsaProvider.ToXmlString(false);
         X509Store x509Store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
         x509Store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);

         foreach (X509Certificate2 cert in x509Store.Certificates)
         {
            if ((cert.PublicKey.Key.ToXmlString(false) == pubKeyXml) && cert.HasPrivateKey)
            {
               return cert;
            }
         }

         return null;
      }

显然,这并不是什么新鲜事和独特之处。我不想在这里做任何革命性的事情,所以你不需要成为一名火箭外科医生来解决这个问题。

我已经能够访问机器上的KeyStore来查看证书,并且能够在那里找到我需要的内容,我只需要能够将其与插入的卡进行匹配,以启用基于角色的选项。

EN

回答 2

Stack Overflow用户

发布于 2021-08-26 23:43:04

你在作弊:你似乎在使用一张安装了CSP的智能卡。该中间件知道如何访问智能卡并对其执行操作。

标准化的/ Java等效项是为智能卡提供一个PKCS#11库,并使用Java PKCS#11 provider来访问它。当然,您也可以使用`SunMSCAPI提供程序来访问Windows上的密钥/证书存储。

如果您没有这些,那么您可能需要使用SmartCardIO库并直接访问您的智能卡。但是,在这种情况下,您需要知道智能卡的特定格式。如果它使用通用的方法来定位密钥和证书(例如ISO7816-15,以前称为PKCS#15),那么可以使用库来直接访问证书和使用私钥。

票数 3
EN

Stack Overflow用户

发布于 2021-09-13 16:30:50

放弃了,并对call /C++进行了JNI调用,至少他们知道如何处理请求。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68946283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档