- 2009-02-10 (火) 04:33
- Web関連


- Windows用ApacheOpenSSL編
実はこれだけは、どうしてもWindowsVista上でやるとうまくいきません。(OpenSSLの実行で、ライブラリ絡みっぽいエラーが出ます)
そういう意味では、あまり参考には出来ないかも。WindowsXPやWindows2003Server・Windows2000だと問題無く実行できました。Runtimeの関係を疑ったのですが、はっきりしませんでした。
さて、前提としてApacheバイナリーの中で、OpenSSL付きを選んでいるものとします。するとインストール時に、Apacheの実行ファイルと同じ場所に、OpenSSLの実行ファイルが作成されます。つまりインストールするだけで、SSLが使えるようになっている訳ですね。
HTTPSってのは、SSL(SecureSocketLayer)という仕組みで通信を暗号化した、HTTP(HyperTextTransferProtocol)による通信な訳です。実際はOpenSSLと組み合わせて暗号化出来るのは、HTTPのみじゃなかったりします。でも、取りあえずはApacheによるHTTP通信の暗号化をやります。
OpenSSLでカギの作成
サイトの内容はOpenSSLをソースからコンパイルしていた頃の話ですけど、Windows に Apache2 SSL をインストールがSSL用証明書作成の参考になりました。
まずはサーバー証明書の作成。設定のある「conf」フォルダ下で実行するのが良いと思います。コマンドプロンプトで以下を入力します。
openssl req -config openssl.cnf -new -out server.csr
Apache の conf フォルダ下にある「openssl.conf」にいろいろな設定が出来るようです。カスタマイズしたい場合は、ここをいじる必要がありますが、簡易的に使いたい場合には、デフォルトのままで問題無く証明書(privkey.pem)が作成できます。
実際にこのコマンドを入力すると、途中でサーバーに関するいくつかの情報の入力が促されます。
Enter REM pass phrase:パスフレーズを入力 Verifying - Enter PEM pass phrase:パスフレーズを入力 Country Name (2 letter code) []:国の名前(英2文字)を入力、普通は「JP」ですね。 State or Province Name (full name) []:都道府県名。例えばSaitama Locality Name (eg, city) []:都市名。Souka Organization Name (eg, company) []:組織名。Example Inc.など Organizational Unit Name (eg, section) []:部門名。Sales Sectionなど Common Name (eg, your websites domain name) []:サーバー名。www.example.com Email Address []:ウェブマスターのアドレス。master@example.com A challenge password []:パスワード設定。通常は何も入力せずにエンター
証明書にパスフレーズを使った状態で、サーバーに組み込みを行うと、Apacheの起動時ごとにパスフレーズの入力が促されるようになります。Daemon(バックグラウンド起動)にしたい場合には、これでは面倒です。その為通常は組み込む証明書から、パスフレーズ部分を以下のコマンドで削除します。
openssl rsa -in privkey.pem -out server.key
これで、パスフレーズの削除された証明書(server.key)が作成されます。
openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 365
公開鍵作成のコマンドです。これだと有効期限が1年(365日)なので、延ばしたかったら変更します。
これまでの操作で、confフォルダ内にSSL動作に必要なファイル(server.crt・server.key)が作成されます。
ちなみに冒頭で述べたエラーはここの部分(opensslの実行)で起きます。ライブラリ依存っぽいので、OpenSSLはソースからコンパイルするか、OpenSSL単独のバイナリーを使うべきなのかもしれません。
ApacheでSSLを使う設定
こうやって作成したサーバー鍵(秘密鍵)と公開鍵を、Apacheに組み込みます。
といっても、インストーラでApache+OpenSSLをインストールした場合、httpd.conf内の次の2行をコメントアウトするだけで、WEBサーバーをHTTS(Port443)でも動作させることが可能です。
#LoadModule ssl_module modules/mod_ssl.so
mod_ssl.soの行頭のシャープ(#)を削除する。
#Include conf/extra/httpd-ssl.conf
httpd-ssl.confの読み込み指定を、行頭のシャープ(#)を削除して行う。
現バージョンのApache+OpenSSLの場合、そのままで動作するようにデフォルト値が設定されています。Apacheのインストールで説明しましたが、設定ファイルはインストール時の上書き対象になっていませんので、現バージョンのデフォルトとは異なっている場合があり、その場合はエラーが発生するかもしれません。
エラーが発生した場合は、エラー内容を一つ一つ潰していくのもありですが、設定をconfフォルダごと退避・移動させて、新規に設定ファイルをインストールし、動作した状態から変更していくのでも良いのでしょう。
良く設定に対する解説で、Windows環境では使えないから「SSLMutex」の記述をコメントアウトしろというのを見かけますけど、どうも元の情報が一か所から発信されているみたいです。実際には「SSLMutex default」という風に記述すれば、Windows環境でも問題ないみたいです。(もっとも「default」と「記述しない事」が同じ状態なのかもしれませんね)
もう一つ、巷で言われている解説で、必要ないのではないかという部分に、サービス登録されたパスの編集があります。
"C:\usr\local\httpd\bin\httpd.exe" -D SSL -k runservice
太字の部分の「-D SSL」を登録されているサービスに追加変更するというものです。ただ実際には設定しなくても動作しますし、確かこれはコンパイル時に必要だったものなのでは無かったでしょうか。必要な場合にはレジストリ変更で対応します。
自己証明書のHTTPSサーバーに接続する
こうやって出来あがった、HTTPS接続ができるサーバーですが、実は接続時にエラー(というより警告)が出ます。正規の認証局に証明されていない、サーバー証明書だからです。最近のブラウザはセキュリティ意識が高いせいか、回避方法を知らないと接続できなかったりもします。
まずはIEで接続してみましょう。試すのはIE7です。
「このサイトの閲覧を続行する(推奨されません)。」をクリックすると、とりあえずそのままで接続可能でした。
さて、問題はFirefox3。接続しに行くと次のようになります。
まずはこの様なポップアップが開き、下の様なページが表示されます。(拡張の所為で、見た目は通常より派手です)
「例外として扱うこともできます・・・」をクリックすると、「例外を追加」ボタンが表示されます。
ここで、「例外を追加」ボタンをクリックすると、URLが入力された状態で「セキュリティ例外の追加」ウィンドウが表示されます。
「証明書を取得」ボタンのクリックで、下に証明書の状態が表示されます。
この状態で「セキュリティ例外を承認」ボタンを押す事で、そのサイトを例外登録してそのまま表示が可能になります。
これと同じことは「ツール」>「オプション」>「詳細」タブ>「暗号化」タブ>「証明書を表示」>「サーバ証明書」タブ>「例外を追加」と開いていって、同じ「セキュリティ例外の追加」を表示し、URLを入力して「証明書を取得」し、「セキュリティ例外を承認」ボタンを押して行えます。しかしたどり着くのが大変なので、通常はこの方法は使わないでしょう。
この例外登録を使って、自己証明書のサイトに接続可能になりますが、一度登録してしまうとその後注意の喚起もされないので、対象サイトの確認もしないで承認していくのだけは、避けた方が良さそうですね。例外追加は自分のサイトや信頼できる相手のサイトだけにしておきましょう。
さて、これでAapche編は一通り終わりました。次はPHP編になります。といっても、Apache連携が重要な部分なので、これからも折にふれ、Apacheについての説明は続きます。
- Newer >: 今日のひと言(2/11)
- < Older: BetterFieldsプラグイン
ping a Trackback
- TrackBack URL for this entry.(1)
Comments:(5)
-
said
February 10, 2009 7:14 PM
|
ReplyThis!
例外登録で、認証局から高いサーバ証明書を買わなくても良いというのは、なかなかどうして思いつきませんでした(学校でも教わりませんでした..笑)。ナイスアイデアですね!
秘密鍵とか公開鍵とか、なんか懐かしい響きです.........SSLなど暗号、認証のセリュリティの仕組みは複雑で頭がこんがらがりました。中退した記念にベリサインの修了証いただきました(笑)
自家籠薬中の薬ではありませんが、郵便の封書はかなりのSSLです(笑)。ただしプロのスパイ相手には役に立たないと思いますが...........(^_^;)
-
-
replied for
ゆうほう's comment
February 11, 2009 2:32 PM
|
ReplyThis!
自己証明書は、結構通信途中経路の暗号化目的には、結構使われてますよ。個人ユースのサーバーでも。
会社で使ってるオールインワンサーバーは、BlueQuartsベース(Turbolinux Appliance Server)で動作してますけど、デフォルトで自己証明書の作成機能も付いてます。
サーバ証明書は、企業でもある程度の規模が無いと、取得ためらいますよね。-
-
replied for
oscar's comment
February 11, 2009 9:59 PM
|
ReplyThis!
レスありがとうございますm(_ _)m(逆かな...笑)
質問ですが、オールインサーバというのは、たとえばwebサーバとメールサーバを一台のホストで稼働させるというようなケースでしょうか?
だとしたら今私が目指しているものになるのですが,,,,,,,(セリュリティ上の問題はありますか?)

-
-
replied for
ゆうほう's comment
February 12, 2009 12:05 PM
|
ReplyThis!
オールインワンサーバーは、おっしゃってる通りのものですよ。
もともと Cobalt っていう、1Uのラックマウントサーバー(外部公開向けのRaq)と箱形のサーバー(内部向けのQube)があって、どちらも必要な機能が詰め込まれた上で、WEBインターフェースですべて管理できるようになっていました。
このCobaltは最終的にはSUNに買収された後、ラインアップの廃止と共に、ソフトウェア部分がOpenSourceになりました。
それで、BlueQuartsってのはOpenSOurceとして入手できるので、試してみると面白いですよ。
http://bluequartz.org/source/index-j.html
私の会社も、CobaltRaq4からBlueQuartsベースシステム(TLAS2.0)への乗り換え組みです。
セキュリティは、おかしな設定さえしなければ、考えて作ってありますので、大丈夫です。-
-
replied for
oscar's comment
February 12, 2009 4:27 PM
|
ReplyThis!
ご回答ありがとうございますm(_ _)m
BlueQuartsはなんとなくWebminのようなものみたいですね..........どちらか使いやすそうな(初心者向きの)ものを試してみます^^
Postfixの解説書(Postfix詳解【オーム社】)をちびりちびり読んでいますが、本の通りに作るとすると結局難局GNOMEなどの端末エミュレータ設定になったりするかもしれないですね(笑)
-
-
-
-




スクリプトの読み込みが完了していません。
メールフォーム(Javascriptを使用していません)や、
Twitter経由のCommentでもReplyいたします。ただし返信はブログのコメントとして行う事もあります。