カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

Apache+SSL環境の構築

この記事は最終更新日から1年以上経過しています。

Googleが常時SSL接続になり、SEOでもそれが加味されるようになってきました。

また、Google検索からの流入を解析するためにも、自身側のSSL化が必要になってきます。
というのも、HTTPSからHTTPではリファラーが取得できないのです。
自身のサーバーをHTTPSにすればHTTPSからのリファラーを取得することができます。
HTTPSならHTTPからのリファラーも取得することができます。

それに当たって、今回はopensslの導入部分を解説させていただきます。

【バージョンについて】
apache2.2.31
openssl-0.9.8zg
※opensslのインストールディレクトリは/usr/local/sslとします。

【鍵のペア作成と証明書の作成】
SSL通信を利用するには次の3つが必要です。
1.秘密鍵
2.公開鍵+証明書申請情報
3.デジタル証明書

WEBサーバーの秘密鍵の作成

opensslのディレクトリに移動します。

cd /usr/local/ssl/private

秘密鍵作成のための疑似乱数を生成します。
例としてmd5ダイジェスト値を疑似乱数として使用します。

../bin/openssl md5 * > rand.dat

秘密鍵を作成します。

../bin/openssl genrsa -rand rand.dat -des3 1024 > server.key

コマンドを実行すると秘密鍵のパスフレーズを求められますので、
任意のパスフレーズを入力してください。

この秘密鍵は暗号解読の要となります。
他のユーザーに見られる(盗まれる)とSSL通信の意味がなくなりますので、
作成した後、パーミッションを変更しておきます。

chmod 400 server.key
オプションについて
genrsa サブコマンド RSA形式の秘密鍵を作成
-des3 オプション トリプルDES方式でファイルを暗号化
1024 オプション 1024ビットで鍵を作成

WEBサーバーの公開鍵の作成

次にWEBサーバーのCSRファイルを作成します。
CSRファイルとは、公開鍵の情報のほかに、作成時に指定する組織名や組織の所在地などの情報を含むデータのことです。
このCSRファイルは認証局からデジタル証明書を発行してもらうときに必要になります。※ここポイント!

cd /usr/loca/ssl/certs
../bin/openssl req -new -key ../private/server.key > server.csr

または

../bin/openssl req -new -key ../private/server.key -out server.csr

コマンドを実行すると、秘密鍵のパスフレーズが求められます。

オプションについて
req サブコメント CSRファイルの作成
-new オプション 新規にCSRファイルを作成
-key 鍵 オプション 秘密鍵のパス

公開鍵の情報は以下のように順番に聞かれます。

Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:Chuo-Ku
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Exam CO.LTD.
Organizational Unit Name (eg, section) []:Eigyoubu
Common Name (eg, YOUR name) []:WWW.EXAMPLE.JP
Email Address []:admin@example.jp

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

Organizational Unit Name、Email Addressは省略可です。
A challenge passwordは証明書を破棄する場合に必要になるパスワード、
An optional company nameは別の組織名がある場合、その組織名を入力します。これも省略可です。

作成した公開鍵もパーミッションを変更しておきます。

chmod 400 server.csr

デジタル証明書の作成

デジタル証明書はCA(認証局:Certificate Authority)に発行してもらうものですが、
テスト等のため、自分自身を認証局とすることができます。

cd /usr/local/ssl/certs
../bin/openssl x509 -in server.csr -days 365 -req -signkey ../private/server.key > server.crt

または

../bin/openssl x509 -in server.csr -days 365 -req -signkey ../private/server.key -out server.crt

コマンドを実行すると、秘密鍵のパスフレーズが求められます。

オプションについて
x509 サブコマンド X.509形式のデジタル証明書の作成
-in オプション CSRファイルパスを指定
-days 日数 オプション 証明書の有効期限を指定(省略時は1ヶ月)
-req オプション 入力ファイルがCSRファイルであることを指定
-signkey オプション 自己証明書生成時に使用するオプション。秘密鍵のパスを指定

作成したデジタル証明書もパーミッションを変更しておきます。

chmod 400 server.crt

デジタル証明書の内容を確認する

cd /usr/local/ssl/certs
../bin/openssl x509 -in server.crt -text -noout

apacheの設定を変更

apache2ディレクトリのconf/extra/httpd-ssl.confファイルを編集します。
先ほど作成した秘密鍵とデジタル証明書のファイルパスを設定します。
・デジタル証明書

SSLCertificateFile /usr/local/ssl/certs/server.crt

・秘密鍵

SSLCertificateKeyFile /usr/local/ssl/private/server.key

httpd.confを編集します。
以下の2行を探してコメント解除

#LoadModule ssl_module modules/mod_ssl.so
#Include conf/extra/httpd-ssl.conf

最後にapacheを再起動して終了です。
秘密鍵のパスフレーズ入力を求められます。

/usr/local/apache2/bin/apachectl restart

秘密鍵のパスフレーズ入力を省略する(復号化)

作成したserver.keyをserver.tmpにリネームし、以下のコマンドを実行します。

cd /usr/local/ssl/private
../bin/openssl rsa in server.tmp > server.key

または

../bin/openssl rsa -in server.tmp -out server.key

テスト環境でのみ行うようにしてください。

この記事がお役に立ちましたらシェアお願いします
2,190 views

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です