.
WEB/DB 関連 => Webクライアント認証 > 1.はじめに (本稿の流れ)
Linux 活用ガイド:目次

サーバ構築ガイド

レンタル ガイド

ショップ 構築ガイド

情報漏洩対策

Apache Webサーバ SSLクライアント認証の導入

本稿ではクライアント認証の利用を想定した Apache Webサーバーの構築手順について説明しています。

本稿の目的

クライアント認証とは、接続者がSSLで保護された通信経路でサーバーに接続する際、サーバー側が、クライアント(接続者)に証明書の提示を求める仕組みのことです。クライアントはサーバーが求める証明書を提示しなければ、セッションを確立することが出来ません。

単に通信経路がSSLで保護されるだけの場合、パスワードの総当り攻撃については全くの無防備ですが、クライアント認証を導入することで、パスワードの総当たり攻撃を回避する事が出来ます。

本稿では、不特定多数の第三者に公開するサービスを提供するサーバーではなく、自組織における限られた用途で使用する Apache Webサーバにおけるクライアント認証の導入手順について説明しています。

例えば、管理者が、外部のネットワークから phpMyAdmin などのブラウザを利用したGUIツールをつかって重要な資源に外部のネットワークからアクセスする際に、セキュリティーレベルを引きあげるといった活用を想定しています。

第三者の不特定多数の利用者に提供するサービスではないのでご注意ください。自分で作成した証明書を第三者に配布することを推奨してると、以前、言いがかりをつけられたことがありますので。あくまで、個人、あるいは限られた組織内など利用者が限定される用途での利用目的となります。

本稿の流れ

単にSSL通信を実現する場合は、自己署名型の証明書で目的は果たせますが、クライアント認証には、認証局によって署名された証明書を作成できる環境が必要になります。

具体的には、ベリサインのような公的な認証局ではなく、自分で認証局(CA)を構築し、その認証局が署名して作成された証明書を作成する必要があります。

これらの作業は、全て OpenSSL を使って実現することが出来ますが、OpenSSL 自体の操作が煩雑な上、CA管理者、サーバー管理者が、それぞれの立場で操作を行う必要があります。大まかな作業の流れは以下の通りです。

  1. 認証局の立ち上げ
  2. サーバー証明書の作成
  3. クライアント証明書の作成
  4. Apache2 Webサーバ設定例(クライアント認証有効化)
  5. クライアント側の設定(Windows)

"サーバ管理者"、"認証局"、"クライアント(接続者)"、それぞれの立場で行う作業について、段階を追って説明しています。右上のメニューにページが整理されています。

ここでは Apache Webサーバを例にしていますが、基本的にSSLクライアント認証に対応しているサーバーであれば手順は同じです。

ただ、OpenSSL で証明書を作成する際に指定する証明書のタイプが異なる場合も考えられるので、本稿の手順で作成した証明書がそのまま流用できないことも考えられます。その際は証明書のタイプを適切な物に変更して同じ手順で、必要な証明書を新たに作成する必要が出てくると思います。

SSLによる通信経路の暗号化について

SSL通信といえば一般的に暗号化による通信の保護が目的、という認識を持たれる方がほとんどではないかと思います。実は、SSLは暗号化と同時に、第三者が、通信先の相手が本物であるかどうかを担保する重要な役割があります。

その仕組みは、公の第三者である認証機関によって署名された、つまり、そのSSLサーバーが、公の第三者によって発行された証明書を利用してSSL通信をおこなうことで運営者の身元を担保しています。

ただし、このような公的機関によって署名されたサーバー証明書を使ったSSL通信に対応したサーバーを運用する場合、ドメインと同じで、証明書の取得と更新を行っていく必要があるのでランニングコストが発生します。

ネットショッピングや個人情報をインターネットで取り扱うなど、不特定多数の第三者を対象としたサービスを提供するサーバーを構築する場合には欠かせませんが、

個人や自組織内の限られた利用においては、接続するサーバの身元担保よりも、通信経路の暗号化に主眼が置かれるので、必ずしもランニングコストを掛けて公の認証局から証明書を取得する必要はありません。

独自に立ち上げた認証局を使う場合のリスク

OpenSSLを使用して、自分でサーバーのSSL化に必要な証明書を準備する場合、この様なサイトにアクセスするとブラウザは警告を出します。以下は、Chrome のケースです。他のブラウザでも似たような警告が表示されます。

Chromeの警告画面

ベリサインなどが、代表的な認証局の一つですが、ブラウザには、このような信頼できる認証局が予め登録されています。そのため、SSLで通信経路が保護されたサイトにアクセスしても警告は出しません。

しかし、本稿で説明しているような自分で OpenSSL を使用して作成した証明書を用いて、サーバーを SSL 化した場合、ブラウザでアクセスするとこのような警告が表示されます。

Firefox の警告画面

最近のブラウザは、このようなSSL接続について、例外として認めるように、つまり、今後、警告を出さないように、恒久的に信頼できる認証機関として登録するようにその場で例外登録することが出来ます。

この場合もセキュリティの面で問題もあります。万が一、自分で構築した認証局の秘密鍵が外部に漏洩すると、全く同じ認証局によって作成された証明書を使ったサイトが外部に立ち上がってしまいます。

ブラウザは全く警告を出さなくなるばかりか、本家のSSL通信の暗号保護が全く意味を成さなくなってしまいます。そのため、CAの秘密鍵は絶対に外部に流出しないように厳格な管理を行う必要があります。

また、前者のCAを信頼してもらうリスクについては、不特定多数の利用者に対してリスクを強要する行為に他ならないので、決して不特定多数の第三者に提供するサービスでの利用は行わないで下さい。

オレオレ証明書は他人に対してオレオレですが、自分で自分に対してはオレオレと言う人はいません。あくまで不特定多数が接続して利用するSSLサーバーを対象とした説明ではありませんのでご注意下さい。

繰り返しになりますが、個人情報を扱うショッピングサイトの運用など、不特定多数の第三者にサービスを提供する場合は、必ずベリサインなどの公の機関から、サーバー証明書を取得してSSLサーバーを構築して下さい。

bottom_mark
ページ最上部
ページ最上部 前のページ