标签: smartcard

黑莓智能卡读卡器的例子

我正在为BlackBerry使用BlackBerry智能卡读卡器编写应用程序.没有太多关于这个主题的文档,所以我真的很想,如果有人能给我开始的例子.

基本上,卡上有一个RSA私钥和一个证书(用于配对的公钥).我希望能够加密/解密数据并对其进行签名.最终目标是使用智能卡上包含的客户端证书建立相互认证的SSL连接.

这是我到目前为止设法提出的代码:

SmartCardReader btReader = null;
SmartCardReader[] readers = SmartCardReaderFactory.getInstalledReaders();
for (int i = 0; i < readers.length; i++) {
    SmartCardReader reader = readers[i];
    if (reader.getType().equalsIgnoreCase("bluetooth")) {
        btReader = reader;
        break;
    }
}

SmartCardReaderSession readerSession = reader.openSession();
CryptoSmartCard card = (CryptoSmartCard) readerSession.getSmartCard();
RSACryptoToken token = (RSACryptoToken) card.getCryptoToken("RSA");
Run Code Online (Sandbox Code Playgroud)

token看起来很有希望 - 有一些很好的方法,但有"神秘"的论点.接下来做什么?

cryptography blackberry rsa smartcard smartcard-reader

52
推荐指数
1
解决办法
1602
查看次数

从通用浏览器访问智能卡的架构?或者:如何弥合从浏览器到PC/SC堆栈的差距?

从通用浏览器(通过http(s)连接到服务器),最好是从Javascript访问本地智能卡的可能的客户端架构有哪些,最终用户的安装麻烦最少?服务器需要能够至少向卡发出其选择的APDU(或者可能将其中的一部分委托给它生成的客户端代码).我假设在工作PC/SC堆栈的客户端可用,配有智能卡读卡器.自XP,现代OS X和Unix以来,至少在Windows上这是一个合理的假设.

到目前为止,我已确定了以下选项:

  1. 一些自定义ActiveX.这就是我现有的应用程序使用的(我们在内部开发),一旦获得安装ActiveX的许可,对IE的客户来说非常容易,但它与"通用浏览器"要求不匹配.
    更新:ActiveX主要由不推荐使用的IE支持,包括IE11; 但不是边缘.
  2. 一些PC/SC浏览器扩展使用Netscape Plugin API,这似乎是上面的平滑扩展.我找到的唯一现成的是SConnect,但它似乎还没有活着,它的API 文档(webarchive)不再正式提供,并且它与特定的智能卡供应商有很强的联系.原则可能很好,但为每个平台制作这样的插件将是很多工作.
    更新:许多浏览器都删除了NPAPI支持,包括Chrome和Firefox.
  3. 一个Java Applet,运行在Oracle的JVM(1.)6或更高版本之上,随附javax.smartcardio.从功能的角度来看,这很好,有充分的记录,我可以忍受一些已知的错误,但我害怕在接受Java-as-a-browser-extension时不可抗拒的向下螺旋.

还有其他想法吗?

另外:是否有某种方法可以防止浏览器滥用浏览器所拥有的任何PC/SC接口(例如,提供3个错误的PIN来阻止卡片,只是为了它的肮脏;或者制造一些更邪恶的东西).

cross-browser smartcard pcsc

52
推荐指数
4
解决办法
3万
查看次数

使用Java进行通用访问卡(CAC)身份验证

我正在寻找一个地方开始学习如何使用java与政府CAC卡接口.

最终,我的目标是找出如何使用CAC卡身份验证(通过PIN号码)授权访问使用Tomcat/J2EE服务器托管的网站.

但我需要从某个地方开始.所以我想我开始编写一个小的java程序来简单地从CAC卡读取CAC卡信息,CAC卡插入键盘上的读卡器(DELL键盘上带有CAC阅读器,位于数字键盘上方).

