Yubikey スマートカード認証実装 (ドメイン環境)

:::note warn
注意
こちらの記事は個人作業の中で備忘録として作成しております。
環境によって手順や動作の差異が生じる可能性のあることをご了承下さい。
:::

# Yubikeyを使用したスマートカード認証を実装する(ドメイン環境)

## Yubikeyとは
YubiKeyは、物理的なセキュリティキーで、オンラインアカウントやシステムに対する二要素認証（2FA）を提供するデバイスである。これを使うことで、アカウントのセキュリティを強化することができる。

## 手順で使用するYubikeyの種類
<table>
  <tr>
    <td> <strong>製品名</strong> </td> <td> Yubikey 5 NFC </td>
  </tr>
</table>

## 導入全体像
今回は、シングルドメインを例にYubikey導入後の作業イメージを簡略に表現しており、詳細な手順の全体像を表現しているわけではない。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/6b632be6-127e-fb27-0d48-21d22b8a3ace.png)


## 導入前の必要な作業
<dl>
  <dt>導入対象環境調査</dt>
  <dd>ドメイン環境であれば、シングルドメインなのか、マルチドメインなのかの適用範囲を決定する。</dd> 
  <dt>適用アカウントの範囲決定</dt>
  <dd>社内のどの管理者アカウントに対して適用するかを決定する。</dd> 
  <dt>スマートカード証明書の登録する主体の決定</dt>
  <dd>管理者による設定か、ユーザー自身による設定なのかを決定する。それにより、手順が異なる。
  基本的にはどちらの作業負担を軽減した方がよいかが一つの基準となる。</dd> 
  <dt>作業者の決定</dt>
  <dd>以下の役割の作業者を決める</dd>
  <dd>
      <table>
          <tr>
            <td> <strong>ADアクセスユーザー</strong> </td> <td> 発行したスマートカード証明書を使用してADにアクセスするユーザー</td>
          </tr>
          <tr>
            <td> <strong>スマートカード代理登録者</strong> </td> <td> スマートカード証明書を代理で登録するユーザー </td>
          </tr>
        　<tr>
            <td> <strong> CA管理者 </strong> </td> <td> 証明書のテンプレート作成・公開する管理者 </td>
          </tr>
          <tr>
                      <td> <strong> AD管理者 </strong> </td> <td> Yubikey導入において必要なAD上の設定を行う管理者 </td>
          </tr>
      </table>
　</dd>
</dl>

## 導入手順
今回は、管理者によるスマートカード証明書の代理発行の手順を整理する。
<table>
  <thead>
    <tr>
      <th>#</th> <th>作業概要</th> <th>説明</th> <th>作業者</th> <th>作業場所</th>
    </tr>
  </thead>
  <tr>
    <td> <strong>1</strong> </td> <td> <strong>Yubikeyドライバーインストール</strong> </td> <td> Yubico公式サイトから必要なドライバーをダウンロードし、必要な端末にインストールする </td> <td> ADアクセスユーザー/AD管理者 </td> <td> ADアクセスユーザーPC/ADサーバー </td>
  </tr>
  <tr>
    <td> <strong>2</strong> </td> <td> <strong>Yubikey Managerインストール及び設定</strong> </td> <td> Yubico公式サイトから必要なアプリをインストールし、Yubikeyに必要な設定を行う </td> <td> ADアクセスユーザー </td> <td> ADアクセスユーザーPC </td>
  </tr>
  <tr>
    <td> <strong>3</strong> </td> <td> <strong>スマートカード証明書のテンプレート作成</strong> </td> <td> Yubikeyに登録するスマートカード証明書のテンプレートを作成する</td> <td> CA管理者 </td> <td> CAサーバー </td>
  </tr>
  <tr>
    <td> <strong>4</strong> </td> <td> <strong>登録エージェント証明書テンプレート作成</strong> </td> <td> 代理登録に必要なエージェント証明書のテンプレートを作成する </td> <td> CA管理者 </td> <td> CAサーバー </td>
  </tr>
  <tr>
    <td> <strong>5</strong> </td> <td> <strong>証明書テンプレートの公開</strong> </td> <td> 作成した証明書テンプレートをドメイン環境へ公開する </td> <td> CA管理者 </td> <td> CAサーバー </td>
  </tr>
  <tr>
    <td> <strong>6</strong> </td> <td> <strong>登録エージェント証明書のインストール</strong> </td> <td> 代理発行を行うために登録エージェント証明書をインストールする </td> <td> 代理登録管理者 </td> <td> 代理登録管理者PC </td>
  </tr>
  <tr>
    <td> <strong>7</strong> </td> <td> <strong>スマートカード証明書の発行</strong> </td> <td> ADアクセスユーザーに対してスマートカード証明書を代理で発行する </td> <td> 代理登録管理者 </td> <td> 代理登録管理者PC </td>
  </tr>
  <tr>
    <td> <strong>8</strong> </td> <td> <strong>スマートカード認証設定</strong> </td> <td> ADアクセスユーザーがスマートカード認証のみを利用出来るように設定する </td> <td> AD管理者 </td> <td> ADサーバー </td>
  </tr>
  <tr>
    <td> <strong>9</strong> </td> <td> <strong>ADへアクセス</strong> </td> <td> スマートカードを利用し、ADへアクセス出来るか動作確認を行う </td> <td> ADアクセスユーザー </td> <td> ADアクセスユーザーPC </td>
  </tr>
