Windows Server 2003 で電子証明書を発行してみる

SERVER


証明書サービス

Windows 2000 Server のころから標準で "証明書サービス" が用意されています。

これを利用することで、Web サイトなど、SSL 対応のサービスを運用したりする時に、通信を暗号化したり、その通信が意図した相手とのものであるかを保証するために利用する、電子証明書を発行することが出来ます。

Windows Server 2003 にもこの機能が備わっていますので、今回はこれを用いて個人的な内部サイトで SSL を実装するために必要な電子証明書を発行してみようと思います。

 

注意点としては、証明書サービスも、Web サービスも、自分が管理しているサーバで稼動しているというところでしょうか。

今回は暗号化を行うことが目的ですのでそれは証明書さえあれば問題はないのですけど、今回の場合だと事実上、所在を証明することは出来ません。これは自分のサイトの確からしさを自分自身で証明しているわけですから当たり前のところではありますけど。

所在の証明が出来ないことによる危険性としては、たとえ通信は暗号化されて覗き見が出来なくなっていても、その送信先のサーバが悪意を持った第三者へのリンクにすりかえられていたりして、予期しない相手にデータが渡ってしまうという可能性があるという感じです。

 

そのような都合から不特定多数を相手に SSL 通信を提供する場合には、データの暗号化のみならず、所在を証明する ためにも第三者機関による証明書があったほうが安全なのですけど、今回は単純に、個人的なサイトを SSL で暗号化したいと思った程度ですので、自前のサーバへ証明書サービスをインストールしてみようと思います。

もっとも、自分の利用するサイトが自分のものであることは自明なことですので、そんなときには所在の証明なんてまったく意味のないものですけど。そのサイトへデータを送信しても、途中で盗み見さえされなければ、基本的にはそれが不正利用されることがないことは自分がよく知ってますしね。

 

証明書サービスをインストールする

Windows Server 2003 には "証明書サービス" が付属していますので、インストールは簡単です。

スタートメニューの 【コントロールパネル】 から、【プログラムの追加と削除】 を選択します。そして、表示されたウィンドウの左下辺りにある "Windows コンポーネントの追加と削除" をクリックすると、"Windows コンポーネントウィザード" ダイアログが表示されます。

 

この中から "証明書サービス" にチェックを入れて次へ進みます。

すると "CA の種類" を選択する画面となりました。CA というのは証明書機関を意味していて、この証明書サービスが稼動されたあとのこの PC ということになります。ここでは自分自身の証明書サービスが、どういった種類の CA として存在させるかの選択です。

 

種類は大きく分けると "エンタープライズの証明機関" と "スタンドアロンの証明機関" とに分けられます。

これらの違いには、発行できる証明書の種類もあるみたいですけど、大きく分けると Windows ドメインレベルでの証明書サービスを提供するか、または個人的な証明書発行用として利用するかの違いといった感じのようです。

証明書を発行してそれをたとえば Web サイトの SSL で利用した場合、そのサイトを参照したユーザは、ブラウザが自動的にやってくれることではありますけど、サイトから証明書を取得して、そもそもその証明書を発行した機関が信頼のおける機関なのかを確認します。確認の仕方はインターネットオプションの中にある証明書の発行元に登録されているかどうかが鍵になります。世界的に有名な VeriSign 社などは標準でここに登録されているため、VeriSign 社によって発行された証明書は信頼にたるものだとブラウザが判断する感じになります。

エンタープライズの証明機関として "証明書サービス" をインストールした場合は、そのドメインに所属している PC 全ての発行元の一覧へ自動的に登録されるとのことですので、ドメイン内部で証明書を利用する場合にとても適した種類なのではないかと思います。Windows ドメインに所属していなかったり、1 台のコンピュータしか所有していないような場合には、スタンドアロンの証明機関としてインストールすれば良さそうです。

 

今回は Windows ドメイン空間での利用を想定していますので、"エンタープライズのルート CA" を選択することにしました。続いてこの CA (証明機関) の共通名の入力です。また、この証明機関の有効期間も設定しておきます。 なお、共有名とは証明機関につける名称で、たとえばブラウザに登録された場合などにはこの名前が表示されるようです。

