标签: smartcard

C#智能卡编程

我应该如何开始使用C#(.NET)编程智能卡?首先我只需要知道,读卡器的名称是什么(例如Omnikey)并将其打印出来.

感谢答案,Ales.

c# smartcard

8
推荐指数
1
解决办法
3万
查看次数

如何使用Netbeans模拟Java卡小程序?

我是Java Card Programming(使用netbeans)的新手.我在Java Card Development Quick Start页面中做了所有事情,我创建了一个经典的卡片小程序,并尝试模拟它.但是当我尝试在设备控制台上模拟并发送命令时,它会发送错误

"Connection refused: connect".

我不明白,有什么不对.

有什么建议?

这是它的屏幕截图:

错误的屏幕截图

netbeans smartcard javacard

8
推荐指数
1
解决办法
4138
查看次数

智能卡终端删除:SCARD_E_NO_SERVICE CardException

我正在开发一个smartcardio用于处理智能卡的Java应用程序.必须有一个可以移除其USB读卡器,然后再次插入它而无需再次启动小程序.

我正在使用terminals()waitForChange()方法来检测终端更改,它在Linux,MacOS和Win7上运行良好.

但是在Windows 8(仅限Windows 8)上,删除最后一个终端后,这些方法抛出一个SCARD_E_NO_SERVICE CardException,并且不再检测到任何更改.

我不确定它所说的"服务"是什么.但是当我打电话TerminalFactory.getDefault()给一个TerminalFactory单身人士时,我认为这是在我的主题中启动的.而且我认为这个单例可能有办法管理底层服务,这就是被打破的.

有没有人smartcardio在Windows 8 上如何管理终端断开?

java smartcard pcsc windows-8

8
推荐指数
1
解决办法
4097
查看次数

是否可以在NFC卡中实现令牌队列?

这个问题专门与MIFARE Ultralight C / EV1或MIFARE DESFire EV1甚至NTAG卡有关。我想实现一个令牌系统,以便普通用户每次读取其中一张卡时,都会得到一个可用的令牌。该令牌将从他们正在读取的NFC卡中“弹出”。换句话说,每次读取NFC芯片时,它将从卡的存储中发出不同的可用令牌。这可能实现吗?

rfid smartcard nfc mifare contactless-smartcard

8
推荐指数
1
解决办法
247
查看次数

Java SmartCard IO上的奇怪无效CLA命令(6E 00)

我正在编写一个智能卡应用程序,并在成功选择带有AID的应用程序后,发送获取处理选项

我得到6E 00作为响应 - 无效的CLA命令.这是发送命令并接收响应的代码的一部分:

ResponseAPDU rapdu = sendCommand(new byte[]{(byte)0x80, (byte)0xA8, (byte)0x00, (byte)0x00, (byte)0x02, (byte)0x83, (byte)0x00, (byte)0x00});

private ResponseAPDU sendCommand(byte[] apdu) throws CardException{
    CommandAPDU capdu = new CommandAPDU(apdu);         
    ResponseAPDU rpd = channel.transmit(capdu);

    return rpd;
}
Run Code Online (Sandbox Code Playgroud)

我正在使用相同的命令使用Jaccal库读取卡片并且它工作正常,但由于它使用了外部dll文件,因此jaccal不适合我的应用程序.我不知道为什么它会给我这种回应.

smartcard javacard

7
推荐指数
2
解决办法
2656
查看次数

使用智能卡的SSL客户端身份验证在Java 6中工作,但在Java 7中失败

以下代码使用PKCS#11设备(智能卡)创建客户端身份验证的SSL上下文.这一切都适用于Java 6:

// Configure the SunPkcs11 provider
String pkcs11config;
pkcs11config = "name = Cryptoki";
pkcs11config += "\nlibrary = /SCDriver/libbit4ipki.dylib";
InputStream confStream = new ByteArrayInputStream(pkcs11config.getBytes());
SunPKCS11 sunpkcs11 = new SunPKCS11(confStream);
Security.addProvider(sunpkcs11);

