我正在尝试将为C#完成的一些功能复制到Java中。我已经在这个问题上苦苦思索了好几天,不知道我需要什么博士才能用Java完成这个任务。我正在使用智能卡身份验证,我已经阅读了很多关于这个主题的文章。我已经能够连接到阅读器,让它告诉我什么时候插入/删除了什么(简单的示例),以及它发生的阅读器的名称。但是,在从卡中获取证书时,我找不到任何东西。我记得在大学里有很多关于汇编语言的例子,但没有任何有用的东西来实现这个目标。作为参考,这段简单的代码是从各种示例中拼凑而成的,它恰好满足了我在C#中所需要的内容
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来查看证书,并且能够在那里找到我需要的内容,我只需要能够将其与插入的卡进行匹配,以启用基于角色的选项。
发布于 2021-08-26 23:43:04
你在作弊:你似乎在使用一张安装了CSP的智能卡。该中间件知道如何访问智能卡并对其执行操作。
标准化的/ Java等效项是为智能卡提供一个PKCS#11库,并使用Java PKCS#11 provider来访问它。当然,您也可以使用`SunMSCAPI提供程序来访问Windows上的密钥/证书存储。
如果您没有这些,那么您可能需要使用SmartCardIO库并直接访问您的智能卡。但是,在这种情况下,您需要知道智能卡的特定格式。如果它使用通用的方法来定位密钥和证书(例如ISO7816-15,以前称为PKCS#15),那么可以使用库来直接访问证书和使用私钥。
发布于 2021-09-13 16:30:50
放弃了,并对call /C++进行了JNI调用,至少他们知道如何处理请求。
https://stackoverflow.com/questions/68946283
复制相似问题