Q

Windows NT 4.0ドメインを管理しています。セキュリティを考え,部署内のWebサーバーとの通信をSSL(Secure Sockets Layer)で暗号化しています。独自の認証局(CA)を構築し,サーバーにはサーバー証明書を,ユーザーの各コンピュータにはクライアント証明書(.pfxファイル)をインストールし,Webサーバーのアクセス時にクライアント証明書を要求するようにしました。

 しかし,NTドメインに所属するWindows XP Professionalのユーザーがパスワードを変更すると,それ以降のログオンからWebサーバーにアクセスしても[ページを表示できません]というエラーになります。Internet Explorerの[ツール]-[インターネットオプション]で証明書を確認すると,きちんとインストールされています。念のために,証明書ファイルを再インストールするとページを開くことができました。なぜなのでしょう。

A

これはWindows XPで新たに追加された機密データ保持のための機能が原因です。

 Windows XPでは,クライアント証明書などユーザー固有の機密データは,データ保護API(Data Protection API)と呼ばれるインターフェースを使って保存しています。利用する場合も,自分自身に関連付けられたマスター・キー(マスター・データ)を使い,やはりこのデータ保護API経由で取り出しています。

 このマスター・キーは本来バックアップを保存しており,パスワードを変更した際にはバックアップから復元する仕組みになっています。しかし,NTドメインに所属するWindows XPでは,このバックアップを生成しません。このため,パスワードを変更すると,利用できるマスター・キーがなくなり,データ保護API経由で呼び出す証明書が使えなくなります(図3)。


図1●NTドメインに所属するWindows XPでパスワードを変更するとマスター・キーが復元できず証明書ファイルを取り出せなくなる

SP1でレジストリを変更すれば可能に
 このようなトラブルが数多く発生したせいか,Windows XPのService Pack 1(SP1)では,この仕様が修正されました。そのため,SP1を適用すれば,この問題を解決できます。

 具体的にはSP1を適用後,レジストリ・エディタ(regedit.exe)で
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\
Cryptography\Protect\Providers\df9d8cd0-1501-11d1-8c7a-00c04fc297ebにMasterKeyLegacyComplianceというREG_DWORD値を追加して,そのデータを1にすれば,NTドメインに所属するユーザーでもマスター・キーのバックアップ生成が可能となります。

 ただし,既に証明書が利用できなくなっているコンピュータに対して,この操作をしても以前の証明書は読み出せません。この変更をした後に再度証明書ファイルをインストールすれば,次回からは問題が発生しなくなります。

永尾幸夫