在 Fedora 上使用“LuxTrust Signing Stick”(这是卢森堡特有的)

Dav*_*fer 5 linux fedora smartcard usb-device

这是一个特定于卢森堡国家的问题:

在卢森堡,官方和银行业务的电子签名基础设施由LuxTrust SA公司提供。他们提供的 U 盘实际上是重新命名的 Gemalto 设备,特别是Signing Stick,这是一种 Gemalto “Gemplus USB Shell Token V2”(或类似产品),带有可移动芯片卡,带有 X.509 证书,可识别用户和私钥。

LuxTrust 签名棒

LuxTrust 表示该设备可在 Windows 和 Mac 上运行,但对 Linux 的支持较弱(但它们支持 Ubuntu),尽管 Gemalto 本身为该设备提供支持和驱动程序。

从浏览器使用设备的一般功能布局似乎是这样的:

这是怎么回事

所以我已经尝试让这项工作有一段时间了,但我无法让 LuxTrust 的小程序与“签名棒”互操作。有没有人在 Linux 上使用过 LuxTrust 签名棒?

在这种精确的情况下,我们有:

  • Firefox 37.0(附带 NoScript),Java 插件为:活动
  • Oracle JDK(java -version说:1.8.0_40-b26)
  • Fedora 20(uname -a说:3.18.9-100.fc20.x86_64)

Dav*_*fer 3

看起来我已经取得了一些成功。

\n\n

旅程开始

\n\n

因此,我们从“Linux 中间件”LuxTrust 页面开始,该页面基本上说“你只能依靠自己,我们不支持你,如果事情变得梨形,那都是你自己的错。点击此处签名!”:

\n\n

在此输入图像描述

\n\n

我们将保持冷静,首先确保 Java 在浏览器中处于活动状态。

\n\n

激活Java

\n\n

如果 Java 未激活,状态测试页面(可通过“支持”>“有关证书管理的问题”>“我的证书”(在页脚中)>“测试和状态”访问)将如下所示(请注意,该页面还将 Firefox 37 归类为“不受支持”,坦率地说,这很奇怪):

\n\n

在此输入图像描述

\n\n

从Oracle 网站安装 Oracle Java SDK 或 Java Runtime

\n\n

使 Java 浏览器插件对 Firefox 可见。参见手动安装和注册Java Plugin for Linux,但过程一般如下(以非root用户运行):

\n\n
$ mkdir ~/.mozilla/plugins\n$ cd ~/.mozilla/plugins/\n$ ln -s $PATH_TO_WHERE_JAVA_HAS_BEEN_INSTALLED/jre/lib/amd64/libnpjp2.so \n
Run Code Online (Sandbox Code Playgroud)\n\n

现在必须检查浏览器中是否启用了 Java。

\n\n

请参阅Oracle:如何在 Web 浏览器中启用 Java?Mozilla:如何在 Firefox 中关闭 Java 小程序。原则上您只需检查“\xe2\x89\xa1 > Add-Ons”菜单。设置为“请求激活”以保持“我在这里循环!” 事情的一面:

\n\n

在此输入图像描述

\n\n

如果您安装了 NoScript,请让 NoScript 允许 Java 小程序运行:

\n\n

在此输入图像描述

\n\n

最后在Oracle的测试页进行测试。

\n\n

好的,就是这样。

\n\n

安装“LuxTrust中间件”

\n\n

因此,您决定安装LuxTrust_Middleware_Fedora_64bit_7.0.0-b01.rpm从 LuxTrust 下载的“中间件 RPM”。

\n\n

让我们了解一些相关信息:

\n\n
# rpm --query --info --package LuxTrust_Middleware_Fedora_64bit_7.0.0-b01.rpm\n\n    Name        : libclassicclient\n    Epoch       : 0\n    Version     : 7.0.0\n    Release     : b01.fc20\n    Architecture: x86_64\n    Install Date: (not installed)\n    Group       : System Environment/Libraries\n    Size        : 23147060\n    License     : Proprietary\n    Signature   : (none)\n    Source RPM  : libclassicclient-7.0.0-b01.fc20.src.rpm\n    Build Date  : Mon 08 Dec 2014 09:21:51 CET\n    Build Host  : localhost\n    Relocations : (not relocatable)\n    Vendor      : Gemalto\n    Summary     : Classic Client for Linux: PKCS#11 token for Gemalto Classic cards\n    Description : PKCS#11 token for Gemalto Classic cards\n
Run Code Online (Sandbox Code Playgroud)\n\n

注意名字libclassicclient这表明这实际上是“Gemalto Classic Client”(的一部分?)。一定是这个:

\n\n

我想是经典客户端吧?

\n\n

此外,该许可证是“专有的”。那好吧。

\n\n

这个包需要什么?事实上,有不少事情。特别是加密库。请注意,它不需要“sqlite”......

