====== Apache2 における SSL の設定 ====== [[hacks:mac:apache2:settings|Apache2 の設定]]で述べたように,SSL に必要な設定は extra/httpd-ssl.conf に記述されすでに Include されている. 以下では,その設定に基づいて,必要な RSA 秘密鍵や証明書など必要なファイルを 作成・配備する手順について述べる. ===== extra/httpd-ssl.conf ===== 設定ファイル extra/httpd-ssl.conf のなかで重要なのは以下の 2 つ. SSLCertificateFile は証明書, SSLCertificateKeyFile は RSA 秘密鍵である. これらはデフォルトでは存在しないので,OpenSSL を使って生成する. OpenSSL は MacOS には標準でインストールされている. * SSLCertificateFile "/private/etc/apache2/server.crt" * SSLCertificateKeyFile "/private/etc/apache2/server.key" 証明書は正しくは認証局から得るべきものだが,以下では自己署名証明書を使って SSL を設定する手順について述べる. ===== 乱数ファイルの生成 ===== まず,RSA 秘密鍵の生成に用いる乱数ファイルを生成する. 乱数ファイルは,十分な大きさをもつテキストファイルを MD5 アルゴリズムによって要約することによって生成する. テキストファイルの内容が同一ならば同じ要約が生成されるので,他に同一内容のものが存在するファイルや空ファイルを 用いてはならない.一般的によく使われるのは /var/log/system.log や /var/log/apache2/access_log などの ログファイルである.これらのファイルはマシンが異なれば内容も異なることが期待され, さらに時々刻々と変化するので同一マシン上で同じファイルを使って要約を生成しても 異なる結果が得られると期待されるからである. * openssl dgst -md5 /var/log/apache2/access_log > rand.dat ===== RSA 秘密鍵の生成 ===== SSLCertificateKeyFile として参照する秘密鍵を,乱数ファイルから生成する. 通常は DES3 などの暗号化アルゴリズムを指定してパスフレーズ付きの秘密鍵を生成するが, パスフレーズが付いていると httpd の起動・再起動時にパスフレーズを入力する必要がある. しかしながら,launchd などを用いて自動的に httpd を起動するときにパスフレーズを入力することは不可能なので, 暗号化せずに秘密鍵を生成する.ここでは鍵の長さを 2048 ビットとしている. * openssl genrsa -rand rand.dat 2048 > server.key ネットなどには,このとき -des3 などの暗号化オプションを付けてパスフレーズ付きの秘密鍵を生成し後から openssl rsa -in server.key -out server.key として暗号化オプションなしで RAS パラメータを書き換えることでパスフレーズなしの秘密鍵に変換する手順が述べられていることがあるが,暗号化オプションを付けなければ余計な手順を踏むことなくパスフレーズなしの秘密鍵が生成できる. ===== 証明書署名要求の生成 ===== 生成した RSA 秘密鍵を使って,認証局に証明書を要求するための証明書署名要求(CSR: Certificate Signing Request)を生成する. 生成にあたっては,CSR に含まれる国名・サーバ名・メールアドレスなど申請者の情報を入力する必要がある. * openssl req -new -days 365 -key server.key -out server.csr ===== 自己署名証明書の生成 ===== 通常は CSR と公開鍵をもとに認証局から証明書の発行を受けるが,認証局を用いない場合には自己署名証明書を生成することができる. 自己署名証明書は一般的に信頼できないものではあるが,社会的に信頼を得ている小規模な自社サーバなどであれば運用に支障はない. 生成した CSR と秘密鍵を指定し,それに X.509 規格に準拠するようオプションをつけて証明書を生成する. * openssl req -in server.csr -key server.key -x509 -out server.crt ===== 証明書と秘密鍵の配備 ===== 生成した server.key と server.crt を extra/httpd-ssl.conf で指定されている場所に配備し,httpd を再起動する. これで https でのセキュアな通信が可能になる.