ラベル Windows Vista の投稿を表示しています。 すべての投稿を表示
ラベル Windows Vista の投稿を表示しています。 すべての投稿を表示

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クオリティ。豆知識、プライスレス。

2009年7月10日金曜日

Vistaでの信頼されたRoot証明書の自動入手の件

先日のエントリーに書いたMSのRoot証明書の配布要件の文書に以下のような記述があった。
Root certificates are updated on Windows Vista automatically. When a user visits a secure Web site (by using HTTPS SSL), reads a secure email (S/MIME), or downloads an ActiveX control that is signed (code signing) and encounters a new root certificate, the Windows certificate chain verification software checks the appropriate Microsoft Update location for the root certificate. If it finds it, it downloads it to the system. To the user, the experience is seamless. The user does not see any security dialog boxes or warnings. The download happens automatically, behind the scenes.
Vistaでは信頼された証明書のリストは、証明書の検証時に自動的にダウンロードされるようだ。気になったので、IEでSSLしているときのCAPI2のトレースログを引っ張り出してきて、チェックしてみた。


確かにパス検証のときに、このURLにアクセスしてauthrootstl.cabを入手しているようだ。
このURLをIEにコピペしてダウンロードしたファイルauthrootstl.cabを展開すると、authroot.stlという証明書信頼リスト(CTL)が入手できる。コイツを開くと以下のように詳細が表示される。


あれ?「リストに署名されている証明書が有効ではありません」ってエラーが出てる。なんだこりゃ。でもって、右下の「署名の表示」を押すと、以下の画面になる。


あぁ、このCTLはAuthenticodeで署名されてるのか。しかも副署名がついてるって事は、なんちゃってタイムスタンプつきか。署名用の証明書と、タイムスタンプ用の証明書をチェックしたところ、両方とも「証明書は要求された使用法では無効です」エラーが出ているようだ。

念のためsigntool.exeで検証してみたけど同じ。
c:\Program Files\Microsoft Platform SDK\Bin>signtool.exe verify c:\temp\authroot.stl
SignTool Error: The signing certificate is not valid for the requested usage.
This error sometimes means that you are using the wrong verification
policy. Consider using the /pa option.
SignTool Error: File not valid: c:\temp\authroot.stl

Number of errors: 1

Authenticode周りは全然詳しくないのでよくわからなくなった。もうちょっと調べてみるか。

2009年5月31日日曜日

IEのCRL取得失敗時の警告

OCSPレスポンダで遊んでいるときに気づいたのだが、IE7/8はSSL通信時にCRLの取得に失敗した場合でも、証明書を正常なものとして取り扱ってしまうようだ。気になって調べたところMicrosoftからKBが出ていた。「KB946323 Internet Explorer 7 does not send you any notification if it cannot obtain the Certificate Revocation List

警告を出す事はできるけどデフォルトでは出ないと。うーむ。デフォルトで出した方がいいと思うんだが...

2009年5月22日金曜日

IIS7によるTLS Staplingを使った失効情報の配布

IIS7とIE8の環境でOCSPのサポートがどんなもんかなーっと調査していたら、失効はうまく認識するのに、一向にOCSP(via HTTP)通信をしている気配が無い。散々いじくった結果、IISがTSL Staplingを使用して失効情報を配布していると言うことがわかった。そんな裏ワザがあったとは!

環境はこんな感じ
  • Windows Server 2008 EE SP1
    * ADDS
    * ADCS
    Enterprise CA
    OCSP Responder
    * IIS 7 & SSL
    SSL用の証明書は失効済み&失効情報をOCSP Responderで配布
    SSL用の証明書にはCDPを含まない
    SSL用の証明書のAIAにOCSP拡張を含む
  • Windows Vista SP2
    * Internet Explorer 8

この環境でIE8を使ってSSL通信をする。SSL用のサーバー証明書は失効されており、失効情報はOCSPを用いて公開されている。また、証明書にはOCSPレスポンダへのポインタしか含んでいないので、OCSP(via HTTP)で失効情報を入手するはずだ(と思い込んでいた)。実際にやってみると証明書の失効自体はうまく検出され、IEに「この証明書は失効されています」と表示される。しかし、以下の現象が私を悩ませた。
  • イベントログのCAPI2の箇所を見ると、「失効の確認」のイベントでOCSPの情報を入手している。
  • Microsoft Network Monitorでトラフィックを観測すると、OCSP(via HTTP)通信をしていない。
  • ファイアウォールでHTTPをブロックしてもOCSP情報が取得できる。
うんうん悩んでたら、去年のPKI Dayでマイクロソフトの人が、OCSPとTLS Staplingについて話していた事を思い出したので、資料(PDF)を探してきた。TLS Staplingというのは、SSLハンドシェイク時にWebサーバーが自分自身の証明書の失効ステータスを送信する方法だそうな。

さっそく、Network Monitorで見ると....あったあった。SSLの最初のハンドシェイクの時に、「Server Hello. Certificate. Certificate Status.」を送っている。コイツだったのか...

IISは特に意識をせずにセットアップしたので、デフォルトでオンになっているということか。ちょっと探しただけでは、オフにする方法は見当たらなかった...どこだぁ。

2009年4月16日木曜日

IEのCRLのキャッシュをクリアする方法

Vista / Windows Server 2008ではcertutil.exeコマンド一発でOK。
certutil.exe -urlcache * delete