标签: pcsc

从通用浏览器访问智能卡的架构?或者:如何弥合从浏览器到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万
查看次数

从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万
查看次数

在TypeScript中需要JavaScript Node.js模块(未设置allowJs')

我在Electron里面有一个Angular2应用程序.现在,我想使用该@pokusew/pcsclite库来使用NFC功能.该库使用本机Node.js模块.

当我尝试在我的component.ts中要求库时,如下所示:

declare var pcsclite: any;
var pcsclite = require('../../../node_modules/@pokusew/pcsclite/');
Run Code Online (Sandbox Code Playgroud)

我得到并且错误说:

错误TS6143:模块'../ ..'被解析为'../../lib/pcsclite.js',但未设置' - allowJs'.

另一方面,如果我尝试通过index.html中的<\ script> -Tag导入库,我会收到一条错误消息:

ZoneAwareError错误:找不到绑定文件.尝试:...

最后,如果我var pcsclite = require('@pokusew/pcsclite');main.js,那么它可以工作,但是我无法从我的Angular应用程序中访问它.

javascript pcsc typescript electron angular

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

ACR122 USB SDK - JNI调用Winscard.dll

我们已经购买了用于NFC测试的ACR122 USB SDK.我们想为ACR122U-A2 NFC读卡器构建测试桌面应用程序.我们正在Microsoft Windows 7平台上用Java开发它.

我们希望为了使用Winscard.dll中的PC/SC,我们需要进行JNI调用.为了做到这一点,应该准备用于JNI调用的C/C++包装器库.

我认为这应该是SDK的一部分,因为示例应用程序引用了JNI包装器Jacspcsc.dll,但是库不存在.有没有类似的经历?Winscard.dll是否有可用的JNI包装器?

谢谢STeN

java java-native-interface rfid nfc pcsc

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

智能卡终端删除: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
查看次数

通过Android USB主机与智能卡读卡器通信

我正在尝试向智能卡发送命令.我使用Gemalto IDBridge CT30(PC TWIN阅读器)和通过USB连接到Android设备的IDBridge K30.

我尝试通过USB发送SELECT APDU命令:

boolean claim = openedConnection.claimInterface(usbInterface, true);
byte[] data = new byte[]{
        (byte) 0x00, (byte) 0xA4, (byte) 0x04, (byte) 0x0C,
        (byte) 0x07, (byte) 0xA0, (byte) 0x00, (byte) 0x00,
        (byte) 0x01, (byte) 0x18, (byte) 0x45, (byte) 0x4E};
Run Code Online (Sandbox Code Playgroud)

之后我收到了答案:

final int dataTransferred = this.openedConnection.bulkTransfer(endPointOut, data, data.length, TIMEOUT_MS);
if(!(dataTransferred == 0 || dataTransferred == data.length)) {
    throw new Exception("Error durring sending command [" + dataTransferred + " ; " + data.length + "]"); //$NON-NLS-1$ …
Run Code Online (Sandbox Code Playgroud)

usb android smartcard pcsc smartcard-reader

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

编程PC/SC读卡器时的ATR命令

我已经检查了MIFARE Ultralight和TOPAZ/Jewel IC标签的编程接口.API很好地描述了如何在卡上保存字节,如何寻址存储器块,如何进行所有操作,如读取,读取,使用OTP(一次性可编程)功能,如何读取ROM字节,如何从空闲切换到就绪状态(REQA,WUPA命令),它表示命令是否受CRC保护,如何访问标签UID等.

当我开始编程NFC阅读器(ACR122U或SCL010)时,我发现PCD(阅读器)和PICC(标签)之间的所有通信都是从ATR(应答复位)命令开始的,这是在Internet上所描述的命令PCD发送给PICC用于识别目的.

但是没有一个标签文档提到ATR命令 - 所有与标签通信时的通信(PQR)都以REQA,WUPA命令开始,以便将卡切换到就绪模式.

我的理解是ATR是由PC/SC基于读卡器与之通信的NFC卡构建的.一旦读者检测到基于它的标签是什么类型的技术,就会创建ATR.另外根据文档,针对不同NFC读取器的ATR对于相同的NFC标签是不同的.

我对吗?PC/SC是否构建了ATR?

BR STeN

smartcard nfc pcsc smartcard-reader mifare

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

使用WinSCard获取PCSC阅读器序列号

如果读卡器中没有卡,我在获取PCSC阅读器序列号时遇到问题.我正在使用winscard.dll和c ++.

以下代码仅适用于读卡器中存在卡的情况.否则,不会检索SCardHandle.我还没有找到任何其他方法来获得SCardHandle.

SCARDHANDLE hCardHandle;
SCARDCONTEXT    hSC;
WCHAR   pCardReaderName[256];
LONG lReturn;

lReturn = SCardEstablishContext(SCARD_SCOPE_USER, 0, 0, &hSC);

if (lReturn != SCARD_S_SUCCESS)
{
    Console::WriteLine("SCardEstablishContext() failed\n");
    return;
}

my_select_reader(hSC, pCardReaderName); // just shows reader names in console and requires you to pick one

// connect to smart card
DWORD   dwAP;

lReturn = SCardConnect( hSC,
                (LPCWSTR)pCardReaderName,
                SCARD_SHARE_SHARED,
                SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1 | SCARD_PROTOCOL_RAW,
                &hCardHandle,
                &dwAP );

if ( SCARD_S_SUCCESS != lReturn )
{
    Console::WriteLine("Failed SCardConnect\n");
    exit(1);  // Or other appropriate action.
}

// get …
Run Code Online (Sandbox Code Playgroud)

windows serial-number pcsc winscard

6
推荐指数
1
解决办法
7919
查看次数

通过HID OMNIKEY 5427 CK向卡发送APDU命令

我试图通过HID OMNIKEY 5427 CK通过APDUs命令来操作MIFARE卡即.Ultralight C卡,在使用WinSCard.dll的Windows 10 x64 OS环境中.(我在NXP NDA下并且可以完全访问他们的文件)

我试图在网上找到信息好几天了.除了2pages手册之外,似乎没有该模型的已发布文档.

像GetUID(FFCA000000)这样的简单命令是可以的,我可以取回实际的卡UID.

但对于"使用卡进行身份验证",来自HID 5421模型的参考文档说我应该从OpenGenericSession(FFA0000703010001)开始,我试过了,读者总是用6D00h回复(错误)

我试过直接发送验证命令'1Ah + 00h'(FFA00005080100F30000641A0000),读者也总是回复错误代码.

我对HID 5421型号有经验,而且很直接,不知道为什么这款5427不像它的兄弟.

是的,我联系了HID支持.没运气.我没有从他们那里获得有用的信息.

如果有任何想法或有5427软件开发指南请帮忙.我现在已经把头发拉了近一个星期.

hid pcsc smartcard-reader mifare contactless-smartcard

6
推荐指数
1
解决办法
1439
查看次数

Windows Server 2012 R2智能卡限制

下午全部

我们有一个在Windows Server上运行的应用程序,需要多达50个智能卡才能连接到主机应用程序服务器.
这对我们现有的Server 2003/2008安装没有任何问题.

但是,当我们来测试Server 2012 R2上的应用程序时,只会显示10个智能卡.所有USB设备都能正确识别,但我们的pcsc测试应用程序只能找到10个终端.

有没有人遇到过这个问题?任何已知的修复?

干杯
加文

windows smartcard pcsc windows-server-2012-r2

5
推荐指数
1
解决办法
938
查看次数