</table>


以下、詳細な手順を記載する。
### 1. Yubikeyドライバーインストール
#### 1-1.  [Yubico公式サイト](https://www.yubico.com/support/download/smart-card-drivers-tools/ "YubiKey Smart Card Minidriver (Windows)")からドライバーをダウンロードする。

今回は、以下の赤丸をADアクセスユーザーのPCとADサーバーへDLする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/88bcf635-9456-80fa-58cd-ebeb48a23079.png)

:::note info
情報
ドライバーは、YubikeyのPIN/PUKの管理や証明書の登録などの管理作業に必要なソフトウェアである。
また、基本的には接続元と接続先の全ての端末及びサーバーへインストールが必要である。
:::
#### 1-2. Powershellを管理者権限で起動し、以下のコマンドを実行し、インストールする。
```powershell:PowerShell
msiexec /i YubiKey-Minidriver-4.6.3.252-x64.msi INSTALL_LEGACY_NODE=1
```

:::note info
情報
接続先へリモート接続を行う場合は、INSTALL_LEGACY_NODEのパラーメータの設定の上、ドライバーをインストールする必要がある。
:::

コマンドを実行すると、Yubikey Smart Card MiniDriver×64 Setupウィザードが表示されるので、画面の指示に従い、インストールする。

:::note info
情報
**インストール確認方法**
① Powershellで確認
以下のコマンドを実行し、バージョン情報が表示されれば、OK。
```powershell:PowerShell
Get-WindowsDriver -Online | where {($_.ProviderName -like "Yubico") -and ($_.ClassName -like "SmartCard") -and ($_.Version -like "*")} | select ProviderName,ClassName,Version
```
② デバイスマネージャーで確認
デバイスマネージャーを起動し、[スマートカード]>[Yubikey Smart Card Minidriver]が表示されているかを確認する。表示されていれば、OK。
:::


### 2.Yubikey Managerインストール及び設定
#### 2-1.  [Yubico公式サイト](https://www.yubico.com/support/download/smart-card-drivers-tools/ "YubiKey Smart Card Minidriver (Windows)")からアプリをダウンロードする。
今回は、以下の赤丸をADアクセスユーザーのPCにDLする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/0d78e94e-5e33-3148-9332-f0ef407c41c6.png)

#### 2-2.  DLしたファイルをダブルクリックすると、Yubikey Manager Setupウィザードが表示されるので、画面の指示に従ってインストールする。認識されている場合は、以下の画面のようにYubikeyの情報が表示される。

インストールが完了すると、自動的にYubikey Managerが自動的に起動するので、PC上で正常にYubikeyが認識されていることを確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/05f08fd6-322f-64b6-c65a-1a10bf190333.png)

正しく認識されていない場合は、以下の画面となる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/e052a7cc-dfaa-5b42-0b2d-479c6f31218a.png)