通过搜索谷歌,我发现了由OpenSSO项目取代的cacard java项目(https://cacard.dev.java.net/).但我似乎无法找到如何使用它连接到卡,从卡读取等的示例代码.

有谁知道我在哪里可以找到一些示例代码,以便我可以开始学习如何使用java与CAC卡进行交互?

谢谢

编辑:

在研究了更多之后,我在想,我能够只clientAuth="true"server.xml文件中的连接器元素中设置吗?

http://tomcat.apache.org/tomcat-6.0-doc/ssl-howto.html

clientAuth:如果希望Tomcat要求所有SSL客户端提供客户端证书以使用此套接字,请将此值设置为true.

java smartcard cac

27
推荐指数
2
解决办法
4万
查看次数

问题阅读智能卡

我的读者哪个文档几乎与此一样:http://www.jinmuyu.com/download/JMY680A_EN.pdf 主要区别在于,我的读者声称它也支持TYPE B卡.

我有三张ISO 14443卡,我连续测试,并遵循以下代码:

   byte[] rs = null;

   Thread.Sleep(500);

   // Set module Idle 
   Random r = new Random();
   byte rInt = (byte) r.Next(0, 255);
   rs = send(new byte[] { 0x12, rInt });
   if (rs[1] == 0xED)
       throw new Exception("Failed set idle");

   Thread.Sleep(500);

   //// Request B
   //rs = send(new byte[] { 0x60, 0x00, 0x00 });
   //if (rs[1] == 0x9F)
   //    throw new Exception("Failed card requestB"); 

   // RequestA
   rs = send(new byte[] { 0x20, 0x00 });
   if (rs[1] …
Run Code Online (Sandbox Code Playgroud)

.net c# serial-port smartcard

25
推荐指数
1
解决办法
1535
查看次数

从Web浏览器访问智能卡读卡器?

是否可以从运行在同一台机器上的Web浏览器访问连接到计算机的智能卡读卡器,即从ActionScript,JavaScript或其中运行的任何脚本?

例如,我flash.external.ExternalInterface在ActionScript中阅读了有关该类的内容.它可以用于访问智能卡读卡器还是Sandbox难以穿透?

javascript browser actionscript-3 smartcard smartcard-reader

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

从Linux 64位访问javax.smartcardio

我正在尝试使用javax.smartcardio API加载智能卡终端,代码如下:

public CardTerminal getReadyCardTerminal() throws CardException {

    TerminalFactory factory = TerminalFactory.getDefault();
    CardTerminals terminals = factory.terminals();
    List<CardTerminal> list = terminals.list(State.CARD_PRESENT);

    while (list.isEmpty()) {
        terminals.waitForChange(1000);
        list = terminals.list(State.CARD_PRESENT);
    }
    CardTerminal cardTerminal = list.get(0);
    return cardTerminal;
}
Run Code Online (Sandbox Code Playgroud)

...而且我总是得到以下异常:

java.lang.IllegalStateException: no terminals
at javax.smartcardio.TerminalFactory$NoneCardTerminals.waitForChange(TerminalFactory.java:145)
Run Code Online (Sandbox Code Playgroud)

在Windows Vista/7上一切正常,但我不能让它在Linux上运行.我正在使用Ubuntu 12.04 64位.

我使用以下命令安装了pcscd服务:

sudo apt-get install libccid pcscd libpcsclite-dev libpcsclite1
sudo service pcscd start
Run Code Online (Sandbox Code Playgroud)

pcsc_scan命令打印出来:

PC/SC device scanner
V 1.4.18 (c) 2001-2011, Ludovic Rousseau <ludovic.rousseau@free.fr>
Compiled with PC/SC lite version: 1.7.4
Using reader plug'n play mechanism
Scanning …
Run Code Online (Sandbox Code Playgroud)

java smartcard pcsc

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

如何用pyscard写智能卡

我正在使用读写器acr38f,我的智能卡是SLE4418.如何读取和写入智能卡的文本?

例如: Hello World!

apdu = [0XFF,0X20,0x00,0x00,0x02,0x00,0x00]

响应,sw1,sw2 = cardservice.connection.transmit(apdu)

apdu = [0XFF,0xA4,0x00,0x00,0x01,0x05]
response, sw1, sw2 = cardservice.connection.transmit( apdu )




apdu = [0XFF,0XB2,0X00,0xA7,0X09]
response, sw1, sw2 = cardservice.connection.transmit( apdu )
print response


apdu = [0XFF, 0XD0,0x00,0xA7,0x09,0xA7,0x02,0xA7,0x02,0xA7,0x02,0xA7,0x02,0xA7] 
response, sw1, sw2 = cardservice.connection.transmit( apdu )
Run Code Online (Sandbox Code Playgroud)

卡响应:

connecting to ACS CCID USB Reader 0
ATR 3B 04 92 23 10 91
>  FF 20 00 00 02 00 00
<  00 00 00 90 0 
>  FF A4 00 00 01 05
< …
Run Code Online (Sandbox Code Playgroud)

python smartcard

21
推荐指数
1
解决办法
9493
查看次数

启动智能卡编程

如何开始使用智能卡编程?我在这里问他需要的所有工具包才能入门:书籍,教程,硬件等.

我打算和几个智能卡程序员一起玩,我对这个领域很陌生.

编辑:我最感兴趣的是那些与类Unix操作系统兼容的程序员.此外,我不确定这是如何工作的...但我想用C/C++编程

c c++ unix smartcard

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

智能卡读卡器,无法读取一些卡

我有一个使用智能卡读卡器的应用程序允许用户访问系统的各个部分.在一个地方我没有问题.但是另一种具有不同类型的卡制造商的问题存在很多问题.它不断获得零回报.然后查看事件日志,我看到了这个: 在此输入图像描述 这是代码:

 card.Connect(reader, SHARE.Shared, PROTOCOL.T0orT1);

 var apduGetID = new APDUCommand(0xFF, 0xCA, 0, 0, null, 4);
 var apduRespGetID = card.Transmit(apduGetID);
long cardId = BitConverter.ToUInt32(apduRespGetID.Data.Reverse().ToArray(), 0);
Run Code Online (Sandbox Code Playgroud)

第二个问题是,然后尝试调试代码,它工作完美,只有删除断点,我可以看到问题,但不是在哪里.有人可以帮帮我吗?

PS我找到了这个帖子,但它不起作用:https://superuser.com/questions/715688/smart-card-errors

更新:这是Transmit类

 public override APDUResponse Transmit(APDUCommand ApduCmd)
        {
            var RecvLength = (uint)(ApduCmd.Le + APDUResponse.SW_LENGTH);
            byte[] ApduBuffer;
            var ApduResponse = new byte[ApduCmd.Le + APDUResponse.SW_LENGTH];
            var ioRequest = new SCard_IO_Request
            {
                m_dwProtocol = m_nProtocol,
                m_cbPciLength = 8
            };

            // Build the command APDU
            if (ApduCmd.Data == null)
            {
                ApduBuffer = new byte[APDUCommand.APDU_MIN_LENGTH + ((ApduCmd.Le …
Run Code Online (Sandbox Code Playgroud)

c# smartcard

19
推荐指数
1
解决办法
1611
查看次数

在Windows上访问智能卡时重用Java Keystore

我正在开发一个使用SUNMSCAPI访问智能卡(电子ID)并检索一些证书的应用程序.

一段时间之前,我可以创建密钥库并签署文件列表,而无需重新创建密钥库,但现在我只能一次签署一个文件.

签署文件列表时,第一个文件正确签名; 在签署第二个文件时,我得到一个"插入智能卡"对话框,正在使用的智能卡是灰色的.

有没有人见过这种行为?

java windows api cryptography smartcard

18
推荐指数
1
解决办法
795
查看次数