// Specify keystore builder parameters for PKCS#11 keystores
Builder scBuilder = Builder.newInstance("PKCS11", sunpkcs11, new KeyStore.CallbackHandlerProtection(new PasswordRetriever()));

// Create and init KeyManagerFactory
KeyManagerFactory factory = KeyManagerFactory.getInstance("NewSunX509");
factory.init(new KeyStoreBuilderParameters(scBuilder));

// create and init ssl context
m_ssl_context = SSLContext.getInstance("TLS");
m_ssl_context.init(factory.getKeyManagers(), new TrustManager[] {new PkTrustManager()}, null);      
SSLContext.setDefault(m_ssl_context);
Run Code Online (Sandbox Code Playgroud)

PkTrustManager仅仅是和"空"类,服用任何服务器/客户端证书为好,并PasswordRetriever刚刚经历一个对话框,询问密码(要求我发布这些源代码).在Java 7上,我在ssl上下文的SSL握手期间得到以下异常:

java.security.InvalidKeyException: …
Run Code Online (Sandbox Code Playgroud)

authentication ssl smartcard pkcs#11 java-7

7
推荐指数
1
解决办法
4642
查看次数

在Android中开发智能卡读卡器

我们开发了一个带有微控制器的原型板,它可以与SmartCard通信(它可以读取ATR,发出和读取对APDU命令的响应等).现在我想将这个硬件与Android手机或平板电脑一起使用.我们的电路板具有USB连接,通过它我们可以通过Android读取和写入MCU.

最终目标是在支持PKCS#11的Android平台上安装功能强大的智能卡读卡器,并为SmartCard读卡器的最终用户提供库,以便他们可以与卡进行通信.

我已经阅读了几个关于这个主题的讨论,其中一些讨论说我必须构建一个自定义Android才能做到这一点.我不熟悉Android架构,了解为什么当我可以通过USB与外围设备(读卡器)通信时,我必须重新构建Android.在我看来,如果我提供一个实现类似CCID接口的库,用户可以通过将我的库集成到他们的目标.apk文件,使用Android USB堆栈与我的阅读器进行通信.

我们不知道上述计划有什么问题吗?我担心我们缺少一些关于Android或SmartCard读卡器的基本信息(例如:安全性),这会在我们开始实施上述库时给我们带来问题.

usb android apdu smartcard

7
推荐指数
1
解决办法
2533
查看次数

为什么在使用 RDP 时找不到远程智能卡

我正在使用 Windows Server 2008 R2,它运行一个在本地使用智能卡的 VB6.0 应用程序。

然后我使用远程桌面连接 (6.3) 远程连接到这台机器。但是现在应用程序显示以下错误(智能卡):

0x8010001d 智能卡资源管理器未运行。

迄今为止的研究——

  • 我不想使用重定向,因为卡已经在远程机器上。
  • 以我尝试使用它的方式使用 RDP 是错误的,而tightVNC 更合适(这确实解决了问题)
  • 不确定 - SCardEstablishContext API 正在返回该错误,因为它在尝试使用 OpenEvent API 打开名为“Global\Microsoft Smart Card Resource Manager Started”的事件时收到拒绝访问错误。Vista 和 Windows 7 上该事件的默认安全性指定只有 SYSTEM、LOCAL SERVICE 和 INTERACTIVE 用户可以访问它。NETWORK SERVICE 或非交互式用户将无法访问该事件。

为什么智能卡不被识别?

任何信息,将不胜感激。

注意:当应用程序在 Windows Server 2008 R2 上时,智能卡工作正常 - 但是只有在远程连接时才会失败。

vb6 remote-desktop smartcard

7
推荐指数
1
解决办法
2万
查看次数

哪些对象在 Java Card 中是持久的?何时?

这个问题是双重的,但希望回答起来不会太长,尽管它本身很长。不过,请随意回答其中的一部分,很抱歉使它如此详尽!

  • 哪些对象被持久化?哪些对象是瞬态的?
  • 对象什么时候被持久化?

