Windows Server 2016 ADFSサーバーによる証明書認証

皆さんこんにちは。国井です。
だいぶ前の話になりますが、Azure ADの概念実証(PoC)に利用可能なプレイブックがマイクロソフトさんから公開されました。

■Azure Active Directory の概念実証戦略: 概要
https://docs.microsoft.com/ja-jp/azure/active-directory/active-directory-playbook-building-blocks#generic-ldap-connector-configuration

PoCの項目の中に「証明書ベースの認証を構成する」というのがありますが、Azure ADだけで実現する内容ではなく、実際にはADFSサーバーを使っています。最近、ADFSサーバーで証明書を使うシナリオはWindows Hello for Businessが絡んでくる関係で、色々なパターンがあるのですが、ここで解説しているシナリオはADFSでシングルサインオンするときに、証明書を使った多要素認証を行うパターンを紹介しています。
(以下の図では、ADFSサーバーにアクセスしてからの流れだけを紹介しています)

ADFSを使った証明書認証は以前にも「ADFSによる多要素認証の設定」で紹介させていただいたのですが、だいぶ時間が経過していることやQ&Aサイトなどで「国井のブログを見たとおりに設定したけど、うまくいかない」などの書き込みを見かけることがあり、
Windows Server 2016バージョンを改めて、まとめておこうかなと思ったわけです。

■ ■ ■

Windows Server 2016の証明書認証の設定は、以前のバージョンと同じく多要素認証の設定で証明書認証を利用するように定義します。
ADFS管理ツールから[サービス]-[認証方法]から[多要素認証方法の編集]で証明書認証を選択します。

image

また、同じ画面から[プライマリ認証方法の編集]で証明書認証を利用するように設定します。

image

その他、多要素認証を使うときは、証明書利用者信頼のアクセス制御ポリシーで、MFAを利用するようなポリシーを選択しておきます。

image

ADFSサーバーの設定はこれだけ。

一方、認証局の設定は基本的に「ADFSによる多要素認証の設定」で紹介した

・証明書サービスのインストール
・クライアントコンピューターへのユーザー証明書のインストール

の2つの項目通りに設定していただければ結構です。
このときに、認証局の設定ミスあるあるとして、

・CRLを発行・公開していない
image

・物理的にアクセスできない場所をCRLのパスとして指定している
(CDPとAIAにLDAPのパスがデフォルトに入っていますが、LDAPってFWの外からアクセスできないですよね)
image

などがあります。このあたりをちゃんとチェックしておきましょう。

以上が出来上がれば、証明書認証の設定は完了です。実際にOffice365のサイトにアクセスしようとすると、ADFSサーバーによるSSOプロセスの中で証明書認証が実行され、証明書を持っていれば勝手にサインインが完了し、証明書を持っていなければ認証エラーになります。

image

また、Windows Server 2016からの機能として、Webアプリケーションプロキシ経由のアクセスに証明書認証だけを使ったアクセス方法というのがあります。

image

ADFS管理ツールのプライマリ認証方法の設定で、エクストラネットの認証方法に[証明書認証]だけを選択することで、Webアプリケーションプロキシ経由のアクセスにユーザー名/パスワードを使わず、証明書だけを使って認証することができるようになります。今までのADFSって、Webアプリケーションプロキシを経由することで必ずユーザー名/パスワードを入れていたので、「なんだよ、シングルサインオンじゃないじゃん」って言ってた人もいると思います。しかし、Windows Server 2016からは場所を問わず、ユーザー名/パスワードを入力することなく認証を済ませることができるようになるのです。