1

作为一种安全措施,Windows 将本地智能卡读卡器转发到远程机器。问题是

  1. 您已经拥有句柄的阅读器变得无法使用
  2. 不可能获得新读者

如果您尝试使用终端或 CardTerminals 对象,则会收到 PCSCException:SCARD_E_SERVICE_STOPPED。

我有代码来演示这个问题:

import javax.smartcardio.*;

public class ScRdp {
public static void main( final String[] args ) throws Exception
{
    TerminalFactory factory = TerminalFactory.getDefault();
    System.out.println( "Factory: " + factory.hashCode() );
    final CardTerminals terminals = factory.terminals();
    List<CardTerminal> termNames = terminals.list();

    BufferedReader in = new BufferedReader( new InputStreamReader( System.in ) );
    in.readLine();
    main( args );
}
}

在机器 A 上启动代码,使用机器 B 中的 RDP,然后按 Enter。您甚至可以 RDP 进入,立即断开连接并在机器 A 上按 Enter。

在 C 语言中,我会使用 SCardReleaseContext 和 SCardEstablishContext ( ref )。有没有办法通过 Java API 做到这一点?

跟进

AFAICT这是不可能的。但是请参阅链接链接。应该可以在服务器上禁用智能卡重定向,从而规避问题。

在 Win7 Pro 上,我在 gpedit.msc 中找到了设置:“计算机配置/管理模板/Windows 组件/远程桌面服务/远程桌面会话主机/设备和资源重定向/不允许智能卡设备重定向”。那就是说我还没有这个工作。即使在连接之前取消选中 RDP 客户端中的“转发智能卡”复选框也无济于事。

4

1 回答 1

0

如果您以与使用阅读器的用户相同的用户身份加入 RDP,这只是一个问题。我们通过使用 ObjectWeb 中的 JavaService.exe 运行服务器以作为“本地系统”用户运行来规避它。

于 2012-07-09T09:09:04.920 回答