对于第一部分,问题适用于:

  • 存储在一个对象中的对象Applet
  • 传递存储在一个对象中的对象Applet
  • 仅存储在堆栈变量中的对象(不从任何引用,即使是传递性引用Applet
  • 存储在使用以下命令构建的数组中的对象makeTransientObjectArray
  • 传递存储在数组中的对象makeTransientObjectArray(例如,存储在 a 中存储的对象的成员变量中makeTransientObjectArray

对于第二部分,它的适用取决于第一个问题的答案。例如:

  • 我假设直接存储在瞬态对象数组中的对象不会被持久化。在这种情况下,假设堆栈上的对象被持久化,那么存储在那里的对象什么时候变得不持久?new Object当放入瞬态对象数组时,它是持久化的还是非持久化的?
  • 如果一个对象同时具有来自瞬态对象数组和小程序的引用,并且小程序引用被删除,那么该对象是否会被取消持久化?

先感谢您!


我已经研究了 JCRE 规范 v2.2.2 (我正在使用的版本),但其中有一些不清楚的地方(因此这个问题很详尽,因为我觉得这更适合 Q/A 风格论坛):

  • 第 2-2 页提到,当对象以传递方式存储在Applet. 然而,Glossary-7 指出对象默认是持久的。这种差异可能看起来不可观察,但无论如何都会影响卡电源循环时是否需要进行垃圾收集。
  • 第 5-1 页指出,瞬态对象的字段决不能存储在持久内存中。但它没有说明这对于瞬态对象数组中的传递对象是否也适用,例如。存储在瞬态对象数组中的对象字段中的对象。
  • 当一个对象的引用同时存储在瞬态对象数组和Applet.

这三个问题分别相当于:

  • 第 1 部分要点 3 和 5(以及第 2 部分要点 1,具体取决于答案)
  • 第 1 部分要点 5
  • 第 2 部分要点 2

java smartcard javacard

7
推荐指数
1
解决办法
1191
查看次数

如何使用位于具有不可导出私钥的智能卡上的证书创建 SSL 上下文?

我正在尝试使用请求库连接到需要提供客户端证书的服务器。我可以获得证书,但不能获得私钥。

我能够从智能卡中提取证书(使用加密库加载通过 pkcs11 访问的 x509 证书),并且我能够以请求期望的 PEM 格式序列化这些证书。pkcs11 还提供对卡上私钥的访问;我可以使用它们来执行签名或解密等操作。但是,由于它们被标记为不可导出(这是有道理的,毕竟它们是私钥),因此我无法将它们序列化为文件以在创建 SSL 上下文时提供。

我已经看到用 Java 编写的这个问题的解决方案,其中访问卡上的密钥库/密钥管理器,并且密钥以这种方式与上下文相关联,但我还没有找到一种在 Python 中这样做的方法。

编辑:这是在 Windows 机器上完成的。我也尝试过使用 M2Crypto 库,但是我无法成功安装该库(即使使用 M2CryptoWin64)。

import pkcs11
from pkcs11.constants import ObjectClass
from pkcs11.mechanisms import KeyType, Mechanism
from cryptography import x509
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.serialization import Encoding

lib = pkcs11.lib("path/to/pkcs11/dll")
slots = lib.get_slots(token_present=True)
token = slots[0].get_token()
with token.open(rw=True, user_pin="1234") as session:
    attrs = {
        pkcs11.Attribute.CLASS: ObjectClass.CERTIFICATE
    }
    certs = tuple(session.get_objects(attrs))
    x509cert = x509.load_der_x509_certificate(certs[0][pkcs11.Attribute.VALUE], default_backend())
    with open("cert_file", 'wb') as certfile:
        certfile.write(x509cert.public_bytes(Encoding.PEM))

     r = …
Run Code Online (Sandbox Code Playgroud)

authentication ssl smartcard python-3.x

7
推荐指数
0
解决办法
563
查看次数