跳转至内容

通用访问卡

来自 ArchWiki

本页面介绍如何在 Arch Linux 上设置以使用美国国防部的 通用访问卡 (CAC)。

安装

安装 ccidopensc

配置

注意 默认情况下,您不应需要编辑 opensc 配置文件。您应该先检查所有其他设置项(例如证书导入)。

如果您的读卡器没有 PIN 输入板,请将 enable_pinpad = false 追加/etc/opensc.conf

有时 opensc 难以识别 CAC 的正确驱动程序,可能会选择 PIV 或其他驱动程序。您可以通过编辑 /etc/opensc.conf 来强制使用 CAC 驱动程序,设置 card_drivers = cacforce_card_driver = cac

启用 pcscd

启动并启用 pcscd.socket

配置浏览器

  1. 访问:https://www.cyber.mil/pki-pke/document-library
  2. 下载证书:"PKI CA Certificate Bundles: PKCS#7 For DoD PKI Only - Version 5.14" (ZIP 下载)
  3. 解压 DoD PKI zip 文件
  4. 遵循浏览器特定的说明

Firefox

加载安全设备

导航到编辑 > 偏好设置 > 高级 > 证书 > 安全设备,然后点击“加载”,使用 /usr/lib/opensc-pkcs11.so/usr/lib/pkcs11/opensc-pkcs11.so 加载模块。

注意 Firefox 可能会报告模块未正确加载,但您仍需在安全设备中进行检查,以确认模块是否已成功加载。

导入 DoD 证书

按照 *此* 顺序,通过导航到编辑 > 偏好设置 > 高级 > 证书 > 查看证书 > 证书颁发机构 > 导入来安装上述 zip 文件中的证书(确保至少勾选“信任此 CA 以识别网站”选项)。

注意 从证书 zip 版本 5.13 开始
  1. Certificates_PKCS7_v5_13_DoD_der.p7b
  2. Certificates_PKCS7_v5_13_DoD_DoD_Root_CA_3_der.p7b
  3. Certificates_PKCS7_v5_13_DoD_DoD_Root_CA_4_der.p7b
  4. Certificates_PKCS7_v5_13_DoD_DoD_Root_CA_5_der.p7b
  5. Certificates_PKCS7_v5_13_DoD_DoD_Root_CA_6_der.p7b
  6. DOD_PKE_Chain.pem

Chromium/Google Chrome

1. 将 CAC 模块添加到 NSS 数据库。

确保您的 CAC 已连接,并且 Chromium 已关闭,然后在终端中输入以下命令:$ modutil -dbdir sql:$HOME/.pki/nssdb/ -add "CAC Module" -libfile /usr/lib/opensc-pkcs11.so

注意 您可能会看到“加载动态库失败”的消息。可以忽略。

成功后,您将看到“模块“CAC Module”已添加到数据库。”

2. 使用 $ modutil -dbdir sql:$HOME/.pki/nssdb/ -list 检查 CAC 模块是否已成功添加。


3. 在 shell 中导航到解压后的 DoD PKI 文件的位置,然后通过以下方式安装:

 for n in *der.p7b; do certutil -d sql:$HOME/.pki/nssdb -A -t TC -n $n -i $n; done

或者

重新打开 Chrome,导航到设置 > 显示高级设置 > 管理证书 > 证书颁发机构,然后从上面的 PEM 格式文件中加载 CA 捆绑包。

4. 在 Chrome 的设置 > 显示高级设置 > 管理证书 > 证书颁发机构中验证颁发机构是否存在,然后展开“org-U.S. Government”,您应该会看到列出的多个“DoD”证书。

VMware/Omnissa Horizon Client

请注意,Omnissa 已从 VMware 收购了 horizon-view 解决方案。

Omnissa

安装 omnissa-horizon-clientAURomnissa-horizon-usbAUR。要将 CAC 身份验证集成到 VMware Horizon Client 中,请创建目录 /usr/lib/omnissa/horizon/pkcs11 并链接 pkcs11 库。

# ln -s /usr/lib/pkcs11/opensc-pkcs11.so /usr/lib/omnissa/horizon/pkcs11/libopenscpkcs11.so

同时创建以下符号链接以启用 ssl_3.4.0。

# ln -sf /usr/lib/libcrypto.so.3 /usr/lib/omnissa/libcrypto.so.3
# ln -sf /usr/lib/libssl.so.3 /usr/lib/omnissa/libssl.so.3


VMware

安装 vmware-horizon-clientAURvmware-horizon-usbAURvmware-horizon-smartcardAUR启动启用 vmware-horizon-usb.service

