

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 WorkSpaces Personal 中使用智慧卡進行身分驗證
<a name="smart-cards"></a>

DCV 套件上的 Windows 和 Linux WorkSpaces 允許使用[通用存取卡 (CAC)](https://www.cac.mil/Common-Access-Card) 和[個人身分驗證 (PIV)](https://www.idmanagement.gov/university/piv/) 智慧卡進行身分驗證。

Amazon WorkSpaces 支援使用智慧卡進行*工作階段前驗證*和*工作階段內驗證*。工作階段前驗證是指使用者登入 WorkSpaces 時所執行的智慧卡驗證。工作階段內驗證是指在登入後執行的驗證。

例如，使用者可以在使用 Web 瀏覽器和應用程式時，使用智慧卡進行工作階段內驗證。他們也可以將智慧卡用於進行需要管理許可的動作。例如，如果使用者擁有 Linux WorkSpace 的管理許可，他們可以在執行 `sudo` 和 `sudo -i` 命令時使用智慧卡來驗證自己。

**Topics**
+ [要求](#smart-cards-requirements)
+ [限制](#smart-cards-limitations)
+ [目錄組態](#smart-cards-directory-config)
+ [為 Windows WorkSpaces 啟用智慧卡](#smart-cards-windows-workspaces)
+ [為 Ubuntu、Rocky Linux 和 Red Hat Enterprise Linux WorkSpaces 啟用智慧卡](#smart-cards-linux-workspaces)
+ [為 Amazon Linux 2 WorkSpaces 啟用智慧卡](#smart-cards-amazon-linux-workspaces)

## 要求
<a name="smart-cards-requirements"></a>
+ 工作階段前驗證需要 Active Directory Connector (AD Connector) 目錄。AD Connector 使用以憑證為基礎的交互式 Transport Layer Security (交互式 TLS) 驗證，透過硬體或軟體智慧卡憑證對 Active Directory 使用者進行身分驗證。如需如何設定 AD Connector 和內部部署目錄的詳細資訊，請參閱 [目錄組態](#smart-cards-directory-config)。
+ 若要搭配 Windows 或 Linux WorkSpace 使用智慧卡，使用者必須使用 Amazon WorkSpaces Windows 用戶端版本 3.1.1 或更新版本、WorkSpaces macOS 用戶端版本 3.1.5 或更新版本，或 WorkSpaces Ubuntu 22.04 用戶端版本 2024.1 或更新版本 (WorkSpaces Ubuntu 20.04 用戶端不支援智慧卡身分驗證）。如需使用智慧卡搭配 Windows 和 macOS 用戶端的詳細資訊，請參閱《Amazon WorkSpaces 使用者指南》**中的[智慧卡支援](https://docs.aws.amazon.com/workspaces/latest/userguide/smart_card_support.html)。
+ 根 CA 和智慧卡憑證必須符合特定需求。如需詳細資訊，請參閱系統《AWS Directory Service 管理指南》**中的[在 AD Connector 中啟用 MTL 驗證以搭配智慧卡使用](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ad_connector_clientauth.html)，以及 Microsoft 文件中的[憑證需求](https://docs.microsoft.com/en-us/windows/security/identity-protection/smart-cards/smart-card-certificate-requirements-and-enumeration#certificate-requirements)。

  除了這些需求以外，用於對 Amazon WorkSpaces 進行智慧卡驗證的使用者憑證還必須包含下列屬性：
  + 憑證的 subjectAltName (SAN) 欄位中 AD 使用者的 userPrincipalName (UPN)。我們建議為使用者的預設 UPN 核發智慧卡憑證。
**注意**  
Amazon Linux 2 WorkSpaces 依賴 UPN certificate-to-user映射。較新的 Linux WorkSpaces，例如 Ubuntu、Rocky Linux 和 Red Hat Enterprise Linux WorkSpaces，支援更安全的[映射方法](https://www.idmanagement.gov/implement/scl-windows/#step-4---account-linking)。
  + 用戶端驗證 (1.3.6.1.5.5.7.3.2) 擴充金鑰使用 (EKU) 屬性。
  + 智慧卡登入 (1.3.6.1.4.1.311.20.2.2) EKU 屬性。
+ 對於工作階段前驗證，憑證撤銷檢查需要線上憑證狀態協定 (OCSP)。對於工作階段內驗證，建議使用 OCSP，但非必要。
**注意**  
Ubuntu WorkSpaces、Rocky Linux WorkSpaces 和 Red Hat Enterprise Linux WorkSpaces 預設需要 OCSP 進行工作階段內身分驗證，而這些系統中的 OCSP 驗證需要 OCSP 回應程式啟用 NONCE 延伸模組，以防止重播攻擊。若要停用 NONCE 延伸模組，必須一併停用工作階段中的 OCSP 驗證。若要在 Ubuntu、Rocky Linux 和 Red Hat Enterprise Linux WorkSpaces 中停用 OCSP 驗證，`/etc/sssd/conf.d/disable-ocsp.conf`請使用下列內容建立新的檔案：  

  ```
  [sssd]
  certificate_verification = no_ocsp
  ```

## 限制
<a name="smart-cards-limitations"></a>
+ 只有 WorkSpaces Windows 用戶端應用程式 3.1.1 版或更新版本、WorkSpaces macOS 用戶端應用程式 3.1.5 版或更新版本，以及 WorkSpaces Ubuntu 22.04 用戶端應用程式 2024.1 版或更新版本目前支援智慧卡身分驗證。WorkSpaces Ubuntu 20.04 或更早版本的用戶端應用程式不支援智慧卡身分驗證。
+ 僅現用戶端在 64 位元版本的 Windows 上執行時，WorkSpaces Windows 用戶端應用程式 3.1.1 或更新版本才支援智慧卡。
+ 智慧卡驗證目前僅支援 AD Connector 目錄。
+ 工作階段內身分驗證可在支援 DCV 的所有區域中使用。下列區域可以使用工作階段前驗證：
  + 亞太 (雪梨) 區域
  + 亞太 (東京) 區域
  + 歐洲 (愛爾蘭) 區域
  + AWS GovCloud （美國東部） 區域
  + AWS GovCloud （美國西部） 區域
  + 美國東部 (維吉尼亞北部) 區域
  + 美國西部 (奧勒岡) 區域
+ 對於 Linux 或 Windows WorkSpaces 上的工作階段內驗證和工作階段前驗證，目前一次只允許一張智慧卡。可同時使用多張卡片，但不支援。
+ 對於工作階段前驗證，目前不支援在相同目錄上同時啟用智慧卡驗證和登入驗證。
+ 目前僅支援 CAC 和 PIV 卡。其他類型的硬體或軟體型智慧卡也可能有效，但尚未經過完整的 DCV 使用測試。

## 目錄組態
<a name="smart-cards-directory-config"></a>

若要啟用智慧卡驗證，您必須以下列方式設定 AD Connector 目錄和內部部署目錄。

**AD Connector 目錄組態**  
在開始之前，確定您的 AD Connector 目錄已按照《AWS Directory Service 管理指南》**中的 [AD Connector 先決條件](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/prereq_connector.html)所述設定。尤其是，確定您已在防火牆中開啟必要的連接埠。

若要完成 AD Connector 目錄的設定，請依照《AWS Directory Service 管理指南》**中的[在 AD Connector 中啟用 MTL 驗證以搭配智慧卡使用](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ad_connector_clientauth.html)的指示進行。

**注意**  
智慧卡驗證需要 Kerberos 限制委派 (KCD) 才能正常運作。KCD 要求 AD Connector 服務帳戶的使用者名稱部分與相應使用者的 sAMAccountName 相符。sAMAccountName 不能超過 20 個字元。

**內部部署目錄組態**  
除了設定 AD Connector 目錄之外：
+ 請確定核發給現場部署目錄網域控制站的憑證已設定「KDC 身分驗證」擴充金鑰用量 (EKU)。若要這麼做，請使用 Active Directory Domain Services (AD DS) 預設 Kerberos 驗證憑證範本。請勿使用網域控制站憑證範本或網域控制站驗證憑證範本，因為這些範本不包含智慧卡驗證的必要設定。
+ 針對 Linux WorkSpaces，請確定發行智慧卡憑證之 CA 的 OCSP 回應程式已啟用 NONCE 延伸。如果無法啟用，則必須在 Ubuntu、Rocky Linux 和 Red Hat Enterprise Linux WorkSpaces 中停用工作階段內 OCSP 驗證。若要停用 OCSP 驗證，`/etc/sssd/conf.d/disable-ocsp.conf`請使用下列內容建立新的檔案：

  ```
  [sssd]
  certificate_verification = no_ocsp
  ```

## 為 Windows WorkSpaces 啟用智慧卡
<a name="smart-cards-windows-workspaces"></a>

如需有關如何在 Windows 上啟用智慧卡驗證的一般指引，請參閱 Microsoft 文件中的[讓智慧卡能透過第三方憑證授權單位登入的指導方針](https://docs.microsoft.com/troubleshoot/windows-server/windows-security/enabling-smart-card-logon-third-party-certification-authorities)。

**若要偵測 Windows 螢幕鎖定畫面並中斷工作階段的連線**  
若要允許使用者在螢幕鎖定時將已啟用智慧卡工作階段前驗證的 Windows WorkSpaces 解除鎖定，您可以在使用者的工作階段中啟用 Windows 螢幕鎖定畫面偵測。偵測到 Windows 螢幕鎖定畫面時，WorkSpace 工作階段會中斷連線，而且使用者可以使用其智慧卡從 WorkSpaces 用戶端重新連線。

 您可以使用群組政策設定，在偵測到 Windows 螢幕鎖定畫面時，啟用中斷工作階段連線。如需詳細資訊，請參閱[在 DCV 的螢幕鎖定上設定中斷連線工作階段](group_policy.md#gp_lock_screen_in_wsp)。

**啟用工作階段內或工作階段前驗證**  
依預設，Windows WorkSpaces 無法支援使用智慧卡進行工作階段前或工作階段內驗證。如有需要，您可以使用群組政策設定，為 Windows WorkSpaces 啟用工作階段內和工作階段前驗證。如需詳細資訊，請參閱[設定 DCV 的智慧卡重新導向](group_policy.md#gp_smart_cards_in_wsp)。

若要使用工作階段前驗證，除了更新群組政策設定之外，您還必須透過 AD Connector 目錄設定啟用工作階段前驗證。如需詳細資訊，請遵循《AWS Directory Service 管理指南》**中[在 AD Connector 中啟用 mTLS 驗證以用於智慧卡](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ad_connector_clientauth.html)的指示。

**讓使用者能夠在瀏覽器中使用智慧卡**  
如果使用者使用 Chrome 作為瀏覽器，則不需要特別設定即可使用智慧卡。

如果您的使用者使用 Firefox 作為他們的瀏覽器，您可以透過群組政策讓使用者能在 Firefox 中使用智慧卡。您可以在 GitHub 中使用這些 [Firefox 群組政策範本](https://github.com/mozilla/policy-templates/tree/master/windows)。

例如，您可以針對 Windows 安裝 64 位元版本的 [OpenSC](https://github.com/OpenSC/OpenSC/wiki) 以支援 PKCS \$111，然後使用下列群組政策設定，其中 `NAME_OF_DEVICE` 是任何您要用來識別 PKCS \$111 的值 (例如 `OpenSC`)，而 `PATH_TO_LIBRARY_FOR_DEVICE` 是 PKCS \$111 模組的路徑。此路徑應指向副檔名為 .DLL 的程式庫，例如 `C:\Program Files\OpenSC Project\OpenSC\pkcs11\onepin-opensc-pkcs11.dll`。

```
Software\Policies\Mozilla\Firefox\SecurityDevices\NAME_OF_DEVICE = PATH_TO_LIBRARY_FOR_DEVICE
```

**提示**  
如果您使用 OpenSC，也可藉由執行 `pkcs11-register.exe` 程式，將 OpenSC `pkcs11` 模組載入 Firefox 瀏覽器。若要執行此程式，請按兩下位於 `C:\Program Files\OpenSC Project\OpenSC\tools\pkcs11-register.exe` 的檔案，或開啟命令提示視窗並執行下列命令：  

```
"C:\Program Files\OpenSC Project\OpenSC\tools\pkcs11-register.exe"
```
若要驗證 OpenSc `pkcs11` 模組是否已載入 Firefox，請執行下列操作：  
如果 Firefox 已在執行中，請將它關閉。
開啟 Firefox。選擇右上角的選單按鈕 ![\[Firefox menu button\]](http://docs.aws.amazon.com/zh_tw/workspaces/latest/adminguide/images/firefox-menu-button.png)，然後選擇**選項**。
在 **about:preferences** 頁面上，選擇左側導覽窗格中的**隱私權與安全性**。
在**憑證**之下，選擇**安全裝置**。
在**裝置管理員**對話方塊中，您應會在左側導覽中看到 **OpenSc 智慧卡架構 (0.21)**，而當您加以選取時應該有下列值：  
**模組**：`OpenSC smartcard framework (0.21)`  
**路徑**：`C:\Program Files\OpenSC Project\OpenSC\pkcs11\onepin-opensc-pkcs11.dll`

**疑難排解**  
如需智慧卡疑難排解的相關資訊，請參閱 Microsoft 文件中的[憑證和設定問題](https://docs.microsoft.com/troubleshoot/windows-server/windows-security/enabling-smart-card-logon-third-party-certification-authorities#certificate-and-configuration-problems)。

可能導致問題的一些常見問題：
+ 插槽與憑證的對應不正確。
+ 智慧卡上有多個可比對使用者的憑證。使用下列條件比對憑證：
  + 憑證的根 CA。
  + 憑證的 `<KU>` 和 `<EKU>` 欄位。
  + 憑證主體中的 UPN。
+ 擁有多個憑證在其金鑰使用中有 `<EKU>msScLogin`。

一般而言，最好只有一個對應至智慧卡中第一個插槽的憑證用於智慧卡驗證。

用於管理智慧卡上憑證和金鑰的工具 (例如移除或重新對應憑證和金鑰) 可能是製造商特有的工具。如需詳細資訊，請參閱智慧卡製造商提供的文件。

## 為 Ubuntu、Rocky Linux 和 Red Hat Enterprise Linux WorkSpaces 啟用智慧卡
<a name="smart-cards-linux-workspaces"></a>

若要在 Ubuntu、Rocky Linux 和 Red Hat Enterprise Linux WorkSpaces 上使用智慧卡，您需要在所有發行智慧卡的 CA 以及所有發行網域控制站憑證CAs 的 WorkSpace 映像中包含根和所有CAs 憑證。

**若要取得您的 CA 憑證：**您可以透過多種方式取得您的 CA 憑證：
+ 您可以使用第三方憑證授權單位的 CA 憑證套件。
+ 您可以使用 Web 註冊網站匯出您自己的 CA 憑證，也就是 `http://ip_address/certsrv`或 `http://fqdn/certsrv`，其中 `ip_address`和 `fqdn`是 CA 伺服器的 IP 地址和完整網域名稱 (FQDN)。如需使用 Web 註冊網站的相關資訊，請參閱 Microsoft 文件中的[如何匯出根憑證授權單位憑證](https://docs.microsoft.com/troubleshoot/windows-server/identity/export-root-certification-authority-certificate)。
+ 您可以使用下列程序，從執行 Active Directory Certificate Services (AD CS) 的 CA 伺服器匯出 CA 憑證。如需安裝 AD CS 的相關資訊，請參閱 Microsoft 文件中的[安裝憑證授權單位](https://docs.microsoft.com/windows-server/networking/core-network-guide/cncg/server-certs/install-the-certification-authority)。

  1. 使用管理員帳戶登入 CA 伺服器。

  1. 從 Windows **開始**功能表，開啟命令提示視窗 (**開始** > **Windows 系統** > **命令提示**)。

  1. 使用下列命令將 CA 憑證匯出至新檔案，其中 `rootca.cer`是新檔案名稱：

     ```
     certutil -ca.cert rootca.cer
     ```

     如需執行 Certutil 的詳細資訊，請參閱 Microsoft 文件中的 [Certutil](https://docs.microsoft.com/windows-server/administration/windows-commands/certutil)。

  1. 使用下列 OpenSSL 命令，將匯出的 CA 憑證從 DER 格式轉換為 PEM 格式，其中 *rootca* 是憑證的名稱。如需 openssl 的詳細資訊，請參閱 [http://www.openssl.org/](https://www.openssl.org/)。

     ```
     openssl x509 -inform der -in rootca.cer -out /tmp/rootca.pem
     ```

**將 CA 憑證新增至 Linux WorkSpaces**

為了協助您啟用智慧卡，我們已將`enable_smartcard`指令碼新增至 Linux WorkSpaces DCV 套件。此指令碼會執行下列動作：
+ 將您的 CA 憑證匯入私有 PEM 套件，以定義 Linux WorkSpaces 上 SSSD 的信任根）。
+ 更新 SSSD、PAM 和 Kerberos 組態，包括在 WorkSpace 佈建期間啟用 `PKINIT`（使用憑證而非密碼進行 Kerberos 身分驗證）。

下列程序說明如何使用 `enable_smartcard`指令碼來匯入 CA 憑證，以及為 Linux WorkSpaces 啟用智慧卡身分驗證。

1. 在 DCV 通訊協定啟用的情況下建立新的 Linux WorkSpace。在 Amazon WorkSpace s主控台中啟動 WorkSpace 時，請務必在**選取套件**頁面上選取通訊協定的 **DCV**，然後選取其中一個 Linux WorkSpaces 公有套件。 Amazon WorkSpaces 

1. 在新建立的 WorkSpace 上，請確定`/etc/skylight.conf`檔案的 `[features]` 區段中有`pam_smartcard = true`行：

   ```
   [features]
   pam_smartcard = true
   ```
**注意**  
如果尚未將所有使用者設定為使用強`altSecurityIdentities`式憑證映射，您也可以在 中將`smartcard_weak_mapping = true`行新增至相同`[features]`區段`/etc/skylight.conf`，以支援舊版映射方法，但我們建議您盡快遷移這些使用者以使用強式映射方法。

1. 在 WorkSpace 上執行下列命令做為根，其中 `pem-path1`、 `pem-path2`等 是檔案的路徑，每個都包含智慧卡和網域控制器憑證信任鏈中的其中一個 CA 憑證。所有這些檔案都應該是 PEM 格式，每個檔案都包含一個憑證。可以使用 Glob 模式 （例如 `*.pem`)

   ```
   /usr/lib/skylight/enable_smartcard --ca-cert pem-path1 pem-path2 pem-path3 ...
   ```
**注意**  
執行上述命令之前，請使用下列命令做為根目錄，確保在 WorkSpace 上安裝其他相依性套件。  
對於 Rocky Linux 和 Red Hat Enterprise Linux WorkSpaces：  

   ```
   dnf install sssd-dbus libsss_simpleifp sssd-tools krb5-pkinit opensc
   ```
 對於 Ubuntu WorkSpaces：  

   ```
   apt install krb5-pkinit opensc
   ```

1. 在 WorkSpace 上執行任何其他自訂。例如，您可能想要新增整個系統的政策，[讓使用者能夠在 Firefox 中使用智慧卡](#smart-cards-firefox-linux)。(Chrome 使用者必須自行在其用戶端上啟用智慧卡。如需詳細資訊，請參閱《Amazon WorkSpaces 使用者指南》**中的[智慧卡支援](https://docs.aws.amazon.com/workspaces/latest/userguide/smart_card_support.html)。) 

1. 從 WorkSpace [建立自訂 WorkSpace 映像和套件](create-custom-bundle.md)。

1. 使用新的自訂套件為使用者啟動 WorkSpaces。

將 SecurityDevices 政策新增至您的 Linux WorkSpace 映像，即可讓您的使用者能夠在 Firefox 中使用智慧卡。如需有關將整個系統的政策新增到 Firefox 的詳細資訊，請參閱 GitHub 上的 [Mozilla 政策範本](https://github.com/mozilla/policy-templates/releases)。

**讓使用者能夠在 Firefox 中使用智慧卡**

1. 在您用來建立 WorkSpace 映像的 WorkSpace `policies.json`上，建立名為 的新檔案`PREFIX/firefox/distribution/`，其中 `PREFIX` `/usr/lib64`位於以 Fedora 為基礎的系統 (Amazon Linux 2、Red Hat Enterprise Linux 和 Rocky Linux WorkSpaces)，`/usr/lib`以及在以 Debian 為基礎的系統 (Ubuntu WorkSpaces)。

1. 在 JSON 檔案中，新增下列 SecurityDevices 政策，其中 `NAME_OF_DEVICE` 是任何您要用來識別 `pkcs` 模組的值。例如，您可能想要使用 `"OpenSC"` 之類的值：

   ```
   {
       "policies": {
           "SecurityDevices": {
               "NAME_OF_DEVICE": "PREFIX/opensc-pkcs11.so"
           }
       }
   }
   ```

**疑難排解**  
當工作階段前設定為使用密碼身分驗證時，智慧卡身分驗證的故障診斷更容易 - 在工作階段佈建期間，Linux WorkSpaces 會根據使用的工作階段前身分驗證方法，自動將主機身分驗證模式偏好設定切換為密碼型或智慧卡型。如果智慧卡身分驗證有任何問題，使用密碼工作階段前身分驗證中斷連線和重新連線會將工作區重設為密碼主機身分驗證。若要手動將 Linux WorkSpaces 執行個體切換至智慧卡身分驗證，請執行 `/usr/lib/skylight/resume_smartcard`命令做為根。

Linux WorkSpaces 使用 OpenSC 軟體來使用智慧卡。該軟體隨附 `pkcs11-tool`和 等工具`pkcs15-tool`，可用於疑難排解智慧卡的問題。這些工具可用於檢查智慧卡讀取器、個別字符，以及每個智慧卡字符上的 PIV 插槽或憑證。

`openssl` 命令列工具有助於針對信任鏈、OCSP 回應程式或缺少 KUs/EKUs （金鑰使用量/延伸金鑰使用量） 旗標的問題進行故障診斷，特別是結合 從智慧卡擷取公有憑證`pkcs15-tool`的能力。

常見的故障診斷選項：
+ 先從智慧卡擷取 （通常是 PIV 插槽 9A) 憑證，並將其儲存為 `card-cert.pem`： `pkcs15-tool --read-certificate 1 > card-cert.pem`
+ 根據 WorkSpace 上的信任資料庫驗證擷取的憑證： `openssl verify -verbose -CAfile /etc/sssd/pki/sssd_auth_ca_db.pem -cert card-cert.pem`
+ 從擷取的智慧卡憑證取得 OCSP URL： `openssl x509 -noout -ocsp_uri -in card-cert.pem`
+ 確認 OCSP 回應指出憑證有效且包含 NONCE：`openssl ocsp -issuer /etc/sssd/pki/sssd_auth_ca_db.pem -CAfile /etc/sssd/pki/sssd_auth_ca_db.pem -cert card-cert.pem -text -url OCSP_URI`，其中 *OCSP\$1URI* 是上面的 OCSP URL。
+ 檢查網域控制站憑證是否被視為受信任：`openssl s_client -connect DC_HOSTNAME:636 -showcerts | openssl verify -verbose -CAfile /etc/sssd/pki/sssd_auth_ca_db.pem`，其中 *DC\$1HOSTNAME* 是 Active Directory 網域中其中一個網域控制站的主機名稱。
+ 確認網域控制站憑證已設定 KDC 身分驗證 EKU （延伸金鑰用量）：`openssl s_client -connect DC_HOSTNAME:636 -showcerts | openssl x509 -noout -text`。
+ 嘗試手動 PKINIT 以查看是否有任何錯誤代碼可用於縮小問題範圍：`KRB5_TRACE=/dev/stdout kinit -X X509_user_identity=PKCS11:opensc-pkcs11.so:certid=01 -V`，其中 *01* 是卡片上四個主要 PIV 插槽的其中一個 - `01` 適用於 `9A`、`02`適用於 `9C`等。大多數卡片都有用於槽 9A 中使用者身分驗證的憑證。
+ 檢查系統是否可以將智慧卡憑證映射至 AD 使用者 （以根執行）：`dbus-send --print-reply --system --dest=org.freedesktop.sssd.infopipe /org/freedesktop/sssd/infopipe/Users org.freedesktop.sssd.infopipe.Users.FindByCertificate string:"$(<card-cert.pem)"`。這可與啟用 SSSD 偵錯記錄結合使用。

最常見的已知問題：
+ 智慧卡憑證的信任鏈不完整 - 使用`enable_smartcard`指令碼匯入憑證時，必須提供所有根憑證和中繼 CA 憑證的完整清單。如果因為清單根 CA 憑證遺失而未信任所有匯入的憑證，工具`enable_smartcard`會顯示錯誤，但無法偵測是否遺失其中一個信任鏈中的整個信任鏈或最內部的中繼 CA 憑證。在這種情況下，它會在沒有錯誤的情況下匯入憑證，但智慧卡憑證或網域控制站憑證仍可能被視為不受信任。
+ 缺少網域控制站憑證的信任鏈 - 如果網域控制站憑證是由與智慧卡不同的 CA 發行 （例如，在[通用存取卡 (CAC) ](https://www.cac.mil/Common-Access-Card)的情況下），則需要將該 CA 信任鏈與智慧卡發行 CA 憑證一起匯入。
+ OCSP 回應程式中缺少 NONCE 延伸模組支援 - Linux WorkSpaces 要求智慧卡發行者的 OCSP 回應程式已啟用 NONCE 延伸模組。如果無法啟用，則必須完全停用 OCSP 驗證。
+ 網域控制站憑證缺少 `KDC Authentication` EKU (OID 1.3.6.1.5.2.3.1) - 需要重新發行智慧卡身分驗證來工作網域控制站憑證，才能包含 KDC 身分驗證 EKU。
+ 網域控制站憑證已過期 - 若要讓智慧卡驗證工作網域控制站憑證，必須保持up-to-date狀態。
+ 智慧卡憑證使用較弱的映射方法映射至 AD 中的使用者 - 傳統上，subjectAltName 屬性中的 UPN 欄位用於將憑證映射至 AD 中的使用者，預期符合 userPrincipalName 屬性。這不再被視為安全映射方法，預設為不允許。您可以透過將`--allow-weak-mapping`引數傳遞至 `enable_smartcard`命令並將`smartcard_weak_mapping = true`行新增至 `/etc/skylight.conf` 檔案中的 `[features]`區段來重新啟用它，但更好的解決方案是使用其中一種強大的映射方法。如需詳細資訊，請參閱[帳戶連結](https://www.idmanagement.gov/implement/scl-windows/#step-4---account-linking)文件。

用於管理智慧卡上憑證和金鑰的工具 (例如移除或重新對應憑證和金鑰) 可能是製造商特有的工具。您可用於處理智慧卡的其他工具包括：
+ `opensc-explorer`
+ `opensc-tool`
+ `pkcs11_inspect`
+ `pkcs11_listcerts`
+ `pkcs15-tool`

**若要啟用偵錯記錄功能**
+ `/etc/sssd/sssd.conf` 為每個個別區段新增`debug_level = LEVEL`行進，其中 *LEVEL* 是所需的詳細資訊層級，從 1 到 10。然後，您可以在 `/var/log/sssd/`目錄中找到每個對應區段的日誌。如需詳細資訊[，請參閱此處](https://docs.pagure.org/sssd.sssd/users/troubleshooting.html#sssd-debug-logs)和[此處](https://sssd.io/troubleshooting/basics.html#sssd-debug-logs)的 SSSD 文件。

## 為 Amazon Linux 2 WorkSpaces 啟用智慧卡
<a name="smart-cards-amazon-linux-workspaces"></a>

**注意**  
DCV 上的 Amazon Linux 2 WorkSpaces 目前具有下列限制：  
不支援剪貼簿、音訊輸入、視訊輸入和時區重新導向。
不支援多個監視器。

若要在 Amazon Linux 2 WorkSpaces 上使用智慧卡，您需要在 WorkSpace 映像中包含 PEM 格式的根 CA 憑證檔案。

**若要取得根 CA 憑證：**您可以透過多種方式取得根 CA 憑證：
+ 您可以使用第三方憑證授權單位操作的根 CA 憑證。
+ 您可以使用 Web 註冊網站匯出自己的根 CA 憑證，也就是 `http://ip_address/certsrv` 或 `http://fqdn/certsrv`，其中 `ip_address` 和 `fqdn` 是根憑證 CA 伺服器的 IP 地址和完整網域名稱 (FQDN)。如需使用 Web 註冊網站的相關資訊，請參閱 Microsoft 文件中的[如何匯出根憑證授權單位憑證](https://docs.microsoft.com/troubleshoot/windows-server/identity/export-root-certification-authority-certificate)。
+ 您可以使用下列程序，從執行 Active Directory Certificate Services (AD CS) 的根 CA 憑證伺服器匯出根 CA 憑證。如需安裝 AD CS 的相關資訊，請參閱 Microsoft 文件中的[安裝憑證授權單位](https://docs.microsoft.com/windows-server/networking/core-network-guide/cncg/server-certs/install-the-certification-authority)。

  1. 使用管理員帳戶登入根 CA 伺服器。

  1. 從 Windows **開始**功能表，開啟命令提示視窗 (**開始** > **Windows 系統** > **命令提示**)。

  1. 使用下列命令將根 CA 憑證匯出至新檔案，其中 `rootca.cer` 是新檔案的名稱：

     ```
     certutil -ca.cert rootca.cer
     ```

     如需執行 Certutil 的詳細資訊，請參閱 Microsoft 文件中的 [Certutil](https://docs.microsoft.com/windows-server/administration/windows-commands/certutil)。

  1. 使用下列 OpenSSL 命令，將匯出的根 CA 憑證從 DER 格式轉換為 PEM 格式，其中 *rootca* 是憑證的名稱。如需 openssl 的詳細資訊，請參閱 [http://www.openssl.org/](https://www.openssl.org/)。

     ```
     openssl x509 -inform der -in rootca.cer -out /tmp/rootca.pem
     ```

**將根 CA 憑證新增至 Amazon Linux 2 WorkSpaces**

為了協助您啟用智慧卡，我們已將`enable_smartcard`指令碼新增至 Amazon Linux DCV 套件。此指令碼會執行下列動作：
+ 將根 CA 憑證匯入[網路安全服務 (NSS)](https://developer.mozilla.org/docs/Mozilla/Projects/NSS) 資料庫。
+ 安裝用於可插入式驗證模組 (PAM) 驗證的 `pam_pkcs11` 模組。
+ 執行預設組態，包括在 WorkSpace 佈建期間啟用 `pkinit`。

下列程序說明如何使用 `enable_smartcard`指令碼將根 CA 憑證新增至 Amazon Linux 2 WorkSpaces，並為 Amazon Linux 2 WorkSpaces 啟用智慧卡。

1. 在 DCV 通訊協定啟用的情況下建立新的 Amazon Linux 2 WorkSpace。在 Amazon WorkSpace s主控台中啟動 WorkSpace 時，請務必在**選取套件**頁面上選取通訊協定的 **DCV**，然後選取其中一個 Amazon Linux 2 公有套件。 Amazon WorkSpaces 

1. 在新的 WorkSpace 上，以根身分執行下列命令，其中 `pem-path` 是 PEM 格式的根 CA 憑證檔案的路徑。

   ```
   /usr/lib/skylight/enable_smartcard --ca-cert pem-path
   ```
**注意**  
Amazon Linux 2 WorkSpaces 假設智慧卡上的憑證是以使用者的預設使用者主體名稱 (UPN) 發行，例如 `sAMAccountName@domain`，其中 `domain` 是完整網域名稱 (FQDN)。  
若要使用替代 UPN 尾碼，`run /usr/lib/skylight/enable_smartcard --help` 以取得詳細資訊。對於每個使用者而言，替代 UPN 尾碼的對應都是唯一的。因此，必須在每個使用者的 WorkSpace 上個別執行該對應。

1. （選用） 根據預設，所有 服務都會啟用，以在 Amazon Linux 2 WorkSpaces 上使用智慧卡身分驗證。若要將智慧卡驗證限制為僅限特定服務，您必須編輯 `/etc/pam.d/system-auth`。取消註解 `pam_succeed_if.so` 的 `auth` 行 並視需要編輯服務清單。

   取消註解 `auth` 行後，若要允許服務使用智慧卡驗證，您必須將其新增至清單。若要讓服務僅使用密碼驗證，則必須從清單中將其移除。

1. 對 WorkSpace 執行任何其他自訂。例如，您可能想要新增整個系統的政策，[讓使用者能夠在 Firefox 中使用智慧卡](#smart-cards-firefox-amazon-linux)。(Chrome 使用者必須自行在其用戶端上啟用智慧卡。如需詳細資訊，請參閱《Amazon WorkSpaces 使用者指南》**中的[智慧卡支援](https://docs.aws.amazon.com/workspaces/latest/userguide/smart_card_support.html)。) 

1. 從 WorkSpace [建立自訂 WorkSpace 映像和套件](create-custom-bundle.md)。

1. 使用新的自訂套件為使用者啟動 WorkSpaces。

您可以將 SecurityDevices 政策新增至 Amazon Linux 2 WorkSpace 映像，讓使用者能夠在 Firefox 中使用智慧卡。如需有關將整個系統的政策新增到 Firefox 的詳細資訊，請參閱 GitHub 上的 [Mozilla 政策範本](https://github.com/mozilla/policy-templates/releases)。

**讓使用者能夠在 Firefox 中使用智慧卡**

1. 在您用於建立 WorkSpace 映像的 WorkSpace 上，在 `/usr/lib64/firefox/distribution/` 中建立一個名為 `policies.json` 的新檔案。

1. 在 JSON 檔案中，新增下列 SecurityDevices 政策，其中 `NAME_OF_DEVICE` 是任何您要用來識別 `pkcs` 模組的值。例如，您可能想要使用 `"OpenSC"` 之類的值：

   ```
   {
       "policies": {
           "SecurityDevices": {
               "NAME_OF_DEVICE": "/usr/lib64/opensc-pkcs11.so"
           }
       }
   }
   ```

**故障診斷：**為了進行故障診斷，我們建議您新增 `pkcs11-tools`公用程式。此公用程式可讓您執行下列動作：
+ 列出每張智慧卡。
+ 列出每張智慧卡上的插槽。
+ 列出每張智慧卡上的憑證。

可能導致問題的一些常見問題：
+ 插槽與憑證的對應不正確。
+ 智慧卡上有多個可比對使用者的憑證。使用下列條件比對憑證：
  + 憑證的根 CA。
  + 憑證的 `<KU>` 和 `<EKU>` 欄位。
  + 憑證主體中的 UPN。
+ 擁有多個憑證在其金鑰使用中有 `<EKU>msScLogin`。

一般而言，最好只有一個對應至智慧卡中第一個插槽的憑證用於智慧卡驗證。

用於管理智慧卡上憑證和金鑰的工具 (例如移除或重新對應憑證和金鑰) 可能是製造商特有的工具。您可用於處理智慧卡的其他工具包括：
+ `opensc-explorer`
+ `opensc-tool`
+ `pkcs11_inspect`
+ `pkcs11_listcerts`
+ `pkcs15-tool`

**若要啟用偵錯記錄功能**

若要對 `pam_pkcs11` 和 `pam-krb5` 組態進行疑難排解，您可以啟用偵錯記錄。

1. 在 `/etc/pam.d/system-auth-ac` 檔案中，編輯 `auth` 動作並將 `pam_pksc11.so` 的 `nodebug` 參數變更為 `debug`。

1. 在 `/etc/pam_pkcs11/pam_pkcs11.conf` 檔案中，將 `debug = false;` 變更為 `debug = true;`。`debug` 選項會個別套用於每個對應器模組，因此您可能需要直接在 `pam_pkcs11` 區段下以及適當的對應器區段下進行變更 (根據預設，這是 `mapper generic`)。

1. 在 `/etc/pam.d/system-auth-ac` 檔案中，編輯 `auth` 動作並將 `debug` 或 `debug_sensitive` 參數新增至 `pam_krb5.so`。

啟用偵錯記錄之後，系統會直接在作用中終端機中列印 `pam_pkcs11` 偵錯訊息。`pam_krb5` 來自的訊息已記錄於 `/var/log/secure`。

若要檢查智慧卡憑證對應的使用者名稱，請使用下列 `pklogin_finder` 命令：

```
sudo pklogin_finder debug config_file=/etc/pam_pkcs11/pam_pkcs11.conf
```

出現提示時，輸入智慧卡 PIN。`pklogin_finder` 在 `stdout` 上以 `NETBIOS\username` 形式輸出智慧卡憑證上的使用者名稱。此使用者名稱應符合 WorkSpace 使用者名稱。

在 Active Directory Domain Services (AD DS) 中，NetBIOS 網域名稱是 Windows 2000 前的網域名稱。一般而言 (但不一定)，NetBIOS 網域名稱通常是網域名稱系統 (DNS) 網域名稱的子網域。例如，如果 DNS 網域名稱為 `example.com`，則 NetBIOS 網域通常為 `EXAMPLE`。如果 DNS 網域名稱為 `corp.example.com`，則 NetBIOS 名稱通常為 `CORP`。

例如，對於 網域 `corp.example.com` 中的使用者 `mmajor`，來自 `pklogin_finder` 的輸出為 `CORP\mmajor`。

**注意**  
如果您收到訊息 `"ERROR:pam_pkcs11.c:504: verify_certificate() failed"`，此訊息指出 `pam_pkcs11` 在智慧卡上找到符合使用者名稱條件的憑證，但該憑證並未鏈結至機器所辨識的根 CA 憑證。發生這種情況時，`pam_pkcs11` 會輸出上述訊息，然後嘗試下一個憑證。只有在找到符合使用者名稱並鏈結至已辨識根 CA 憑證的憑證時，才允許驗證。

若要對您的 `pam_krb5` 組態進行疑難排解，您可以使用下列命令在偵錯模式中手動調用 `kinit`：

```
KRB5_TRACE=/dev/stdout kinit -V
```

此命令應會成功取得 Kerberos 票證授予票證 (TGT)。如果失敗，請嘗試將正確的 Kerberos 主體名稱明確地新增至命令。例如，對於網域 `corp.example.com` 中的使用者 `mmajor`，請使用以下命令：

```
KRB5_TRACE=/dev/stdout kinit -V mmajor
```

如果這個命令成功，問題很可能是從 WorkSpace 使用者名稱到 Kerberos 主體名稱的對應。檢查 `/etc/krb5.conf` 檔案中的 `[appdefaults]/pam/mappings` 區段。

如果此命令不成功，但密碼型 `kinit` 命令確實成功，請檢查 `/etc/krb5.conf` 檔案中的 `pkinit_` 相關組態。例如，如果智慧卡包含多個憑證，您可能需要對 `pkinit_cert_match` 進行變更。