通用访问卡

出自 ArchWiki

本页面解释了如何设置 Arch 以使用美国国防部的通用访问卡 (CAC)。

安装

安装 ccidopensc

配置

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

如果您的读卡器没有密码键盘,追加 enable_pinpad = false/etc/opensc.conf

有时 opensc 可能难以识别 CAC 的正确驱动程序,而是可能选择 PIV 或其他驱动程序。 您可以通过编辑 /etc/opensc.conf 来强制使用 CAC 驱动程序,将 card_drivers = cacforce_card_driver = cac 添加到配置文件中

启用 pcscd

启动 并启用 pcscd.socket

配置浏览器

  1. 前往: https://public.cyber.mil/pki-pke/pkipke-document-library/
  2. 下载证书: "PKI CA Certificate Bundles: PKCS#7 For DoD PKI Only - Version 5.13" (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 DB。

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

注意: 您可能会看到消息“Failure to load dynamic library”。 可以忽略此消息。

成功后,您将看到“Module "CAC Module" added to database.”

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

本条目或章节的事实准确性存在争议。

原因: 以下步骤在 v5.4 版本的证书中不起作用,因为文件名中不存在 Chrome,我认为它应该是 Certificate 而不是 Chrome) (在 Talk:Common Access Card 中讨论)

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

 for n in $(ls * | grep Chrome); 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 web access 将不会为 DoD webmail 验证会话),请尝试使用隐私/隐身会话来测试证书链的有效性并删除一些变量。

如果您想手动查询启用 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

参见