第12回 SSLによる安全なWebサイト作り
一志 達也<ichishi@pochi.tis.co.jp>TIS株式会社
2002/1/11
独自認証機関の構築
先の説明からも分かるように、広く一般に公開するサーバであれば、Webブラウザに証明書が組み込まれている信頼性の高い認証機関を利用する方がいいだろう。しかし、イントラネット内の暗号化など、対象とする範囲が限られているなら証明書の発行費用などを節約したくなる。そうした場合は、証明書や認証機関を独自に作成することもできる。
独自に認証機関を構築して証明書を作成した場合、Webブラウザに認証機関の登録を行う必要がある。この辺りの説明も「PKIの基礎を理解しよう!」に詳しいが、ここでは認証機関の構築方法などを説明しておこう。
認証機関は、OpenSSLの機能を利用して構築する。以下では、OpenSSLをデフォルトのディレクトリ(/usr/local/ssl)にインストールしているものとして話を進める。
OpenSSLをインストールしたディレクトリにあるmiscディレクトリには、CA.shというシェルスクリプトが用意されている。このスクリプトはいくつかのオプションパラメータを持ち、-newcaオプションで認証機関を構築できる。具体的には、認証機関のファイルを格納するディレクトリ(デフォルトは「demoCA」)を作成し、証明書ファイルと秘密鍵ファイルを作成する。
ファイルを作成するディレクトリやそのほかのオプションを変更したい場合は、CA.shを直接編集する。特に問題なければ、そのまま利用しても構わないだろう。ただ、miscディレクトリの中に作成するのは好ましくないので、CA.shを/usr/local/sslの下にコピーして実行する。また、認証機関の作成時にOpenSSLをインストールしたディレクトリの「openssl.cnf」が参照される。こちらも変更の必要は特にないと思うが、一通りチェックしておこう。
$ cp /usr/local/ssl/misc/CA.sh /usr/local/ssl/ |
上記のように実行すると、対話形式で処理が行われる。
CA certificate filename (or enter to
create) |
以上のように、すべての質問に回答すると認証機関の作成が終了する。特にディレクトリ名などを修正していなければ、/usr/local/ssl/demoCAにファイルが作成されるはずだ。cacert.pemは認証機関の証明書、privateディレクトリ内のcakey.pemは認証機関の秘密鍵のファイルとなる。
SSL導入の下準備
独自に認証機関を構築する場合も、外部の認証機関を利用する場合も、ここから先の作業は共通である。すなわち、
- 鍵の準備
- 証明書の準備
- Apacheの設定変更
を行う。
■鍵ファイルの作成
鍵ファイルの作成には、やはりOpenSSLを利用する。
$ /usr/local/ssl/bin/openssl genrsa
-rand file_name -des3 -out /usr/local/ssl/serverkey.pem 1024 |
上記で指定しているオプションを順番に見ていこう。
-outオプション
サーバの秘密鍵ファイル名の指定
-des3オプション
暗号化の方式。このほかに「-des」と「-idea」が指定できる。des3は最も強力で、信頼できる暗号方式だ
-randオプション
鍵の生成に用いるランダムなデータとして利用するファイル名。何でも構わないので、適当なテキストファイルを指定する。例えば、何かのログファイルや設定ファイルなど
1024
生成する鍵のbit数。デフォルトは512bitだが、ここでは1024bitにしている。長ければ長いほど鍵を破られる可能性は低くなるが、パフォーマンスは劣化する。512bitか1024bit程度が適当であろう
コマンドを実行すると、認証機関構築のときと同様にパスフレーズの入力を求められる。これは、鍵を参照するときの認証にも利用されるため、鍵を組み込んだApacheを起動するたびにパスフレーズが必要となる。つまり、Apacheを自動起動するにも毎度パスフレーズの入力を求められるということだ。これでは不便というのであれば、鍵の生成後にパスフレーズを解除することもできる。ただし、パスフレーズによるセキュリティがなくなるので、鍵の内容を盗まれやすくなることに注意したい。
パスフレーズを解除する方法は簡単だ。パスフレーズを入力して鍵の内容を参照し、それをファイルに直接保存するだけだ。具体的には、OpenSSLのコマンドを使って次のようにして行う。
$ /usr/local/ssl/bin/openssl rsa -in /usr/local/ssl/serverkey.pem
-out /usr/local/ssl/serverkey.pem |
これによって、-inで指定した鍵ファイルを読み込み、-outで指定したファイルに書き込む。上記の例では入出力共に同じファイルを指定しているから、最初に作成した鍵ファイルが上書きされる。上書きしたくないなら、別のファイル名を指定すればよい。
■認証機関への申請書(CSR)の作成
サーバの鍵ファイルが作成できたら、その鍵を基に認証機関への申請書ファイルを作成する。認証機関は、この申請書ファイルに基づいて署名付きの証明書を発行してくれる。もちろん、実際にはファイルのみでの審査ということはなく、必要書類の提出や契約も併せて行われる。
ファイルベースでの申請書の作成は、同じくOpenSSLを使って行う。申請書ファイルの作成は、独自に作成した認証機関を使う場合でも必要である。
$ /usr/local/ssl/bin/openssl req -new
-days 365 -key /usr/local/ssl/serverkey.pem -out /usr/local/ssl/csr.pem |
| コラム CA.shによる鍵ファイル/申請書の作成 |
| ちなみに、サーバの鍵ファイルを作成する作業と認証機関への申請書の作成作業は、前述のCA.shでも実行できる。その場合は、CA.sh
-newreqとすればいいのだが、鍵ファイルの長さなど詳細な指定はできない。指定したい場合はシェルスクリプトを修正することになる。 その手間を考えると、個別にopensslコマンドを実行するのと大差ないだろう。 |
コマンドを実行すると、国別コードや電子メールアドレスなど、認証機関を作成するときと同様の入力を求められる。それらに回答していくと、-outオプションで指定したファイルに認証機関への申請書ファイルが作成される。このとき、-keyオプションには作成済みの鍵ファイルの名称を、-daysオプションには発行してもらう証明書の有効期限を指定する。
■証明書の作成
申請書を作成したら、それを認証機関に送付して署名してもらう。実際に契約するのでなければ、独自に認証機関を構築するか、無料の試行サービスを利用するといいだろう。日本ベリサインでは、試行サービスを提供している。詳しくは、http://www.verisign.co.jp/welcome/try_verisign.htmlを参照していただきたい。
今回の例では、先ほど作成した独自の認証機関を使って証明書を作成することにする。
$ /usr/local/ssl/bin/openssl ca -in
/usr/local/ssl/csr.pem -keyfile /usr/local/ssl/demoCA/private/cakey.pem
-cert /usr/local/ssl/demoCA/cacert.pem -out /usr/local/ssl/cert.pem |
コマンドを実行すると、鍵の作成時に指定したパスフレーズの入力を求められる。パスフレーズを入力すると、証明書に記載する情報(入力した国別コードや組織名称など)が表示され、本当に証明書を作成するかどうか確認される。そこで「y」を入力すれば、証明書が作成される仕組みだ。作成されたファイルを参照してみると、その中には証明書の情報として、組織名などが記載されていることが分かるだろう。
なお、ここで使っているオプションは、
-inオプション
作成した申請書ファイル
-keyfileオプション
認証機関の秘密鍵ファイル
-certオプション
認証機関の証明書ファイル
-outオプション
作成した証明書ファイル
である。
SSLを使うためのApacheの設定
サーバの鍵ファイルと証明書ファイルが準備できたら、いよいよApacheの設定を行う。Apacheにmod_sslが導入されていれば、Apacheの設定ファイル(httpd.conf)にはSSLに関するディレクティブが用意されているはずだ。その中の「SSLCertificateFile」ディレクティブには、サーバの署名付き証明書ファイルを指定する。また、「SSLCertificateKeyFile」ディレクティブには、サーバの鍵ファイルを指定する。この2つのディレクティブを設定すれば、基本的な設定は終了である。
後は、ApacheをSSLモードで起動する。SSLモードで起動するとは、apachectlに対しパラメータstartsslを与えるということだ。つまり、これまで「apachectl start」としていたところを、「apachectl startssl」とするのである。
ApacheをSSLモードで起動したら、Webブラウザからアクセスしてみよう。このとき、URLは「http://」ではなく「https://」になることに注意すること。無事にアクセスできれば、WebブラウザはSSLによる通信を行おうとする。独自の認証機関を使った場合、Webブラウザは警告を発するはずだ。これは、サーバから送信された証明書がWebブラウザに登録されていないものだからである。
Netscape Navigatorの場合、画面1のような警告が最初に表示される。
![]() |
| 画面1 未登録証明書を認識すると、このウィンドウが表示される |
そこから進んでいくと、この証明書を受け入れるかどうかを尋ねられる(画面2)。
![]() |
| 画面2 証明書の処理方法の選択 |
![]() |
| 画面3 |
ここで受け入れると、Webページが表示されるはずだ。このとき、画面3のように画面左下の鍵マークがロック状態になっていることを確認しておきたい。
このように、証明書を受け入れるとWebブラウザに登録される。従って、それ以降の通信からは警告を出さなくなる。受け入れた証明書は、Webブラウザのメニューから確認することもできる(画面4)。無事にSSLで通信できることを確認したら、後は通常のApacheの設定と同じである。暗号化する対象のコンテンツを決定し、その設定を加えていけばよい。
![]() |
| 画面4 証明書の編集画面(画像をクリックすると拡大表示します) |
次回は、Apacheのログ管理について紹介する。
|
2/2
|
|
| Index | |
| ApacheによるWebサーバ構築 | |
| SSLの仕組み 公開鍵、秘密鍵、共通鍵 秘密鍵/公開鍵の弱点 共通鍵で通信できるまでの仕組み 本当に信頼できる相手なのか? |
|
| 独自認証機関の構築 SSL導入の下準備 鍵ファイルの作成 認証機関への申請書(CSR)の作成 証明書の作成 SSLを使うためのApacheの設定 |
|
| 連載 ApacheによるWebサーバ構築 |
| Linux Squareフォーラム サーバ構築・運用関連記事 |
| 連載:Heartbeatでかんたんクラスタリング(連載中) オープンソースソフトウェアの「Heartbeat」を使ってHAクラスタを実現し、サービスを「落とさない」仕組みを実現します |
|
| 特集:Apache 2.2でWebサイトをパフォーマンスアップ! 最新安定版Apache 2.2は、何が変わったのか? 最新のApacheを新機能の使い方とともに解説する |
|
| 連載:実用 Apache 2.0運用・管理術(全8回) 本連載では、Apache 2.0の運用や管理方法を解説する。まず必須設定と基本的なセキュリティ対策を行い今後の運用に備える |
|
| 連載:実用
BIND 9で作るDNSサーバ(全15回) 本連載では、BIND 9の構築/運用方法を解説していく。実際に役立つことを目的に、セキュリティや大規模運用などのテーマを取り上げていく |
|
| 連載:実用qmailサーバ運用・管理術(全14回) 本連載を通して、qmailによるメールサーバの高度な構築・運用・管理術を紹介。SPAM対策やML管理からサーバでのウイルスチェックなどまで |
|
| 特集:Samba
3.0の全貌 改訂版 Samba 3.0リリースから8カ月。ここであらためて、Samba 3.0系列の新機能、インストール方法、国際化の現状を解説する |
|
|
TechTargetジャパン
- 新しい記事も入っていて安心しました (2012/2/7)
Linux Squareのアクセスランキングを公開します。定番の記事ばかりでなく、連載中の記事もよろしくお願いいたします - エラーメッセージをどう扱うか? (2012/2/2)
今回は、スクリプト実行時にエラーが発生したことを知らせるメッセージの扱い方を説明します - ファイルのアップロードを制限する (2012/1/30)
HTTPクライアントがアップロードしてくるファイルの扱いについて解説します。そもそも受け入れる必要があるのか? ということのほかにも、いろいろ設定が必要です - OSに付属するシェルスクリプトを読んで技術を盗む (2012/1/27)
シェルスクリプトマスターに近づくには、他人から技術を盗まなければならない。OS付属のスクリプトから技術を盗もう
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -




