LoginSignup
4
0

NPS と 802.1x 認証 で注意すること

Last updated at Posted at 2023-11-02

はじめに

Windows Server の ネットワークポリシーサービス (NPS) で 802.1x 認証 を構成する場合は、以下の画面のような設定を行うと思います。
image.png

この構成を行う際に、ネットで各種ドキュメントを見ても、その内容と この画面の設定項目とを突き合わせてみても、どう解釈すればよいのか理解するのに とても苦労しました。

この記事では、その点について 説明したいと思います。

注意すべき点

802.1x 認証 を行う際に出てくる認証方式がありますが、呼び名について、著しく表記ゆれがあります。
まずは、そのことを意識しておかないと、各種ドキュメントを読み解けません。

以下のドキュメント (URL:認証方式)で説明されている認証方式 (EAPの種類) は何種類かありますが、以下の3項目に着目しました。

  • EAP-TLS
  • EAP-MSCHAPv2
  • 保護された EAP (PEAP)

以下の認証方式は、(カッコ内)の理由にて除外しました。、

  • EAP-TTLS(現時点で非サポート)
  • EAP-SIM、EAP-AKA(SIMカードの認証で使う。MSCHAPv2 や 証明書認証では使えない)
  • TEAP(Windows10 (2004) & Windows Server 2022 以降のみとの制限あり)

(URL:認証方式)
https://learn.microsoft.com/ja-jp/windows-server/networking/technologies/extensible-authentication-protocol/network-access?tabs=eap-tls%2Cserveruserprompt-eap-tls%2Ceap-sim#authentication-methods

3種類の認証方式に記載されている説明と解釈

色枠外は、上記の (URL:認証方式)のサイトからの抜粋です。
色枠内は、私の見解です。

(EAP-TLS)

EAP トランスポート層セキュリティ (EAP-TLS):
相互認証のために証明書と組み合わせて TLS を使用する標準ベースの EAP メソッド。
Windows でスマート カードまたはその他の証明書 (EAP-TLS) として表示されます。

MSCHAPv2認証 には使えない。
クライアント証明書 を使った認証には使える。
なお、セキュリティを考えると PEAP を使った方が良い。

(EAP-MSCHAPv2)

EAP-Microsoft チャレンジ ハンドシェイク認証プロトコル バージョン 2 (EAP-MSCHAP v2):
認証にユーザー名とパスワードを使用する MSCHAP v2 認証プロトコルをカプセル化する Microsoft が定義した EAP メソッド。
Windows にはセキュリティで保護されたパスワード (EAP-MSCHAP v2) として表示されます。
EAP-MSCHAPv2 は、VPN のスタンドアロンの認証方法として使用できますが、有線/ワイヤレスの場合は内部メソッドとして使用することしかできません。

EAP-MSCHAPv2 は、VPN の認証には使えるけど、802.1x 認証 では利用できない点に注意。
802.1x で、ユーザーID + パスワード の認証を使いたい場合は、PEAP (MSCHAPv2) を使う必要アリ!

(保護された EAP)

保護された EAP (PEAP):
TLS トンネル内に EAP をカプセル化する Microsoft が定義した EAP メソッド。
TLS トンネルは、それ以外の方法では保護されない可能性のある、内部 EAP メソッドをセキュリティで保護します。
Windows では、内部メソッドとして EAP-TLS と EAP-MSCHAP v2 がサポートされています。

PEAP は、保護された EAP(Protected EAP)という意味で セキュリティが高い。
さらに、内部メソッドとして、EAP-TLS と EAP-MSCHAPv2 がサポートされていて、選んで利用できる。

EAP-TLS、EAP-MSCHAPv2 と、PEAP が並列で分類されているのに、PEAP の内部メソッドにも EAP-TLS / EAP-MSCHAPv2 が登場するので、混乱の元になっています。

分かりやすく例えると「HTTP/HTTPS」と「SSL-VPN で暗号化した HTTP/HTTPS」を並列で比較しているような感じだと思ってください。
これを区別しようとすると、HTTP、HTTPS、SSL-VPN という3種類のプロトコルがあり、SSL-VPN を使った場合に、さらに VPNトンネル内を経由した通信を区別するために、SSL-VPN (HTTP) , SSL-VPN(HTTPS) と表現します。

表記のゆれ(具体例)

表にまとめると、こんな感じでしょうか・・・・

暗号の強度 クライアント証明書による認証 IDとパスワードによる認証
EAP
EAP-TLS
EAP-TLS EAP-MSCHAPv2
★802.1x 認証 では使えない
"保護されたEAP"
Protected EAP
PEAP
EAP-PEAP
PEAP (EAP-TLS)
PEAP-TLS
PEAP (EAP-MSCHAPv2)
PEAP-MSCHAPv2
MSCHAPv2
※さまざまな略し方が存在
  • EAP-TLS
    PEAP ではなく、保護されていない方の EAP-TLS の事を指しています。
     

  • EAP-MSCHAPv2
    PEAP ではなく、保護されていない方の EAP-MSCHAPv2 の事を指しています。
    ★802.1x 認証 では使えません。
     

  • PEAP (EAP-TLS)
    PEAP で 保護された EAP-TLS のこと
    以下は、全部 同じ意味(PEAPを略してしまうと 意味が違ってしまう)
     PEAP (EAP-TLS)
     PEAP-TLS
     

  • PEAP (MS-CHAPv2)
    PEAP で 保護された EAP-MSCHAPv2 のこと
    以下は、全部 同じ意味
     PEAP (EAP-MS-CHAPv2)
     PEAP (EAP-MSCHAPv2)
     PEAP (MS-CHAPv2)
     PEAP (MSCHAPv2)
     PEAP-MS-CHAPv2
     PEAP-MSCHAPv2

これらも、同じ意味を指している場合があります。
 EAP-MS-CHAPv2
 EAP-MSCHAPv2
 MS-CHAPv2
 MSCHAPv2

"PEAP" が前提で説明されている文章内で、"PEAP" を省略して書かれているサイトなどを見たことがあります。注意深く見てください。

  • その他の表現
     EAP-PEAP
      見慣れない表記ですが、PEAP の事です。

例えば、以下のサイトでは、「EAP-TLS と EAP-PEAP」の認証シーケンスの違いについてを説明しているだけです。PEAP (EAP-TLS) と PEAP (MSCHAPv2) については 触れられていませんが、両方とも PEAP なので、認証シーケンスは同一だと解釈しましょう。
https://nwengblog.com/802-1x-sequence/

この表記のゆれを踏まえて 各種ドキュメントを読んでいくと 内容が理解できるようになります。いや~ホントに分かりづらいです💦

NPS の設定画面を深堀りしてみる

前章までの前提を理解してもらうと、NPS の設定画面も理解できるようになります。

「ID + Passで認証」をさせたい場合は、PEAP (EAP-MSCHAPv2) を構成する必要があります。その場合は 下図の 緑枠の項目(PEAP) を追加したあと「編集」ボタンを押して、水色枠のウィンドウを開きます。
このウィンドウのタイトルは、赤下線のように "Protected EAP" になっているので、PEAP の事です。
この画面で、PEAP の内部メソッドを設定できるので、ここで 黄枠の "EAP-MSCHAPv2" を追加します。
こうすることで、802.1x 認証 で、ID + Passでの 認証 (MS-CHAPv2) を利用できるようになります。
image.png

上記の図の 紫枠 の箇所の英語については、NPSサーバー内の どの サーバー証明書 をクライアントに提示するのかを設定しています。クライアントPC の 信頼されたルート証明機関のストア には、この サーバー証明書 と チェーンとなる ルート証明書 がインポートされている必要があります。
※後述する「NPS + 802.1x 認証における 証明書要件(サーバー証明書)」の章で用意する証明書の事です。

以下に 翻訳結果を載せておきます。
(英文)
Select the certificate the server should use to prove its identity to the client.
A certificate that is configured for Protected EAP in Connection Request Policy will override this certificate.
(日本語:DeepL翻訳)
サーバーがクライアントに身元を証明するために使用する証明書を選択します。
接続要求ポリシーで保護された EAP に設定されている証明書は、この証明書に優先します。

オレンジ枠の「セキュリティで保護されたパスワード(EAP-MSCHAPv2)」ですが、これは PEAP ではありません。

オレンジ枠の「EAP-MSCHAPv2」を追加した設定を行う事は可能なのですが、802.1x 認証 では利用できません。追加しないようにしましょう。
この設定を使って MSCHAPv2 の動作を検証しても 成功できません。ハマりどころの1つです。

クライアント側の 設定も見てみると、"EAP-MSCHAPv2" という選択肢が無いので、NPSサーバー側とクライアント側とでプロトコルを合わせられないのも原因と思います。
image.png
上記の赤枠の「設定」を押すと、以下の画面で PEAP の内部メソッドを選択できます。
image.png

NPS + 802.1x 認証 における 証明書要件

サーバー証明書について

NPSサーバー を使って、802.1x 認証 を構成する場合には、サーバー証明書 が必要です。
※PEAP (MSCHAPv2)、PEAP (EAP-TLS)、EAP-TLS の どの方式を使う場合でも、サーバー証明書が必要です。

