通用访问卡
本页面介绍如何在 Arch Linux 上设置以使用美国国防部的 通用访问卡 (CAC)。
安装
配置
如果您的读卡器没有 PIN 输入板,请将 enable_pinpad = false 追加到 /etc/opensc.conf。
有时 opensc 难以识别 CAC 的正确驱动程序,可能会选择 PIV 或其他驱动程序。您可以通过编辑 /etc/opensc.conf 来强制使用 CAC 驱动程序,设置 card_drivers = cac 和 force_card_driver = cac。
启用 pcscd
启动并启用 pcscd.socket。
配置浏览器
- 访问:https://www.cyber.mil/pki-pke/document-library
- 下载证书:"PKI CA Certificate Bundles: PKCS#7 For DoD PKI Only - Version 5.14" (ZIP 下载)
- 解压 DoD PKI zip 文件
- 遵循浏览器特定的说明
Firefox
加载安全设备
导航到编辑 > 偏好设置 > 高级 > 证书 > 安全设备,然后点击“加载”,使用 /usr/lib/opensc-pkcs11.so 或 /usr/lib/pkcs11/opensc-pkcs11.so 加载模块。
导入 DoD 证书
按照 *此* 顺序,通过导航到编辑 > 偏好设置 > 高级 > 证书 > 查看证书 > 证书颁发机构 > 导入来安装上述 zip 文件中的证书(确保至少勾选“信任此 CA 以识别网站”选项)。
- Certificates_PKCS7_v5_13_DoD_der.p7b
- Certificates_PKCS7_v5_13_DoD_DoD_Root_CA_3_der.p7b
- Certificates_PKCS7_v5_13_DoD_DoD_Root_CA_4_der.p7b
- Certificates_PKCS7_v5_13_DoD_DoD_Root_CA_5_der.p7b
- Certificates_PKCS7_v5_13_DoD_DoD_Root_CA_6_der.p7b
- 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-clientAUR 和 omnissa-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-clientAUR、vmware-horizon-usbAUR 和 vmware-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