

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# WorkSpaces Personal での認証にスマートカードを使用する
<a name="smart-cards"></a>

Windows および Linux WorkSpaces DCV バンドルでは、認証に [Common Access Card (CAC)](https://www.cac.mil/Common-Access-Card) および [Personal Identity Verification (PIV)](https://www.idmanagement.gov/university/piv/) スマートカードを使用できます。

Amazon WorkSpaces は、*セッション前認証*と*セッション内認証*の両方でスマートカードの使用をサポートします。セッション前認証とは、ユーザーが WorkSpaces にログインしている間に実行されるスマートカード認証をいいます。セッション内認証とは、ログイン後に実行される認証をいいます。

例えば、ユーザーは、ウェブブラウザやアプリケーションを操作しながら、セッション内認証にスマートカードを使用できます。また、管理アクセス許可が必要な操作にスマートカードを使用することもできます。例えば、ユーザーが 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 管理ガイド*の「[Enable mTLS authentication in AD Connector for use with smart cards](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 はcertificate-to-userマッピングに UPN に依存しています。Ubuntu、Rocky Linux、Red Hat Enterprise Linux WorkSpaces などの新しい 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 以前のクライアントアプリケーションは、スマートカード認証ではサポートされていません。
+ WorkSpaces Windows クライアントアプリケーション 3.1.1 以降では、クライアントが 64 ビットバージョンの Windows で実行されている場合にのみ、スマートカードがサポートされます。
+ 現在、スマートカード認証では、AD Connector ディレクトリのみがサポートされています。
+ セッション内認証は、DCV がサポートされているすべてのリージョンで利用可能です。セッション前認証は、以下のリージョンで使用できます。
  + アジアパシフィック (シドニー) リージョン
  + アジアパシフィック (東京) リージョン
  + 欧州 (アイルランド) リージョン
  + AWS GovCloud (米国東部) リージョン
  + AWS GovCloud (米国西部) リージョン
  + 米国東部 (バージニア北部) リージョン
  + 米国西部 (オレゴン) リージョン
+ 現在、Linux または Windows WorkSpaces でのセッション内認証およびセッション前認証では、一度に 1 つのスマートカードのみが許可されています。複数のカードを同時に使用することはできますが、サポートされていません。
+ 現在、セッション前認証において、スマートカード認証とサインイン認証の両方を同じディレクトリで有効にすることはサポートされていません。
+ 現時点では、CAC カードと PIV カードのみがサポートされています。他のタイプのハードウェアまたはソフトウェアベースのスマートカードも機能する可能性がありますが、DCV での使用は完全にはテストされていません。

## ディレクトリ設定
<a name="smart-cards-directory-config"></a>

スマートカード認証を有効にするには、AD Connector ディレクトリおよびオンプレミスのディレクトリを次の方法で設定する必要があります。

**AD Connector ディレクトリの設定**  
開始する前に、*AWS Directory Service 管理ガイド*の[ AD Connector の前提条件](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/prereq_connector.html)の説明に従って AD Connector ディレクトリが設定されていることを確認します。特に、ファイアウォールで必要なポートを開いていることを確認してください。

AD Connector ディレクトリの設定を完了するには、*AWS Directory Service 管理ガイド*の「[スマートカードで使用する AD Connector で mTLS 認証を有効にする](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ad_connector_clientauth.html)」の手順に従います。

**注記**  
スマートカード認証が正しく機能するためには、Kerberos の制約付き委任 (KCD) が必要です。KCD では、AD Connector サービスアカウントのユーザー名部分が、同じユーザーの sAMAccountName と一致している必要があります。sAMAccountName は 20 文字を超えることはできません。

**オンプレミスのディレクトリの設定**  
AD Connector ディレクトリの設定に加えて、次の操作を行います。
+ オンプレミスディレクトリのドメインコントローラーに発行される証明書に「KDC Authentication」拡張キー使用量 (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)を使用できます。

例えば、PKCS \#11 をサポートするために、Windows 用 [OpenSC](https://github.com/OpenSC/OpenSC/wiki) の 64 ビットバージョンをインストールし、次のグループポリシー設定を使用できます。ここで、`{{NAME_OF_DEVICE}}` は PKCS \#11 の識別に使用する任意の値 (`OpenSC` など)、`{{PATH_TO_LIBRARY_FOR_DEVICE}}` は PKCS \#11 モジュールへのパスです。このパスは、.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` プログラムを実行して OpenSC `pkcs11-register.exe` モジュールを 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 を開きます。右上のメニューボタン ![Firefox menu button](http://docs.aws.amazon.com/ja_jp/workspaces/latest/adminguide/images/firefox-menu-button.png) を選択し、[**Options**] (オプション) を選択します。
[**about:preferences**] ページの左側のナビゲーションペインで、[**Privacy & Security**] (プライバシーとセキュリティ) を選択します。
[**Certificates**] (証明書) で、[**Security Devices**] (セキュリティデバイス) を選択します。
[**Device Manager**] (デバイスマネージャー) ダイアログボックスで、左側のナビゲーションに **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` が含まれる複数の証明書を有していること。

一般的に、スマートカード認証のために、スマートカードの最初のスロットにマッピングされた証明書を 1 つだけ使用することがベストプラクティスです。

スマートカード上の証明書およびキーを管理するためのツール (証明書およびキーの削除または再マッピングなど) は、製造元によって異なる場合があります。詳細については、スマートカードの製造元から提供されているドキュメントをご参照ください。

## 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 について、ルート CA 証明書とすべての中間 CAs証明書を WorkSpace イメージに含める必要があります。

**CA 証明書を取得するには:** いくつかの方法で CA 証明書を取得できます。
+ サードパーティー認証機関の CA 証明書バンドルを使用できます。
+ 独自の CA 証明書をエクスポートするには、 `http://{{ip_address}}/certsrv`または のいずれかのウェブ登録サイトを使用します。ここで`http://{{fqdn}}/certsrv`、 `{{ip_address}}` と `{{fqdn}}`は CA サーバーの IP アドレスと完全修飾ドメイン名 (FQDN) です。ウェブ登録サイトの使用の詳細については、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 の [**Start**] (スタート) メニューから、コマンドプロンプトウィンドウ ([**Start**] (スタート) > [**Windows System**] (Windows システム) > [**Command Prompt**] (コマンドプロンプト)) を開きます。

  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 の詳細については、[www.openssl.org](https://www.openssl.org/) をご参照ください。

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

**Linux WorkSpaces に CA 証明書を追加するには**

スマートカードの有効化を支援するために、Linux WorkSpaces DCV バンドルに `enable_smartcard`スクリプトを追加しました。このスクリプトは以下のアクションを実行します。
+ CA 証明書を Linux WorkSpaces の SSSD の信頼ルートを定義するプライベート PEM バンドルにインポートします）。
+ SSSD、PAM、および Kerberos 設定を更新します。これには、WorkSpace プロビジョニング中の `PKINIT` (パスワードではなく証明書を使用した Kerberos 認証) の有効化が含まれます。

次の手順では、 `enable_smartcard`スクリプトを使用して CA 証明書をインポートし、Linux WorkSpaces のスマートカード認証を有効にする方法について説明します。

1. DCV プロトコルを有効にして新しい Linux WorkSpace を作成します。Amazon WorkSpaceで WorkSpace を起動するときは、**バンドルの選択**ページでプロトコルの **DCV** を選択し、Linux WorkSpaces パブリックバンドルのいずれかを選択します。 Amazon WorkSpaces 

1. 新しく作成した WorkSpace で、 `/etc/skylight.conf` ファイルに `[features]`セクションの`pam_smartcard = true`行があることを確認します。

   ```
   [features]
   pam_smartcard = true
   ```
**注記**  
すべてのユーザーが強力な`altSecurityIdentities`証明書マッピングを使用するようにまだ設定されていない場合は、レガシーマッピングメソッド`/etc/skylight.conf`をサポートするために の同じ`[features]`セクションに`smartcard_weak_mapping = true`行を追加することもできますが、代わりにできるだけ早く強力なマッピングメソッドを使用するようにユーザーを移行することをお勧めします。

1. WorkSpace で、次のコマンドを root として実行します。ここで、、 `{{pem-path1}}` `{{pem-path2}}`などはファイルへのパスであり、それぞれにスマートカード証明書とドメインコントローラー証明書の信頼チェーン内の CA 証明書の 1 つが含まれています。これらのファイルはすべて PEM 形式であり、ファイルごとに 1 つの証明書が含まれている必要があります。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 を起動します。

Linux WorkSpace イメージに SecurityDevices ポリシーを追加することで、ユーザーが Firefox でスマートカードを使用できるようにすることができます。システム全体のポリシーの Firefox への追加の詳細については、GitHub の [Mozilla のポリシーテンプレート](https://github.com/mozilla/policy-templates/releases)をご参照ください。

**ユーザーが Firefox でスマートカードを使用できるようにするには**

1. WorkSpace イメージの作成に使用している WorkSpace で、 `policies.json`という名前の新しいファイルを作成します。ここで`{{PREFIX}}/firefox/distribution/`、 `/usr/lib64` `{{PREFIX}}`は Fedora ベースのシステム (Amazon Linux 2、Red Hat Enterprise Linux、Rocky Linux WorkSpaces) と Debian ベースのシステム (Ubuntu WorkSpaces) `/usr/lib`にあります。

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\_URI}} は上記の OCSP URL です。
+ ドメインコントローラー証明書が信頼されていると見なされるかどうかを確認します。ここで`openssl s_client -connect {{DC_HOSTNAME}}:636 -showcerts | openssl verify -verbose -CAfile /etc/sssd/pki/sssd_auth_ca_db.pem`、{{DC\_HOSTNAME}} は 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}} はカード上の 4 つの主要な PIV スロットのうちの 1 つの数です。 `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 証明書の完全なリストを提供する必要があります。ルート 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` コマンドに渡し、 `/etc/skylight.conf` ファイルの `[features]`セクションに`smartcard_weak_mapping = true`行を追加することで再有効化できますが、より適切な解決策は、強力なマッピング方法のいずれかを使用することです。詳細については、[「アカウントリンクのドキュメント](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/` ディレクトリにあります。詳細については、「SSSD ドキュメント[https://docs.pagure.org/sssd.sssd/users/troubleshooting.html#sssd-debug-logs](https://docs.pagure.org/sssd.sssd/users/troubleshooting.html#sssd-debug-logs)」および[https://sssd.io/troubleshooting/basics.html#sssd-debug-logs](https://sssd.io/troubleshooting/basics.html#sssd-debug-logs)「」を参照してください。

## 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 証明書を使用できます。
+ ウェブ登録サイト (`http://{{ip_address}}/certsrv` または `http://{{fqdn}}/certsrv`) を使用して、独自のルート CA 証明書をエクスポートできます。ここで、`{{ip_address}}` および `{{fqdn}}` はルート証明書 CA サーバーの IP アドレスおよび完全修飾ドメイン名 (FQDN) です。ウェブ登録サイトの使用の詳細については、Microsoft のドキュメントの「[ルート証明機関の証明書をエクスポートする方法](https://docs.microsoft.com/troubleshoot/windows-server/identity/export-root-certification-authority-certificate)」をご参照ください。
+ 次の手順を使用して、Active Directory 証明書サービス (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 の [**Start**] (スタート) メニューから、コマンドプロンプトウィンドウ ([**Start**] (スタート) > [**Windows System**] (Windows システム) > [**Command Prompt**] (コマンドプロンプト)) を開きます。

  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 の詳細については、[www.openssl.org](https://www.openssl.org/) をご参照ください。

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

**Amazon Linux 2 WorkSpaces にルート CA 証明書を追加するには**

お客様がスマートカードを有効にするのをサポートするために、この `enable_smartcard` スクリプトを当社の Amazon Linux DCV バンドルに追加しました。このスクリプトは以下のアクションを実行します。
+ ルート CA 証明書を[ネットワークセキュリティサービス (NSS)](https://developer.mozilla.org/docs/Mozilla/Projects/NSS) データベースにインポートします。
+ PAM (Pluggable Authentication Module) 認証用の `pam_pkcs11` モジュールをインストールします。
+ WorkSpace プロビジョニング中の `pkinit` の有効化を含む、デフォルト設定を実行します。

次の手順では、 `enable_smartcard`スクリプトを使用してルート CA 証明書を Amazon Linux 2 WorkSpaces に追加し、Amazon Linux 2 WorkSpaces のスマートカードを有効にする方法について説明します。

1. DCV プロトコルを有効にして新しい Amazon Linux 2 WorkSpace を作成します。Amazon WorkSpaces コンソールで WorkSpace を起動する際に、**[バンドルを選択]** ページで、プロトコルとして **[DCV]** を選択し、いずれかの Amazon Linux 2 パブリックバンドルを選択します。

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` を編集する必要があります。必要に応じて、`auth` の `pam_succeed_if.so` 行のコメントを解除し、サービスのリストを編集します。

   `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 を起動します。

Amazon Linux 2 WorkSpace イメージに SecurityDevices ポリシーを追加することで、ユーザーが Firefox でスマートカードを使用できるようにします。システム全体のポリシーの Firefox への追加の詳細については、GitHub の [Mozilla のポリシーテンプレート](https://github.com/mozilla/policy-templates/releases)をご参照ください。

**ユーザーが Firefox でスマートカードを使用できるようにするには**

1. WorkSpace イメージの作成に使用している WorkSpace で、`policies.json` という名前の新しいファイルを `/usr/lib64/firefox/distribution/` で作成します。

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` が含まれる複数の証明書を有していること。

一般的に、スマートカード認証のために、スマートカードの最初のスロットにマッピングされた証明書を 1 つだけ使用することがベストプラクティスです。

スマートカード上の証明書およびキーを管理するためのツール (証明書およびキーの削除または再マッピングなど) は、製造元によって異なる場合があります。スマートカードの操作に使用できるその他のツールは次のとおりです。
+ `opensc-explorer`
+ `opensc-tool`
+ `pkcs11_inspect`
+ `pkcs11_listcerts`
+ `pkcs15-tool`

**デバッグログを有効にするには**

`pam_pkcs11` および `pam-krb5` の設定のトラブルシューティングを行うには、デバッグのログを有効にします。

1. `/etc/pam.d/system-auth-ac` ファイルで、`auth` アクションを編集し、`nodebug` の `pam_pksc11.so` パラメータを `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` です。

例えば、`mmajor` ドメイン内のユーザー `corp.example.com` の場合、`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 Ticket Granting Ticket (TGT) を正常に取得するはずです。失敗する場合は、正しい Kerberos プリンシパル名をコマンドに明示的に追加してみてください。例えば、ドメイン `mmajor` 内のユーザー `corp.example.com` の場合は、次のコマンドを使用します。

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

このコマンドが成功した場合、WorkSpace ユーザー名から Kerberos プリンシパル名へのマッピングに問題がある可能性が最も高いです。`[appdefaults]/pam/mappings` ファイル内の `/etc/krb5.conf` セクションを確認してください。

このコマンドが成功せず、パスワードベースの `kinit` コマンドが成功した場合は、`pkinit_` ファイル内の `/etc/krb5.conf` に関連する設定を確認してください。例えば、スマートカードに複数の証明書が含まれている場合は、`pkinit_cert_match` に変更を加える必要がある場合があります。