(URL:NPSサーバーに必要な証明書の要件)
https://learn.microsoft.com/ja-jp/windows-server/networking/technologies/nps/nps-manage-cert-requirements#minimum-server-certificate-requirements

上記の要件で作成された サーバー証明書 が、NPSサーバーにインポートされていること
この証明書のチェーンとなる ルート証明書 が、クライアントPC にインポートされていること

(URL:ネットワーク ポリシー サーバーで利用されるサーバー証明書について)
紫枠の説明で取り上げた NPSサーバーでの サーバー証明書 のバインドに関する説明です。
以下の記事を参照して、ポリシーで 意図した サーバー証明書 を掴んで(バインド)いるか確認するようにしましょう。
※Microsoft社としても、手動バインド を推奨しているようです。

ID + パスワード認証の場合 (MS-CHAPv2)

クライアント証明書 の構成は不要です。

ユーザーの利用シーンとしては、2通りあります。
① ネットワーク接続時に 手動で ID+Pass を入力
 この利用方法を想定している場合は、大きな問題はありません。
 WiFi アクセスポイントに接続する際に ID と パスワード の入力が求められます。

② OS の ログオンID を引き継いで SSO で認証する(接続時の手入力不要)
 SSO が動作しなかった場合は、手入力 に切り替わるので ① と同じ動作になります。

SSO が動作するためには、クレデンシャルガードが "無効" である必要があります。
この要件があるため、端末によって SSO の動作にバラつきが発生して、利用者ごとの個別対応での原因究明に苦労する可能性があります。
"あのPCは、SSO で動作するのに、なぜ この PC は手入力が必要なのか?" など

クレデンシャルガードは、条件によって 動作にバラつきが生じます。

  • ハードウェアによって、対応の有無があります(メーカー、モデル、マシン購入時期の差)
  • BIOS の設定で、有効/無効 の設定があります(利用者が意識せず 変更してたりする)
  • Win10 と Win11 で OS の既定値が 異なる(Win10は有効、Win11は無効)

NPS + 802.1x (MS-CHAPv2) の構築手順は、以下に記載しました。
なるべくわかりやすく、誰でも構築できるように記載したつもりです。
ぜひ、参照ください!

以下の記事は、私が 上記の記事を書く前に、初めて検証して ハマった際に 参考にしたサイトです。

(URL : WPA2-Enterpriseを使用したRADIUS認証の設定)
https://documentation.meraki.com/%E6%97%A5%E6%9C%AC%E8%AA%9E/Wireless_LAN/Encryption_and_Authentication/Configuring_RADIUS_Authentication_with_WPA2-Enterprise

(URL : NPS、ワイヤレスLANコントローラ、およびワイヤレスネットワークを構成する)
https://www.cisco.com/c/ja_jp/support/docs/wireless/5500-series-wireless-controllers/115988-nps-wlc-config-000.html

(URL:無線LANをActiveDirectoryアカウントで認証する)
https://blog.web-arena.com/authenticate-wifi-with-activedirectory-account/

クライアント証明書について

クライアント証明書 で認証する場合にのみ必要です。
※PEAP(EAP-TLS) or EAP-TLS の場合

クライアント証明書を使った認証は、ユーザーが ID と パスワード の入力を意識することなく、ネットワーク にアクセスできます。

管理者が端末キッティング時に証明書を埋め込んでおき、その端末からしか接続できないように構成する事も可能です。(MSCHAPv2だと、社内PC 以外からでも接続できてしまう)

以下の2種類のうち、いずれかの証明書を発行して 利用します。

  • ユーザー証明書(サブジェクトの別名に UPN が含まれていること)
  • コンピューター証明書(サブジェクトの別名に クライアントの FQDN が含まれていること)

(URL:クライアント証明書の要件)
https://learn.microsoft.com/ja-jp/windows-server/networking/technologies/nps/nps-manage-cert-requirements#minimum-client-certificate-requirements

上記の要件で作成された クライアント証明書 が、クライアントPC にインポートされていること
この証明書のチェーンとなる ルート証明書 が、NPSサーバー にインポートされていること

クライアント証明書を使う場合は、証明書に「サブジェクトの別名」 が含まれている必要がありますが、取り扱いには注意が必要です。以下の記事で 説明していますので、参考にしていただければと思います。

構築手順については、以下の記事が とても分かりやすく纏められていると思います。お急ぎの方は こちらを参考に構築されると良いと思います。
この構成は、私もまだ 構築&テストが完了していません。動作確認まで終えたら、別途 手順の記事を投稿してみたいと思います。

トラブルシューティング

構成したあと、うまくいかない場合の切り分けのために、ログの場所などが説明されています。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0