apache 1.3x + mod_ssl 2.8 インストールメモ −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− # インストールポリシー #--------------------------------------------------------------------------------------------- apache をSSL 対応させるにはいろいろな方法がありますが、今回は既存のapache の変更を最小限に抑えるため、openSSL+apache+mod_ssl の構成でセキュアサーバーを構築します。なお、インストールする際には以下の点を注意してください。 1. 初回インストール時はhttpd.conf の”group”をnobody に再設定すること。 2. mod_ssl と apache の./configure は同時に行う。なお、この時apache の./configure オプションも 同時に指定する。 # インストール方法 #--------------------------------------------------------------------------------------------- apache, mod_ssl のソースをインターネットよりダウンロード後、ソースを解凍します。 # su root # cd /usr/local/src/ # wget apache_1.3.29.tar.gz # wget mod_ssl-2.8.16-1.3.29.tar.gz # tar zxvf apache_1.3.29.tar.gz # tar zxvf mod_ssl-2.8.16-1.3.29.tar.gz apache, mod_ssl を解凍後、mod_ssl ディレクトリに入りインストール作業を行います。 ※ 注意 ) mod_ssl をconfigure する際、apache のconfigure も同時に行います。apache でconfigure する際に付加するオプションはここで指定します。 # cd ./mod_ssl-2.8.16-1.3.29 # ./configure --with-apache=../apache_1.3.29 --with-ssl=SYSTEM openSSL はシステム導入済みな物を使う --enable-shared=ssl --enable-shared=max --enable-shared=rewrite --enable-module=so --enable-module=ssl --enable-module=rewrite --enable-rule=SHARED_CORE DSOを有効にする --prefix=/usr/local/apache --enable-suexec --suexec-caller=nobody --suexec-docroot=/home --suexec-uidmin=2000 --suexec-gidmin=2000 # cd ./apache_1.3.29 # make # make install # サーバー上でのSSL の設定 #--------------------------------------------------------------------------------------------- SSL を導入するには、暗号化通信を行うために、サーバー上で様々な初期設定を行う必要があります。 ● サーバー秘密キーを生成する サーバー秘密キーの作成には、やはりopenSSL を利用します。コマンドを実行することにより、-out で指示した場所にサーバー秘密キーファイルが生成されます。また、-rand で指定するファイル(.rnd) は乱数を発生させる時に使用されます。 /usr/local/apache/conf/ssl.key/server.key ・・・ WEB サーバーのサーバー秘密キ− # cd /usr/local/apache # cp /var/log/secure ./salt # openssl md5 ./salt > .rnd # openssl genrsa -rand .rnd -des3 -out ./conf/ssl.key/server.key 1024 コマンドを実行するとパスフレーズの入力を求められます。これは、秘密キー自体のパスフレーズですが、秘密キーを参照する時の認証にも利用されるため、秘密キーを組み込んだapache を起動する度にパスフレーズが必要となります。つまり、apache を自動起動するにも毎度パスフレーズの入力を求められるということになります。 ● 認証局への申請書CSR(サーバー公開キー) の作成 サーバ秘密キーファイルが作成できたら、その秘密キーを基に認証局への申請書ファイル(サーバー公開キー)を作成します。認証局は、この申請書ファイルに基づいて署名付きの証明書を発行してくれますが、実際にはファイルのみでの審査ということはなく必要書類の提出や契約も併せて行われます。 ファイルベースでの申請書の作成は、同じくopenSSL を使って行います。申請書ファイルの作成は、独自に作成した認証局を使う場合でも必要です。コマンドを実行後、-out で指示した場所に申請書ファイルが生成されます。 /usr/local/apache/conf/ssl.csr/server.csr ・・・ 認証局への申請書(CSR) # cd /usr/local/apache # openssl req -new -days 365 -key ./conf/ssl.key/server.key -out ./conf/ssl.csr/server.csr コマンドを実行すると、パスフレーズの入力を求められますが、これは、秘密キーを参照したがために入力を求められたケースに相当します。 ※ 申請書ファイル作成時の項目 1. Country Name (2 letter code) [AU]: → WWW サーバーを設置する国、例えばJP 2. State or Province Name (full name) [Some-State]: → WWW サーバーを設置する都道府県名、例えばAichi 3. Locality Name (eg, city) []: → WWW サーバーを設置する都市名、例えばNagoya 4. Organization Name (eg, company) [Internet Widgits Pty Ltd]: → WWW サーバーを設置する組織名、例えばProgram_Rabo 5. Organizational Unit Name (eg, section) []: → WWW サーバーを設置する部門名、例えばSystem 6. Common Name (eg, your name or your server's hostname) []: → WWW サーバーのFQDN(DNS に必ず登録されているもののみ)、例えばwww.test.com 7. Email Address []: → WWW サーバーの管理者のメールアドレス、例えばiwata@test.com 8. A challenge password → 何も入力しない 9. A challenge password → 何も入力しない ● サイト証明書の作成 認証局への申請書を作成したら、それを認証局に送付して署名してもらう必要があります。実際に契約するのでなければ独自に認証局を構築するか、無料の試行サービスを利用するといいでしょう。 # SSL 証明書を申請・発行 #--------------------------------------------------------------------------------------------- 認証期間に申請する申請書の発行を終えたら、次に認証局に証明書を発行してもらう必要があります。証明書はベリサインやGeo Trust などの第三者機関に発行してもらうのが理想ですが、個人でサイトを運営している場合など、費用的に厳しい、もしくは暗号化のみを行いたいなどの際は独自で認証局を立ち上げ、証明書を発行することもできます。 ● 認証局を新規に立ち上げ、サイト証明書を独自発行する場合 イントラネット内の暗号化など、対象とする範囲が限られている場合には独自で認証局を立て、サイト証明書を発行した方が効率が良いです。独自に認証局を構築してサイト証明書をする場合、Web ブラウザに認証局の登録を行う必要があります。認証局は、openSSL の機能を利用して構築します。 > まずは独自認証局を立ち上げる openSSL をインストールしたディレクトリにあるmisc ディレクトリには、CA.sh、もしくはCA というシェルスクリプトが用意されています。このスクリプトに-newca オプションをつけて実行することにより、以下の認証局が必要とするファイルが生成されます。 /usr/local/apache/demoCA/cacert.pem ・・・ 認証局の証明書 /usr/local/apache/demoCA/private/cakey.pem ・・・ 認証局の秘密キー # cd /usr/local/apache # cp /usr/local/ssl/misc/CA.sh ./ ← RPM 版openSSL の場合は/usr/share/ssl/misic/CA ./ で実行 # CA.sh -newca コマンドを実行すると、パスフレーズの入力を求められますが、これは、認証局専用の秘密キーを参照するためのものです。 ※ 認証局作成時の項目 1. Country Name (2 letter code) [GB]: → 認証局を設置する国、例えばJP 2. State or Province Name (full name) [Berkshire]: → 認証局を設置する都道府県名、例えばAichi 3. Locality Name (eg, city) [Newbury]: → 認証局を設置する市町村、例えばNagoya 4. Organization Name (eg, company) [My Company Ltd]: → 認証局の組織名、例えばProgram_Rabo 5. Organizational Unit Name (eg, section) []: → 認証局を設置する部門名、例えばSystem 6. Common Name (eg, your name or your server's hostname) []: → 認証局サーバーのFQDN 7. Email Address []: → 認証局への連絡先メールアドレス > 次に独自認証局を利用して、CSR を元にサイト認証書を発行する 認証局構築後、早速サイト証明書を発行しますが、サイト証明書発行には次のファイルが必要となります。 SSL では、-in で指定されたサイト公開キー(申請書) をブラウザに安全に渡すため、認証局自体の秘密キーでサイト公開キーを暗号化します。ブラウザがSSL サイトにアクセスした場合、ブラウザに保存してある認証局公開キー(証明書) によって、サイト公開キーが複合化され、安全にサイト公開キーがブラウザに渡されます(ブラウザに認証局公開キーが無い場合はその場でインストールするかを促します)。 さらに、サイト証明書は、ブラウザが初めてSSL サイトにアクセスした際に本当にアクセスしたサイトであるかを証明するために使われます。 ・ -in : 作成した認証局への申請書ファイル ・ -keyfile : 認証局の秘密鍵ファイル ・ -cert : 認証局の証明書ファイル ・ -out : 作成するサイト証明書ファイル /usr/local/apache/conf/ssl.crt/server.crt ・・・ 認証局が発行したサイト証明書 # cd /usr/local/apache # openssl ca -in ./conf/ssl.csr/server.csr -keyfile ./demoCA/private/cakey.pem \ # -cert ./demoCA/cacert.pem -out ./conf/ssl.crt/server.crt コマンドを実行すると、パスフレーズの入力を求められますが、これは、認証局専用の秘密キーを参照するためのものです。 ● 正規認証局などによりサイト認証書を発行してもらう場合 通常セキュアサイトを構築する際は申請書を元に正規認証局(ベリサイン等) でサイト認証書を発行してもらいます。テスト的にサイトをセキュアにする等で利用する際はテストサーバーID を正規認証局から発行してもらうとよいでしょう。 > サイト認証書のサーバーへのインストール サイト認証書をもらったら、次にサーバーにサイト認証書をインストールします。 /usr/local/apache/conf/ssl.crt/server.crt ・・・ 認証局が発行したサイト証明書 # cd /usr/local/apache/conf/ssl.crt # vi server.crt server.crt に認証局より送信されてきたセキュアサーバーID をコピーします。 # 起動方法 #--------------------------------------------------------------------------------------------- 通常、SSL 対応したapache を起動した際はサーバー秘密キーのパスフレーズを聞かれます。これでは、スクリプトによる自動実行はできません。そこで、次のコマンドで自動実行時にパスフレーズを聞かれないようにします。なお、サーバー秘密キーが「/usr/local/apache/conf/ssl.key/server.key」にインストールしてあるものとします。 # cd /usr/local/apache/conf/ssl.key # cp server.key server.key.org ← オリジナルのバックアップを取る # cp server.key server.key.tmp # openssl rsa -in server.key.tmp -out server.key