要将 CAC 身份验证集成到 VMware Horizon Client 中,请创建目录 /usr/lib/vmware/view/pkcs11 并链接 pkcs11 库。

# ln -s /usr/lib/pkcs11/opensc-pkcs11.so /usr/lib/vmware/view/pkcs11/libopenscpkcs11.so

同时创建以下符号链接以启用 ssl_3.4.0。

# ln -sf /usr/lib/libcrypto.so.3 /usr/lib/vmware/libcrypto.so.3
# ln -sf /usr/lib/libssl.so.3 /usr/lib/vmware/libssl.so.3

测试

访问您喜欢的、需要 CAC 保护的网页,系统应该会要求您输入证书的*主密码*。输入密码,如果成功登录,则表明一切正常。

如果某些网站/页面似乎无法正常工作(例如,Outlook 网页访问无法为 DoD 网页邮件进行会话身份验证),请尝试使用隐私/隐身会话来测试证书链的有效性,并排除其他变量。

如果您想手动查询带有 PIN 的 CAC/智能卡的证书,请使用以下命令:

$ p11tool --login --provider=/usr/lib/pkcs11/opensc-pkcs11.so --list-all-certs -d 100

调试

opensc-tool

以上大部分信息来自 Firas Kraïem 的一篇 博客文章

验证 opensc 是否能识别您的读卡器。

$ opensc-tool --list-readers 
# Detected readers (pcsc)
Nr.  Card  Features  Name
0    Yes            Generic USB2.0-CRW [Smart Card Reader Interface] (20070818000000000) 00 00

列出已插入的卡。

$ opensc-tool --reader 0 --name 
Personal Identity Verification Card

列出已插入的卡和正在使用的驱动器。

$ opensc-tool --reader 0 --name -v
Connecting to card in reader Generic USB2.0-CRW [Smart Card Reader Interface] (20070818000000000) 00 00...
Using card driver Personal Identity Verification Card.
Card name: Personal Identity Verification Card

pcsc-tools

另一个选择是 pcsc-tools。程序 pcsc_scan 可能很有用。

$ pcsc_scan
PC/SC device scanner
V 1.4.21 (c) 2001-2011, Ludovic Rousseau <ludovic.rousseau@free.fr>
Compiled with PC/SC lite version: 1.8.6
Using reader plug'n play mechanism
Scanning present readers...
0: Dell Dell Smart Card Reader Keyboard 00 00

Thu Sep  5 10:41:53 2013
Reader 0: Dell Dell Smart Card Reader Keyboard 00 00
  Card state: Card removed, 

Thu Sep  5 10:41:58 2013
Reader 0: Dell Dell Smart Card Reader Keyboard 00 00
  Card state: Card inserted, 
  ATR: 3B DB 96 00 80 1F 03 00 31 C0 64 B0 F3 10 00 07 90 00 80

ATR: 3B DB 96 00 80 1F 03 00 31 C0 64 B0 F3 10 00 07 90 00 80
+ TS = 3B --> Direct Convention
+ T0 = DB, Y(1): 1101, K: 11 (historical bytes)
  TA(1) = 96 --> Fi=512, Di=32, 16 cycles/ETU
    250000 bits/s at 4 MHz, fMax for Fi = 5 MHz => 312500 bits/s
  TC(1) = 00 --> Extra guard time: 0
  TD(1) = 80 --> Y(i+1) = 1000, Protocol T = 0 
-----
  TD(2) = 1F --> Y(i+1) = 0001, Protocol T = 15 - Global interface bytes following 
-----
  TA(3) = 03 --> Clock stop: not supported - Class accepted by the card: (3G) A 5V B 3V 
+ Historical bytes: 00 31 C0 64 B0 F3 10 00 07 90 00
  Category indicator byte: 00 (compact TLV data object)
    Tag: 3, len: 1 (card service data byte)
      Card service data byte: C0
        - Application selection: by full DF name
        - Application selection: by partial DF name
        - EF.DIR and EF.ATR access services: by GET RECORD(s) command
        - Card with MF
    Tag: 6, len: 4 (pre-issuing data)
     Data: B0 F3 10 00
    Mandatory status indicator (3 last bytes)
      LCS (life card cycle): 07 (Operational state (activated))
      SW: 9000 (Normal processing.)
+ TCK = 80 (correct checksum)

Possibly identified card (using /usr/share/pcsc/smartcard_list.txt):
3B DB 96 00 80 1F 03 00 31 C0 64 B0 F3 10 00 07 90 00 80
	DoD CAC, Oberthur ID One 128 v5.5 Dual

参见

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.