Apache2でSSL on Panther(Tiger)

  • 投稿日:
  • by
  • カテゴリ:

お題の通り、今日の内容はPanther上のApache2でSSLを使えるようにしようというもの。
Apache2はConplete Apache2がインストールされているものとする。 インストールの方法はComplete Apache2 on Pantherを参照されたし。

Jun '05 追記)Tiger(OSX 10.4)でもこのままで問題なく動作しました

やり方はMacOSXでSSLサーバーに沿って進む。
ちなみにこのサイトはUsing mod_ssl on Mac OS X法大奥山研究室:UNIX入門:MacOSX関連 を参考にしている。

ということで、今回利用する環境で必要な変更などについて補足するという形で進行。

事前準備

1)〜5)まではがんばる。

6) DocumentRootの設置: デフォルトは /Library/WebServer/Documentsになっているが、起動ディスクとは別のハードディスクのWebServerフォルダ内に設定する。

Complete Apache2を入れると、DocumentRootは /Library/Apache2/htdocs/ であることに注意。

7) Apache(パーソナルWeb共有)を停止してから以下の設定を行う。

停止するのは、「システム環境設定」の「パーソナルWeb共有」ではなく 「Apache2」の方(Complete Apache2 on Panther参照)。

SSLサーバーの設定

流れは以下のような感じ。

1)暗号化する際の乱数の素のようなもの(rand.dat)を作って
2-1)公開鍵(server.key)を作って
2-2)「署名してー」とCA (認証局) へ送るCA証明書署名要求(server.csr)を作って
3-1)CAに送るのめんどくさいから自分で署名して秘密鍵(ca.key)作って
3-2)その秘密鍵を使って自分で署名したCA証明書 (ルート証明書:ca.crt) を作って
4)署名したサーバ証明書(server.crt)を作る

3-1)まではそのままでOK。3-2)で注意点がいくつかある。
CA.crtを作成する際に以下の項目を2-1)でserver.csrを作成した時に入力したものと同じにしないこと。

  1. パスフレーズ
  2. Organization Name
  3. Common Name
  4. (Email Addressも?未確認)

なぜなら、同じにすると、「私の身元は確かですよ!」と自分で言ってるのがバレバレなので、 4)でエラーが出るからだ。

II. 書類の/etc/httpdへ設置

となっているが、設定ファイルの置き場は /Library/Apache2/conf/ なので以下のように変更。

III. httpd.conf の設定

Complete Apache2 on Pantherでの設定は済んでいるものとするので、 まだの人はこちらにも目を通されたい。

1) httpd.conf のバックアップ

上でも触れたように、Complete Apache2での設定ファイルの置き場は /Library/Apache2/conf/である。 また、デフォルトの設定ファイルが /Library/Apache2/conf/httpd-std.conf として残っているので、 思う存分書き換え損なって構わない。アグレッシブに行きましょう。

2) httpd.confファイルの編集

ここはDefaultでないApache2を入れたため結構違うので、変更点を書いておく。
好みだが、私はエディタはpicoよりもviの方が慣れているので、viを使う(参考:Viの使い方)。
以下のコマンド で編集開始。

編集はちょっとずつ行って、うまくいったら以下のようにバックアップを取っておくのが賢いやり方。

1. 219行目。HTTPのポート80番を閉じる。行頭に#を付けて、以下のようにコメントアウト。

# Listen 80

2. 260行目ぐらい。<IfDefine SSL>に挟まれている部分が読み込まれないので、 行頭に#をつけてコメントアウトし、強引に読ませる。(SSLのDefineの仕方がわからなかったので)

# <IfDefine SSL>
LoadModule ssl_module modules/mod_ssl.so
# </IfDefine>

httpd.conf の編集は以上。
Complete Apache2には httpd.conf の他に ssl.conf という設定ファイルがあるので、 次はこちらを編集。

1. 35行目と246行目ぐらい。また<IfDefine SSL>と</IfDefine>の行頭に#をつけてコメントアウトし、間の記述を読みこませる。

# <IfDefine SSL>

# </IfDefine>

2. 44行目ぐらい。SSL用のポートを開く(443番)

「自分マシンのIP:」を先頭につける。以下はローカルIPでの例。

Listen 127.0.0.1:443

3. 87行目ぐらい。「ServerName」にドメイン名、「ServerAdmin」にサーバ管理者(自分)のメールアドレスを記入。

ServerName www.hoehoe.net:443
ServerAdmin hoehoe@hoehoe.net

4. 108行目くらい。公開鍵などの置き場所の設定を変更する。 II. でssl.crt ではなく ssl.key に入れたので、 そのように変更。

SSLCertificateFile /Library/Apache2/conf/ssl.key/server.crt
#SSLCertificateFile /Library/Apache2/conf/ssl.key/server-dsa.crt

以上で編集は終了。

3) httpd.confファイルの正誤テストと動作テスト

以下のコマンドで設定ファイルが有効かを調べ、起動してみる。

sudo /Library/Apache2/bin/apachectl configtest
sudo /Library/Apache2/bin/apachectl start

一行目で httpd.conf と ssl.conf の文法チェック。「Syntax OK」と表示されればOK。
二行目でApacheを起動させる。正しく起動していれば何もエラーが出ないが、設定がおかしい場合はエラーが表示される。

動作テストとして、ブラウザで下記サイトにアクセスしてみる。
https://127.0.0.1/
キャッシュが残っている場合があるので、念のためリロードする。 ちなみに「s」がSSLを意味する。

「暗号化されますが認証が・・・」とかいう画面が表示され、「はい」と答えて画面がちゃんと表示されればOK。 これでSSLでの接続が確認された。

次に暗号化されていないHTTP接続を調べる。
http://127.0.0.1/
にアクセスして、「サーバに接続できません」と文句を言われればOK。

これで、このサイトには暗号化されたSSLでの通信でしか接続できなくなった。 サイトの一部についてだけSSLをかけたいとか、逆に一部にだけHTTP接続を許したいという場合は 設定を変更する必要があるが、今のところやり方を知らないのでわかったら追加する。

IV. Apache の起動におけるパスフレーズの要求の解除

このままだと、Apache起動の度に公開鍵のパスフレーズを求められる。 これは「システム環境設定」の「Apache2」からの起動ができないことを意味する。 せっかくComplete Apache2を入れたのにそれはくやしい。 従って起動時にパスフレーズを聞かれなくなるようにする。

sudo /Library/Apache2/bin/apachectl stop
cd /Library/Apache2/conf/ssl.key
sudo cp server.key server.key.original
sudo openssl rsa -in server.key.original -out server.key

1行目から順に、Apache2の停止、公開鍵の複製、暗号化されていない鍵の作成。 ここでパスフレーズが聞かれるので、入力すると「writing RSA key」と表示される。 暗号化していない鍵はセキュリティー上よろしくないため、パーミッションを変えておく。

cd /Library/Apache2/conf/ssl.key
sudo chmod -R 400 server.* ca.* rand.dat

これで「システム環境設定」の「Apache2」からも起動できるようになるはずなので、 試してみよう。

以上で終了。お疲れさまでした。