\n\n
# rpm --query --package --requires LuxTrust_Middleware_Fedora_64bit_7.0.0-b01.rpm\n\n    /bin/sh\n    /bin/sh\n    rpmlib(FileDigests) <= 4.6.0-1\n    rpmlib(PayloadFilesHavePrefix) <= 4.0-1\n    rpmlib(CompressedFileNames) <= 3.0.4-1\n    ld-linux-x86-64.so.2()(64bit)\n    ld-linux-x86-64.so.2(GLIBC_2.3)(64bit)\n    libatk-1.0.so.0()(64bit)\n    libcairo.so.2()(64bit)\n    libcrypto.so.10()(64bit)\n    libc.so.6()(64bit)\n    libc.so.6(GLIBC_2.14)(64bit)\n    libc.so.6(GLIBC_2.2.5)(64bit)\n    libc.so.6(GLIBC_2.3.2)(64bit)\n    libc.so.6(GLIBC_2.3.3)(64bit)\n    libc.so.6(GLIBC_2.3.4)(64bit)\n    libc.so.6(GLIBC_2.3)(64bit)\n    libc.so.6(GLIBC_2.4)(64bit)\n    libc.so.6(GLIBC_2.7)(64bit)\n    libdl.so.2()(64bit)\n    libdl.so.2(GLIBC_2.2.5)(64bit)\n    libfontconfig.so.1()(64bit)\n    libfreetype.so.6()(64bit)\n    libgcc_s.so.1()(64bit)\n    libgcc_s.so.1(GCC_3.0)(64bit)\n    libgcc_s.so.1(GCC_3.3)(64bit)\n    libgcc_s.so.1(GCC_4.2.0)(64bit)\n    libgdk_pixbuf-2.0.so.0()(64bit)\n    libgdk-x11-2.0.so.0()(64bit)\n    libgio-2.0.so.0()(64bit)\n    libglib-2.0.so.0()(64bit)\n    libgobject-2.0.so.0()(64bit)\n    libgtk-x11-2.0.so.0()(64bit)\n    libidkit.so.2()(64bit)\n    libiomp5.so()(64bit)\n    libm.so.6()(64bit)\n    libm.so.6(GLIBC_2.2.5)(64bit)\n    libpango-1.0.so.0()(64bit)\n    libpangocairo-1.0.so.0()(64bit)\n    libpangoft2-1.0.so.0()(64bit)\n    libpcsclite.so.1()(64bit)\n    libpthread.so.0()(64bit)\n    libpthread.so.0(GLIBC_2.2.5)(64bit)\n    libpthread.so.0(GLIBC_2.3.2)(64bit)\n    libQtCore.so.4()(64bit)\n    libQtGui.so.4()(64bit)\n    librt.so.1()(64bit)\n    librt.so.1(GLIBC_2.2.5)(64bit)\n    libScanAPI.so()(64bit)\n    libssl.so.10()(64bit)\n    libstdc++.so.6()(64bit)\n    libstdc++.so.6(GLIBCXX_3.4.11)(64bit)\n    libstdc++.so.6(GLIBCXX_3.4.15)(64bit)\n    libstdc++.so.6(GLIBCXX_3.4)(64bit)\n    libstdc++.so.6(GLIBCXX_3.4.9)(64bit)\n    libusb-0.1.so.4()(64bit)\n    rpmlib(PayloadIsXz) <= 5.2-1\n
Run Code Online (Sandbox Code Playgroud)\n\n

好的,让我们以 root 身份安装该软件包:

\n\n
# rpm --install LuxTrust_Middleware_Fedora_64bit_7.0.0-b01.rpm\n    WARNING: libsqlite3.so could not be found. Creating symbolic link...\n    Creating symbolic link done.\n
Run Code Online (Sandbox Code Playgroud)\n\n

所以它实际上需要“sqlite”,但在需求中没有这么说。

\n\n

谷歌搜索上面的消息表明该消息有时确实是由“Gemalto Classic Client”发出的。

\n\n

现在我们在文件系统中找到了一个额外的符号链接:

\n\n
/usr/lib/debug/usr/lib64/libsqlite3.so -> libsqlite3.so.0.8.6.debug\n
Run Code Online (Sandbox Code Playgroud)\n\n

我想我们可以忍受这一点。

\n\n

我们有手册

\n\n

列出通过安装的文件

\n\n
# rpm --query --list libclassicclient | less\n
Run Code Online (Sandbox Code Playgroud)\n\n

显示此包实际上附带(非常好的)手册!

\n\n
/usr/share/doc/libclassicclient/Classic_Client_Linux_User_Guide.pdf\n/usr/share/doc/libclassicclient/ReleaseNotes.pdf\n
Run Code Online (Sandbox Code Playgroud)\n\n

出色的!

\n\n

手册首页\n发行说明首页

\n\n

通过阅读上面的内容,我们很快就会发现:

