Active Directoryにおける資格情報の移動とは

Microsoft

2024.08.27

     

今や、クラウドの世界では老害扱いのActive Directory Serverですが、まだまだ需要はあるようで、当社にも様々なお問い合わせをいただくことがあります。基本的なことがらよりも「こんな機能あったっけ?」と唸ってしまうような、質問が多い印象です。そのため、お問い合わせの際に、過去の技術情報が必要になるケースが少なくないため、レガシーOSの技術情報のチェックは、実は欠かせなかったりしています。
Microsoft Q&Aという、Microsoftのコミュニティフォーラムが存在しますが、オンプレミス関連のスレッドでちょっと気になる投稿がありました。移動プロファイルを使っていないのに、端末間で証明書だけが共用できてしまう、意図しない動作に困っている、そんな内容でした。

1. 移動プロファイルによる複数端末でのデスクトップ環境の共用

移動プロファイルとは、ユーザー固有情報(プロファイル)を複数の端末で共用するための機能です。WindowsのUsersフォルダーの中に、ユーザーごとのプロファイルフォルダーが存在することをご存じの方は多いと思いますが、プロファイル内の一部のデータやファイルの「コピー」を、外部の共有フォルダーに配置して、ログオン・ログオフ時にアップデートするしくみです。証明書も移動プロファイルに含まれるデータの一部になります。
証明書というと、SSL(サーバー)証明書が有名ですが、ここではクライアント(ユーザー)証明書やEFS暗号証明書など、クライアントの身元保証やファイル暗号化用の証明書が対象です。たとえばEFS暗号証明書を共用していると、端末A上で暗号化したファイルを端末B上でもそのまま復号・再利用ができるのです。一般的には端末A上で事前に復号(暗号解除)しておかないと、他の端末でファイルの閲覧はできなくなります(そのための機能です)。

2. 資格情報の移動とは

「資格情報の移動」とは、証明書関連(正確にはDPAPI利用領域)だけを、Active Directoryユーザーオブジェクトにコピーして、別の端末にログオンした時、証明書をそのプロファイルに再コピーする、というしくみです。移動プロファイル機能とは独立して、無関係に動作します。
なぜ、このような機能が必要なのでしょうか?Microsoftの資料によれば、本来の目的は「資格情報領域の保護」ということのようです。ご存じのようにWindowsのユーザープロファイルはトラブルを起こすことが少なくないため、複雑な問題が起こった場合は、「削除して再作成」しなければならないことがあります。この際、資格情報としての証明書も喪失してしまうため、暗号化ファイル用証明書などは何らかのかたちで担保する必要があります。Active Directoryにバックアップをアップロードしておくことで、結果的に要件を満たすことになります。
また、副次的な目的として、バージョンが異なるWindows間での共用のケースもある、と筆者は考えています。Windowsは下位互換を非常に大切にしますが、とくにWindows XP以前とWindows Vista以後で、OSの仕組みそのものに大幅な変更が加えられました。ユーザープロファイル構造も変更されたため、これ以降は過去バージョンの互換が使えなくなりました。Windowsバージョンアップの場合、(ローカルの)プロファイルを内部変換して、それをリモートプロファイルとして新たに利用します。旧来バージョンのプロファイルとは統合できないため、両者間でのプロファイルの共有はできません。このような状況でも「なんとか」互換性を保つ方法として、利用することも可能です。

3. 資格情報の移動を設定する

「資格情報の移動」はユーザーの資格情報に関する内容のため、ユーザーグループポリシーで制御します。[グループポリシーの管理]スナップインからの設定です。具体的には、以下の方法になります。

  • [ユーザーの構成]-[ポリシー]-[Windowsの設定]-[セキュリティの設定]-[公開キーのポリシー]-[証明書サービスクライアント-資格情報の移動]を開き、[有効]を設定する

上記については、Microsoftの資料では[Default Domain Policy]で設定するのが推奨ということです。[Default Domain Policy]で設定してしまうと、すべてのユーザー(Administratorも!)で有効になってしまうので、実際はドメイン直下にリンクするGPOを新規に作成して、そこで設定するといいでしょう。セキュリティフィルターで、特定のユーザーやグループを指定することで、分けることができます。

証明書サービスクライアント-資格情報の移動のプロパティ