#### 2-3.  YubikeyのPIN/PUKの設定を行う。
PINとPUKに関する説明は以下の通りである。
 <table>
      <tr>
        <td> <strong>PIN</strong> </td> <td> Personal Identification Number</td><td>Yubikeyの中の証明書へのアクセスするために必要な暗証番号。スマートカード認証時も入力が必要である。</td>
      </tr>
      <tr>
        <td> <strong>PUK</strong> </td> <td> PIN Unlock Key </td><td> PINがロックされた場合に解除するために使用する暗証番号。一般的には、AD管理者がYubikeyを使用するユーザーの要請を受けて解除する際に利用することが想定される。今回は設定しないが、設定の際は、証明書をYubikeyに登録する前に事前に登録することを推奨する。そうしない場合、PUKのリセットが出来ない場合がある。</td>
      </tr>
  </table>

① Yubikey Managerで[Application]>[PIV]順に選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/0816806e-7639-09cb-d979-0efc9342200d.png)

② [PIN Management]>[Configure PINs]を選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/e17eda58-c2c0-d45c-a141-451688a75185.png)

➂ [PIN]>[Change PIN]を選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/928a0c81-8d9a-e3cf-010c-4992c7737770.png)

④ 以下の情報を入力し、[ChangePIN]をクリックする。
 <table>
      <tr>
        <td> <strong>Current PIN</strong> </td> <td> Use defaultに☑を入れる。</td>
      </tr>
      <tr>
        <td> <strong>New PIN</strong> </td> <td> 新しいPINを入力する。 </td>
      </tr>
      <tr>
        <td> <strong>Confirm new PIN</strong> </td> <td> New PINと同じPINを入力する。 </td>
      </tr>
  </table>
  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/9c7801a5-156d-84f8-33f5-7c96ee2f7b87.png)

### 3. スマートカード証明書のテンプレート作成
#### 3-1.  証明書テンプレート(certtmpl.msc)を起動する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/39090cc9-e1d0-7dcd-a6a8-3e6e8fcf59fb.png)

#### 3-2.「スマートカードログオン」右クリック＞「テンプレートの複製」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/5e98a675-32c1-e37b-a3e6-4ce6492db7aa.png)


#### 3-3.【全般】タブ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/fdbac576-a671-b173-e381-d3213e5f814b.png)

#### 3-4.【互換性】タブ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/e86bab44-0f04-fcdd-70c9-adc3894b2150.png)

:::note info
情報
ここで設定したOSのバージョンより前の端末とは、互換性がなくなるため、環境内の最も古い端末のバージョンに合わせる必要がある。上記の例だと、Windows Server2008より前の端末はこの証明書を使用出来なくなる。
:::

#### 3-5.【要求処理】タブ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/a4cf1fc8-9780-c862-559e-970109eab715.png)

#### 3-6.【暗号化】タブ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/a43e5110-de0c-bfdf-d732-7c68734f9ca4.png)

#### 3-7.【セキュリティ】タブ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/7340155b-d80e-d65c-1dfe-d1d5e3985cdb.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/71303140-7b44-d521-4ee7-15fc3cc16fea.png)



#### 3-8.【発行の要件】タブ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/e10031c9-2eaa-4b73-3519-cd6dd236cc67.png)

#### 3-9. 登録確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/829279ab-6bc6-5d4e-c265-ecb504dc481e.png)


### 4. 登録エージェント証明書テンプレート作成
#### 4-1.  証明書テンプレート(certtmpl.msc)を起動する。
#### 4-2. 「登録エージェント」右クリック＞「プロパティ」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/69eb0592-4641-fe29-ab8a-10bc42d88f67.png)

#### 4-3. 【セキュリティ】タブ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/fe98c3a3-93f5-ac7a-2755-7c5aca122da0.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/88343c67-d14c-a056-1e41-ec36cef3c117.png)



### 5. 証明書テンプレートの公開
#### 5-1.  証明機関(certsrv.msc)を起動する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/840a0cd7-bd7e-864b-3c7d-7fb594da6a8c.png)

