2009年12月6日日曜日

WindowsでL2TP/IPSecで証明書ベースの認証を行うときの注意点

WindowsでL2TP/IPSecを使ったVPNを構築していて証明書関連でハマったのでメモ。

機器構成はVPNルーター1台とWindows XP/7の2台のクライアントだけ。VPNルーターで簡易なCA(認証局)が稼働していて、そのCAが発行した個人証明書を各Windows機にインストールしてL2TP/IPSecの認証に使用する。今回はCAは自己署名をしているので、CA証明書も併せてインストールした。

現象
VPN接続を開始するとすると以下のエラーが出る。

Windows XPの場合:
エラー 786: このコンピュータには、セキュリティの認証に必要な、有効なコンピュータ証明書がないため、L2TP 接続に失敗しました。
Windows 7の場合:
エラー 766: 証明書が見つかりませんでした。IPSec 上で L2TP プロトコルを使う接続では、コンピューター証明書をインストールする必要があります。
Vistaは確認していないけど、たぶん7と同じだろう。エラーメッセージを素直に解釈すると、どうやらコンピューター証明書と言うのをインストールしなければならないようだ。なんだそれ?どの証明書だ?

対策
このエラーが出た場合は認証に使用するVPNクライアント用の証明書のインストール先が間違っている場合がある。通常はコンピューターの証明書ストアにVPNクライアント用の証明書をインストールする。これはマイクロソフトのKB314831でも書かれている。

上記のKBの通りにしても解決しない場合は(今回はそうだったわけだが)、VPNクライアント用の証明書を、現在のログイン中のユーザーの「個人」の証明書ストアと、ローカルコンピュータの「個人」の証明書ストアの両方にインストールしてみてほしい。また、ルート証明書も同様に両方の「信頼されたルート証明機関」にインストールする。これで認証がクリアできる場合がある。

つーか「コンピューター証明書」ってローカルコンピューターの「個人」の証明書ストアにインストールされたVPN認証に使う証明書の事だったのか。始めはローカルユーザーの証明書ストアにVPN用の証明書をインストールしてたから迷った迷った。エラーメッセージに惑わされてハマっている人もいるんじゃないかと。

設定は簡単だが、その設定にたどり着くまでが長い。知っていれば3分。知らなければ3時間。それがWindowsクオリティ。豆知識、プライスレス。