そして次へ進むと証明書データベースおよびそのログファイルを格納するファイルを尋ねられますので、必要に応じて設定します。なんだか証明書データベースも証明書データベースログも、標準ではどちらとも "C:\WINDOWS\system32\CertLog" と設定されていたのですけど、同じで良いものなのでしょうか…。とりあえず、指定はフォルダ単位なので問題はなさそうでしたけど、個人的には変更する都合があったのでそれぞればらばらの場所を指定しておきました。

次へ進めばあとは、途中で Windows Server 2003 の CD-ROM を要求されたりもしつつ、証明書のコンポーネントのインストールを行ってくれました。

 

なお、証明書サービスをインストールした場合、このコンピュータ名や所属ドメイン情報などが証明機関 (CA) に関する情報として "証明書サービス" に登録されるため、その後でドメインの参加状態など、そういった情報を変更してしまうと、証明書が無効になってしまうとのことでした。

一度サーバを運用してしまえばさほど変える情報ではないでしょうけど、インストールの途中だったり、ドメインコントローラを立ち上げる予定だったりするようなときには、それが終わってからにしておいたほうが良さそうです。また、個人的に利用している分には変更してしまってもまた証明書を発行し直せば良いのでしょうけど、もっと広いスケールで証明書を発行しているような場合にはいろいろと面倒なことが増えてくるでしょうから、安易に変更して余計な苦労を増やさぬように注意しておくと良さそうです。

 

インストール後のちょっとしたお話

証明書サービスを、エンタープライズの証明機関としてインストールした場合、その Windows ドメインに所属する PC 全てにこの証明機関が登録されるとのことでしたけど、このタイミングはそれぞれのクライアントコンピュータが起動したときのようでした。

各クライアントを再起動させるまでは、この証明機関はまだそれぞれには登録されていないので、若干ですけど注意が必要です。

 

そしてひとつ気になったことなのですけど、証明書サービスのインストール後に、認証を伴う Web サイトへアクセスしてみたところ、次のようなエラーが発生してしまってアクセスすることが出来なくなってしまいました。

SSPI コンテキストを生成できません。

これは証明書サービスをインストールしたサーバのみならず、普段から利用していたクライアント PC からも同様で、Web サイト自体も別々のサーバにある 2 つともが同じエラーとなってしまいました。認証を伴わないサイトについては特に問題はないみたいです。

証明書をインストールしたサーバがちょっとおかしい感じなのかと思って再起動してみたところ、そこからは正常にアクセスできるようになったものの、クライアントからは相変わらず参照できませんでした。とりあえず、証明書サービスをインストールしたサーバで、管理ツールの "証明機関" を開いてみては、何か調整できるところがないかと見回してみてもそれらしいものは見つからず…。

 

どうにもならないので、とりあえずもう一度、クライアント PC を再起動しようかなと思って、でもその前にもう一度そのサイトを参照してみたところ、なぜだかその 2 つのサイトとも、正常に参照できるようになっていました。

なんだったのでしょうね、ともあれちょっとした気まぐれだったみたいでよかったです。

 

別のサーバへ証明書管理サイトを登録する

とりあえず IIS が無効な状態の Windows Server 2003 へ証明書サービスをインストールしてみたのですけど、改めて IIS から Web 経由での証明書の発行が行えるように "証明書サービス WEB 登録のサポート" の機能を追加してみることにしました。

IIS が用意されていない段階でこの "証明書サービス WEB 登録のサポート" を有効にしてインストールしてみていたのですけど、そのときは IIS が有効になるまでは使用できませんという通知がなされたので、単純に IIS をインストールすれば良いのかと思ってやってみても、なんだか IIS のインストール自体が中途半端なような気がして、とりあえず証明書の WEB 登録らしきものはなさそうな感じでした。

 

よく判らないままもとりあえず、WEB 登録のサポートを有効化する方法を探してみていたところ、なにやら Windows コンポーネントの追加で "証明書サービス CA" のチェックを入れないで、"証明書サービス WEB 登録のサポート" にチェックを入れてあげることで、WEB 登録のサポートが有効になるとのことでした。