\n\n
    \n
  1. 需要诸如智能卡读取守护进程之类的东西,它\n被称为ccid “something Something”。更多详情请访问金雅拓
  2. \n
  3. 有一个打包的应用程序可以更改“LuxTrust\n签名棒”(如上所述,GemPlus 智能卡读卡器)上的 PIN:\n/usr/bin/CCChangePinTool
  4. \n
\n\n

安装守护进程,练习 CCChangePinTool

\n\n

将“签名棒”插入某个USB端口。内核日志 ( journalctl SYSLOG_FACILITY=0) 说:

\n\n
    kernel: usb 3-2: new full-speed USB device number 3 using ohci-pci\n    kernel: usb 3-2: New USB device found, idVendor=08e6, idProduct=3438\n    kernel: usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0\n    kernel: usb 3-2: Product: USB SmartCard Reader\n    kernel: usb 3-2: Manufacturer: Gemplus\n
Run Code Online (Sandbox Code Playgroud)\n\n

让我们安装智能卡读取守护进程:

\n\n
    # yum search ccid  \n\n    pcsc-lite-ccid.x86_64 : Generic USB CCID smart card reader driver\n    pcsc-lite-ccid-debuginfo.x86_64 : Debug information for package pcsc-lite-ccid\n    libykneomgr.i686 : YubiKey NEO CCID Manager C Library\n    libykneomgr.x86_64 : YubiKey NEO CCID Manager C Library\n
Run Code Online (Sandbox Code Playgroud)\n\n

看来是pcsc-lite-ccid. 因此:

\n\n
    # yum install pcsc-lite-ccid\n\n    Installing : pcsc-lite-1.8.10-2.fc20.x86_64\n    Installing : pcsc-lite-ccid-1.4.13-1.fc20.x86_64\n
Run Code Online (Sandbox Code Playgroud)\n\n

一些额外的输出被省略。现在启动守护进程:

\n\n
    # systemctl start pcscd\n    # systemctl status pcscd\n    pcscd.service - PC/SC Smart Card Daemon\n       Loaded: loaded (/usr/lib/systemd/system/pcscd.service; static)\n       Active: active (running) since Mon 2015-04-06 13:12:43 CEST; 4s ago\n     Main PID: 10970 (pcscd)\n       CGroup: /system.slice/pcscd.service\n               \xe2\x94\x94\xe2\x94\x8010970 /usr/sbin/pcscd --foreground --auto-exit\n\n     systemd[1]: Started PC/SC Smart Card Daemon.\n     pcscd[10970]: 00000000 utils.c:61:GetDaemonPid() Can\'t open /var/run/pcscd/pcscd.pid: No such file or directory\n     pcscd[10970]: 00062795 commands.c:898:CmdEscape error on byte 10\n
Run Code Online (Sandbox Code Playgroud)\n\n

基本上不难看。

\n\n

现在/usr/bin/CCChangePinTool以非 root 用户身份运行。

\n\n

出现一个窗口,允许您“更改 PIN”。将 PIN 设置为其现有值(此处要加倍小心!)。显然这是有效的,应用程序不会抱怨或段错误。凉爽的。

\n\n

使智能卡读卡器对 Firefox 可见

\n\n

(这一切均来自金雅拓手册,并非由 LuxTrust 提供)

\n\n

必须在 Firefox 中显式配置智能卡读卡器。具体方法如下:

\n\n

首选项 > 功能区:“高级”> 选项卡:“证书”> 按钮:“安全设备”下,您必须添加智能卡读卡器及其智能卡。这可能是任意的。

\n\n

就我而言,读者首先出现:

\n\n

阅读器在 Firefox 1 中可见

\n\n

但一段时间后(特别是在上面的 PIN 不变之后),“Gemalto USB Shell Token V2”被识别:

\n\n

Firefox 2 中可见的阅读器

\n\n

但在 FireFox 重新启动后,标签发生了变化:

\n\n

Firefox 3 中可见的阅读器

\n\n

神秘?是的!但您现在可以“加载”“GemP15-1”。这需要将 PIN 输入到智能卡(智能卡安全地保存在笔记本电脑或 LastPass 中......)

\n\n

在 LuxTrust 进行测试

\n\n

那么让我们回到LuxTrust 测试页面......

\n\n

好吧,它仍然不起作用。不知道为什么,尽管这是一个 Java Applet,可以记录正在发生的事情以及到底在哪里遇到问题。

\n\n

还是不行!

\n\n

愤怒先生的时间到了吗?

\n\n

愤怒先生

\n\n

在 RCSL 进行测试

\n\n

卢森堡公司注册处(RCSL)可用于另一项测试。他们有一个“证书登录页面”。打开它,您会看到一个“eAccess”页面(“连接到卢森堡国的在线服务”),该页面加载了CTIE - Center des Technologies de l\'information de l\'Etat发布的 Applet 。如果您足够快,单击“运行”按钮,您会注意到小程序可以正确访问 LuxTrust 签名棒,并将检索登录页面的用户坐标。

\n\n

TAM 登录小程序

\n\n

有用!享受。

\n