« Parallels Desktop for Mac 3.0の新機能 - Smart Select | トップページ | MacPortsでApache2+PHP5 »

MacPortsでApache2+SSL

自宅のサーバはMac OS Xに付属のApache-1.3.33を使用してきましたが、デフォルトでインストールされているPHPのコンパイルオプションが十分でないため、そのままではSquirrelMailをインストールすることができません。

Apache-2.xはApache-1.xに較べてSSLの有効化がとても簡単になっています。PHPのインストールもMacPortsを使うととても簡単ですので、MacPortsでApache2に移行することにしました。以下は、Apache2をインストールして、SSLを有効にするまでの手順のメモです。

Apache2のインストール

Apache2自体のインストールはお決まりのportコマンドの実行です。

$ sudo port -v install apache2

後は、/opt/local/apache2/confにあるhttpd.conf.sampleをhttpd.confにコピーすれば、とりあえずデフォルト状態での動作確認が行えます。

$ cd /opt/local/apache2/conf
$ sudo cp httpd.conf.sample httpd.conf

$ sudo /opt/local/apache2/bin/apachectl start

SSLの有効化

Apache2ではSSLを有効にすると、apachectl start実行後にキーストアのパスフレーズを聞いてくるようになります。MacPortsのApache2はOS起動時に自動起動するように設定されているため、デフォルトのままだとパスフレーズの確認のところで止まってしまい、OSが立ち上がらなくなってしまいます。そのため、予めlaunchctlコマンドでApache2の自動起動をOFFにしておきます。

$ sudo launchctl unload -w \
/opt/local/etc/LaunchDaemons/org.macports.apache2/org.macports.apache2.plist

次にSSLで使用するX.509証明書の作成です。ここで作成する証明書は自己署名したルート証明書をそのまま使用します。まずは、RSAの秘密鍵server.keyをOpenSSLを使用して作成します。ここで指定するパスフレーズは秘密鍵を暗号化するためのキーで、Apache2起動時に聞かれるものです。また、乱数の種は何でも構わないのですが、ここではsystem.logファイルを使用しています。

$ cd /opt/local/apache2/conf
$ sudo openssl genrsa -des3 -rand /var/log/system.log -out server.key 1024
6395 semi-random bytes loaded
Generating RSA private key, 1024 bit long modulus
....++++++
.........++++++
e is 65537 (0x10001)
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:

次にこの秘密鍵server.keyを使って、X.509証明書の元になるCSRを作成します。入力する項目で注意するのは、Common Name(CN)には、Apacheを起動するホストのFQDNを設定することです。

$ sudo openssl req -new -key server.key -out server.csr
Enter pass phrase for server.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Your Prefecture
Locality Name (eg, city) []:Your City
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Your Company
Organizational Unit Name (eg, section) []:Your Department
Common Name (eg, YOUR name) []:host.domain
Email Address []:your.name@example.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:.
An optional company name []:.

最後にCSRから自己署名したX.509証明書server.crtを作成します。-daysオプションには証明書の有効期限を指定します。

$ sudo openssl x509 -req -in server.csr -signkey server.key -out server.crt -days 3560
Signature ok
subject=/C=JP/ST=Your Prefecture/L=Your City/O=Your Company/OU=Your Department/CN=host.domain/emailAddress=your.name@example.com
Getting Private key
Enter pass phrase for server.key:

最後に必須ではありませんが、これらのファイルのアクセスモードを変更しておきます。

$ sudo chmod 400 server.*
$ ls -l server.*
-r--------   1 root  admin  989 Jul 15 12:50 server.crt
-r--------   1 root  admin  720 Jul 15 12:49 server.csr
-r--------   1 root  admin  963 Jul 15 12:40 server.key

Apache2設定ファイルの変更

上記で作成した証明書をApache2に組み込みますが、秘密鍵と証明書のファイル名は/opt/local/apache2/conf/extra/ディレクトリに用意されているSSL用の雛形ファイルhttpd-ssl.confのデフォルト値に合わせてありますので、変更が必要なのは、ServerNameの部分だけです。

#ServerName www.example.com:443
ServerName host.domain:443

後は、/opt/local/apache2/confディレクトリにあるhttpd.confを編集し、コメントアウトされているhttpd-ssl.confのインクルードを有効にします。

# Secure (SSL/TLS) connections
#Include conf/extra/httpd-ssl.conf
Include conf/extra/httpd-ssl.conf

以上で設定は完了です。apachectl configtestで設定ファイルが正しいことを確認し、Apache2を再起動します。

$ sudo /opt/local/apache2/bin/apachectl configtest
Syntax OK
$ sudo /opt/local/apache2/bin/apachectl stop
$ sudo /opt/local/apache2/bin/apachectl start
Apache/2.2.4 mod_ssl/2.2.4 (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide the pass phrases.

Server host.domain:443 (RSA)
Enter pass phrase:

OK: Pass Phrase Dialog successful.

正しく起動できたら、ブラウザからhttps://host.domain/にアクセスしてみます。証明書の確認ダイアログが出ますが、証明書を許容すればSSLアクセスが可能になっていることを確認できます。

Apache2起動時のパスフレーズ確認をしないようにする

実運用のサーバではお勧めできませんが、秘密鍵server.keyの暗号化を解除することで、Apache2起動時のパスフレーズ確認が行われなくなります。

$ sudo mv server.key server.key.orig
$ sudo openssl rsa -in server.key.orig -out server.key
Enter pass phrase for server.key.orig:
writing RSA key
$ sudo chmod 400 server.key

あるいは、初めから暗号化なしで運用するつもりなら、秘密鍵を生成する最初のステップでopenssl genrsaコマンドの-des3オプションを指定しないでserver.keyを生成するという方法もあります。この場合、暗号化のためのパスフレーズは聞かれません。

$ sudo openssl genrsa -out server.key 1024
Generating RSA private key, 1024 bit long modulus
.............++++++
.++++++
e is 65537 (0x10001)
$ sudo chmod 400 server.key

上記の状態では、OS起動時の自動起動を設定しても問題ありませんので、必要ならlaunchctlコマンドで自動起動をONにすることができます。

$ sudo launchctl load -w \
/opt/local/etc/LaunchDaemons/org.macports.apache2/org.macports.apache2.plist

|

« Parallels Desktop for Mac 3.0の新機能 - Smart Select | トップページ | MacPortsでApache2+PHP5 »

mac」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/181807/15935594

この記事へのトラックバック一覧です: MacPortsでApache2+SSL:

« Parallels Desktop for Mac 3.0の新機能 - Smart Select | トップページ | MacPortsでApache2+PHP5 »