#### 5-2.  「証明書テンプレート」右クリック＞「新規作成」＞「発行する証明書テンプレート」順にクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/bcf9bfba-0c1b-ab90-b181-b9ea86ea7021.png)

#### 5-3.  スマートカード証明書と登録エージェント証明書のテンプレートを選択し、「OK」をクリックして、作業完了。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/723bf2fb-c7e8-4285-b573-6506b44e52c4.png)


### 6. 登録エージェント証明書のインストール
#### 6-1. 証明書マネージャー(certmgr.msc)を起動する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/e94883be-ebf2-6567-b8b0-88d65f22603e.png)

#### 6-2.「個人」＞「証明書」右クリック＞「すべてのタスク」＞「新しい証明書の要求」順にクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/ebd5b39b-ca87-bbeb-4a83-7391fe258b6b.png)

#### 6-3.「次へ」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/3961bfad-3398-5806-6a56-3d3c89479d90.png)

#### 6-4.「次へ」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/1af346c8-e906-5fc5-c28b-6fe2a39ee827.png)

#### 6-5.「登録エージェント」選択して、「登録」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/5adbbba7-7fb9-22ed-6fe6-12339046503b.png)

#### 6-6. 登録状態が成功となれば、作業完了。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/da536435-6062-adbc-c736-7409bb65fc0e.png)


### 7. スマートカード証明書の代理発行
#### 7-1. 証明書マネージャー(certmgr.msc)を起動する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/e94883be-ebf2-6567-b8b0-88d65f22603e.png)


#### 7-2. 「個人」＞「証明書」右クリック＞「すべてのタスク」＞「詳細設定操作」＞「代理登録」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/c70e4c86-3ca5-8589-870a-2cac9d37812b.png)

#### 7-3. 「次へ」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/d9a857cd-cc6e-ee34-4d99-f9441a394302.png)

#### 7-4. 「次へ」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/bb8305af-3cfc-9f45-e89a-4cd77fd160e1.png)

#### 7-5. 「参照」>前の手順で登録した登録エージェント証明書選択し、「OK」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/a6f62f96-d355-c385-cf46-630d3c7e344b.png)

#### 7-6. 登録エージェント証明書の代理登録者名であることを確認し、「次へ」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/8177481a-07ac-032d-b9b3-1fd4b896b815.png)

#### 7-7. スマートカード証明書選択し、「次へ」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/00ff43b6-dbd9-c041-5ff2-7ef67d2afe24.png)

#### 7-8. スマートカード証明書を登録するユーザーを選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/6634f7c6-b6e1-2d01-2ae1-e82115d19b23.png)

#### 7-9. スマートカード証明書を登録するユーザーを選択されていることを確認し、「登録」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/a0f7691e-0b76-5c18-0c46-ce7e5e72f9d0.png)

#### 7-10. PIN入力のポップアップが表示されたら、Yubikeyに設定したPINを入力し、「OK」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/9633d928-b6da-4d14-e965-be49cbff5e24.png)

#### 7-11. 登録状態が成功となれば、「閉じる」で作業完了
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/6eff41c6-e58a-61a9-af0d-2cab7f62b36d.png)

#### 7-12. ADアクセスユーザー名で、スマートカード証明書が登録されていることを確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/df61a044-77b6-d256-2434-cb216fffb0bc.png)



### 8. スマートカード認証設定
#### 8-1. 「Active Directoryユーザーとコンピューター」起動する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/d9ab7ada-7859-92b6-79a6-20b067d96128.png)

#### 8-2. ADアクセスユーザーを選択し、右クリック>「プロパティ」
【アカウントタブ】で対話型ログオンにはスマートカードが必要にチェックを入れて、作業完了。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/16bbf9f0-ba10-aeeb-3c19-038b5acbb2f7.png)


### 9. ADサーバーへ接続

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/abde2bdf-2b3f-99f5-32fb-e1622d6211d7.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/b44b7f94-f042-e7a2-9d3d-f39764a45948.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472352/29865f26-a5e9-9da0-42ee-cfed3e9ee7a6.png)

以降、操作なしにログイン出来ることを確認すると、作業完了。