実際にそれをやってみようとしたところ、どうやら既に "証明書サービス CA" がインストールされている場合はアンインストールしないといけないとのこと。どうやらこれは、証明書サービスが導入されていないサーバ上の IIS から登録等の作業を行えるようにする場合のお話のようです。

もう少し調べてみると、IIS 登録前に "証明書サービス WEB 登録のサポート" をインストールしてあった場合には、次のようにして仮想ルートを作成する必要があるとのことでした。

certutil -vroot

 

でも、もともと証明書サービスのところへ IIS を入れる予定はあまりなかったので、ちょうど良いので別の既に IIS が動いているサーバへ "証明書サービス WEB 登録のサポート" を組み込んでみることにしました。

IIS が稼動しているサーバのスタートメニューから、【コントロールパネル】 の 【プログラムの追加と削除】 を選択します。そして、表示されたウィンドウの左下辺りにある "Windows コンポーネントの追加と削除" をクリックすると、"Windows コンポーネントウィザード" ダイアログが表示されます。そして "証明書サービス" を選択して、その中の "証明書サービス WEB 登録のサポート" のみにチェックを入れて次へ進みます。

するとコンピュータ名と CA の入力を求められるので、参照ボタンを押して該当する証明機関を選択します。なお、証明機関がエンタープライズの規定のポリシーモジュールを使用している場合は、このコンピュータの委任を有効にして Kerberos 認証を使用する必要があるとのことです。

これだけ選択したら、あとは必要なコンポーネントがコピーされて、"証明書サービス WEB 登録のサポート" が有効になりました。

なお、このコンピュータからエンタープライズ証明機関に正常に要求を行えるようにするために、管理ツールの "Active Directory ユーザーとコンピュータ" を使用して、"Computers" または "Domain Controllers" から、この WEB 登録サポートが有効になったコンピュータを見つけて、"コンピュータを委任に対して信頼する" にチェックを入れる必要がありそうな感じです。

有効になってみると、IIS の "既定の Web サイト" の中に "CertSrv", "CertControl", "CertEnroll" というそれらしいディレクトリが追加されていました。このうちの "CertSrv" が Web 経由で登録作業を行うための仮想サイトのようです。

 

証明書管理サイトを使用してみる

管理サイト経由で証明書を発行してみようと、いろいろとやっていたら気になることがありました。

とりあえず、管理サイトはインストールしたサイトに続けて /certsrv/ とすることでアクセスすることが出来ます。作成された仮想ディレクトリは "CertSrv" なのですけど、説明書を見る限りだと小文字で指定してくれとのことでしたので "certsrv" としておきます。

そして試しにこのサイトへアクセスしてみると、NTLM によるユーザ認証情報を尋ねられて、そして正常にサイトへ接続することが出来ました。けれど証明書の発行要求を行ってみたのですけど、ユーザー向けの簡単な証明書を発行することは出来たのですけど、Web サイト用の SSL などは発行することが出来ませんでした。

 

すこしいろいろ調べてみると、どうやらこれは WEB 登録のサポートサイトが Internet Explorer 6.0 にて "イントラネットサイト" として登録されていないのが原因のようでした。

実際のところはこれが根本的な理由かどうかは判らないのですけど、ここに登録されていない NTLM 認証が必要なサイトの場合はログオンアカウントによる NTLM の自動認証が行われないなど、取り扱われ方に違いがあるようですし、今回いろいろと試行錯誤した限りでは、ここに登録するかどうかで完全に結果が二分したので、とりあえずの解決策としてはどうやら間違いなさそうです。

 

方法としては、サイトを参照するときにドメイン名を含めずにコンピュータ名だけでサーバを指定するか、または 「インターネットオプション」 の 「セキュリティ」 タグにて、"イントラネット" の "サイト" ボタンを押して、その詳細設定から、この管理サイトの URL をゾーンに追加してやります。もしもたとえば windows.domain という名前の Windows ドメイン全体をイントラネットサイトとしたい場合は http://*.windows.domain/ というような指定方法も可能です。

ともあれこうして管理権限でログオンした PC から、証明書 WEB サービスへアクセスして登録作業を行ってみると、無事、Web サイト用の SSL 証明書も発行することが出来るようになりました。