設定内の各項目に関しては、Microsoftの説明(https://web.archive.org/web/20130413004813/http:/technet.microsoft.com/ja-jp/library/cc771348.aspx)では、以下の通りになっています。

  • ウェブアーカイブのURLとなります。ご自身の責任においてアクセスしてください。
  • 廃棄済み(tombstone)資格情報の最大有効期間(日):このオプションでは、ローカルで削除された証明書またはキーについての移動資格情報をAD DSに残しておく期間を定義できます。
  • ユーザー1人あたりの移動資格情報の最大数:このオプションでは、資格情報の移動で使用できる証明書およびキーの最大数を定義できます。
  • 移動資格情報の最大サイズ(バイト):このオプションでは、指定したサイズを超える資格情報の移動を制限できます。
  • 格納されたユーザー名およびパスワードの移動:このオプションでは、保存されたユーザー名とパスワードを資格情報の移動ポリシーに含めるか除外するかを指定できます。

実際に設定すると、移動ユーザープロファイル(Roaming User Profiles)の一覧からは明確に除かれるというダイアログが表示されます。これを設定するとRUPと設定がカブらなくなる、ということです。

RUP除外一覧の変更

試したところ、確かに端末Aから端末Bのユーザー証明書の移行は、問題なくできました。その際ですが、Active Directoryの対象ユーザーの以下の属性値に、値が設定されたので、反映されていることが分かります。

  • msPKIAccountCredentials
  • msPKIDPAPIMasterKeys
  • msPKIRoamingTimeStamp

属性エディター

反映されるタイミングですが、以下の動作時が対象となります。注意点としては証明書が削除されてしまうと、それも反映してしまうので、アーカイブバックアップとしては使えない点は、ご了承ください。

  • ユーザーのログオン・ログオフ時
  • デスクトップのロック・ロック解除時
  • 資格情報の内容が変更された時

なお、「格納されたユーザー名およびパスワードの移動」項目を有効化して試してみたのですが、バージョンによって、資格情報マネージャーの内容が移動したりしなかったりしました。実際の動作は以下の通りでした。

  • Windows XP SP3:移動しない
  • Windows Vista SP2:移動した
  • Windows 10 22H2:移動しない
  • Windows Server 2019:移動しない

仕方がないので、Microsoftの資料(Certs On Wheels: Understanding Credential Roaming - Microsoft Community Hub)をあらためて読んだところ“Remember, credential roaming only supports x.509 v3 certificates and RSA or DSA key pairs that are stored in the user’s credential store.”とあったので、最近のWindowsでは異なる暗号アルゴリズムがたぶん使われていて、条件に合致しないので移動しないのではないか?などと妄想しています(ちゃんと調べていないので、この点はご了解ください)。
なお、Windows XPでこの項目が有効化しないのは、Microsoftの資料(https://web.archive.org/web/20140906181156/http://technet.microsoft.com/library/cc700848.aspx)に書かれているように、「Windows Vista以降で実装されたから」ということのようです。
これを無効化する場合は、ポリシーを無効化するか、未構成に戻せばよいと思いますが、それでも、上記の属性がユーザーオブジェクトに残ってしまいます。これを削除するのは、残念ながらGUIではできず、コマンドで実行する必要があります。まずはMicrosoftが当時推奨していた、ldifde.exeを使用する方法です。

  • ウェブアーカイブのURLとなります。ご自身の責任においてアクセスしてください。
  • 1.事前に削除したいユーザー名(ここではuser01)を確認しておく
  • 2.ldifde.exe -f dimsdelete.ldf -r "(cn=user01)" -l dn を実行する
  • 3.エクスポートされたdimsdelete.ldf を、メモ帳で開く
  • 4.以下のように内容を変更する
    dn:→変更しない
    changetype:→modifyに変更
    delete:→画面ショットのように追記する。“-”(セパレータ-)を忘れないようにする

    dimsdelete.ldf

  • 5.ldifde.exe -i -f dimsdelete.ldf を実行する
  • 6.ldifde.exe -f dimsverify.ldf -r "(cn=user01)" -l msPKIAccountCredentials,msPKIRoamingTimeStamp,msPKIDPAPIMasterKeys を実行して、この属性値をエクスポートする
  • 7.エクスポートされたdimsdelete.ldf を、メモ帳で開くと属性値が存在しないことが分かる

    dimsdelete.ldf

もう一つの方法は、PowerShellのSet-ADUserコマンドレットで、該当の属性を「未設定」として削除することです。-Clearオプションを指定します。

Get-ADUser -filter * -properties * | Where-Object {$_.msPKIAccountCredentials -and $_.msPKIDPAPIMasterKeys -and $_.msPKIRoamingTimeStamp} | Set-ADUser -Clear msPKIAccountCredentials, msPKIDPAPIMasterKeys, msPKIRoamingTimeStamp

スクリプトは、「対象の3属性すべてに値がある」ユーザーオブジェクトを抽出して、その3属性を「設定なし」に変更する、という単純なものです。Get-ADUserで-propertiesオプションで3属性を含める(このスクリプトでは全属性を含んでいます)ようにしないと、抽出や操作ができませんので、注意してください。
それにしてもActive Directory PowerShellは非常に強力ですね。Windows Server 2025ではActive Directoryも注目されていますので、新たにリスキリングされる方もそれなりにいらっしゃるかと思います。お役に立つかは、わかりませんが、折に触れてご紹介は続けていきたいと思います。

  • 文中の商品名、会社名、団体名は、一般に各社の商標または登録商標です。

Active Directoryにおける資格情報の移動とは