Daily Archives: 2010 年 9 月 4 日
yumでインストールしたApache2にmod_sslを足してhttpsを実現する
ちょっと単純にhttpsを使いたいというより、別の目的のためにhttpsが必要になったので、
mod_sslを利用して、httpsを実現しようと思います。
前提として、yumでhttpdが入っていて、正常に動作すること。とします。
まずは、mod_sslをyumでインストールします。
※opensslがないようなら、別途インストールしてください。
yum install mod_ssl
次にApacheで利用する証明書を生成します。
(お金があるなら信頼性が高い第3者機関の正式な証明書をVerisignやGlobalSignなどから購入すると良い)
まずは、秘密鍵を生成します。
mkdir /etc/httpd/key
cd /etc/httpd/key
openssl genrsa -des3 -out server.key 1024すると、パスフレーズを聞かれる画面がでます。
Enter pass phrase for server.key: aaaaa (※自分だけわかる適当なパスフレーズを打ち込んでください)
Verifying – Enter pass phrase for server.key: aaaaa (※確認画面にも同様のパスフレーズを打ち込む)
次にCSRファイルを作成します。本来はこれを第3者機関に提出し、信頼できる証明書を発行してもらいます。
openssl req -new -key server.key -out server.csr
するとまた質問が出るので、1個ずつ回答します。
(※先ほど作成したパスフレーズを打ち込みます)
Enter pass phrase for server.key: aaaaa(※国を聞かれています。私は日本なのでJPです)
Country Name (2 letter code) [GB]: JP(※州・県を聞かれています。福岡なのでFukuokaです)
State or Province Name (full name) [Berkshire]:Fukuoka(※市を聞かれています。福岡近郊なのでFukuokaにしちゃいます)
Locality Name (eg, city) [Newbury]:Fukuoka(※会社名を聞かれてます。法人じゃないけど、Hattaraといれちゃう)
Organization Name (eg, company) [My Company Ltd]: Hattara(※部署名を聞かれてますが、部署はないので、部署ある人だけ入力ください)
Organizational Unit Name (eg, section) []:(※証明書のドメイン名を入力します。)
Common Name (eg, your name or your server’s hostname) []:hattara.info(※メールアドレスを書かれます。いれたければ、入力してください。)
Email Address []:(※パスワードの入力を求められますが、特に指定する必要なさそうなので、スルーです。)
A challenge password []:(パスワードの確認画面もスルーです。)
An optional company name []:
そして、本題の証明書を作成するわけですが、
上記でも書いてある通り、貧乏な私は、第3者機関の信頼できる証明書を生成するお金がないので、
自己証明(オレオレ詐欺ならぬ、オレオレ証明書)を生成します。
とりあえず100年くらい持つ証明書を生成しておきます。
openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 36500
するとまた、見慣れた表示がでます。
Enter pass phrase for server.key: aaaaa (※先ほど入力したパスフレーズを入力してください)
これでとりあえず自己証明書が生成完了したことになるわけですが、
このままだとApacheの再起動のたびにパスフレーズを入力するはめになるので、
秘密鍵からパスフレーズを削除します。
mv -i server.key server.key_backup
openssl rsa -in server.key_backup -out server.keyすると、いつもどおりパスフレーズを聞かれるので、入力する
Enter pass phrase for server.key_backup: aaaaa (※先ほど入力したパスフレーズを入力)
これで本当にSSL証明書の生成フェーズは完了。
こっからは、Apache側でhttps起動してくれるように設定します。
cd /etc/httpd/conf.d/
cp -p ssl.conf ssl.conf_backup (※一応バックアップとっておきましょう。たしなみですね。)
vi ssl.confまずは、秘密鍵の設定を修正します。
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
↓
SSLCertificateKeyFile /etc/httpd/key/server.key次に証明書ファイルの設定を修正。
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
↓
SSLCertificateFile /etc/httpd/key/server.crt※一応Apacheの設定に問題がないかを確認する。
/etc/rc.d/init.d/httpd configtest結果が、「Syntax OK」なら問題なし。
最後にApache自体を再起動させてあげれば完了。
/etc/rc.d/init.d/httpd restart
Corega間でルータを移設したらLAN内から自宅サーバに接続できない
もともとCorega(アライドテレシス)のWLBARGP(WL-BAR-GP)を利用していたのですが、
自宅サーバでHTTPSを利用するためにポートをあけようとしたら、
熱暴走か何かわからないが、全然更新がかけられなかったため、
移設を簡単にする目的と、Buffaloがiphoneと相性問題が出ることがあるとAppleのジーニアスに聞いたのとで、
同じCoregaのCG-WLR300GNEに移設することにしました。
コレガ(アライドテレシス) IEEE802n.11n/g/b規格対応 無線LANルータ 有線ポートオールギガ/DLNA USBポート/WPS CG-WLR300GNE 新品価格 |
何がいいかというと、USB経由でプリンターだったりHDD(Disk, ハードディスク)などを共有できる。
実際は共有ファイルサーバがあるので、当分は使わないだろうが、拡張性があるのと、
内部ネットワークがギガ接続にできる(有線のサーバに最適)で300Mpbsの無線があるので、
これにしました。
で、もともとWLBARGPでは、DMZは利用せずにバーチャルサーバ的なものだけで
自宅サーバ用のポートをあけて、ポートフォワードしていたのですが、
CG-WLR300GNEで同じ設定にすると、何やら挙動が怪しい。
外部から自宅サーバに接続すると問題なさそうだし、
単体で処理が終わる静的なファイルなどは問題なさそうなのだが、
自宅サーバ内の別のサイトからXMLデータを引っ張ったり、
同じサイト内でもCSSなどの別ファイルを読み込むものがうまく挙動しない。正常動作しない
具体的な原因についてはわかりませんが、
ファイアフォールなどのセキュリティ関連のポリシーが更新されているのではないだろうか。
いろいろと悩んだ結果、やむなくルータ側のセキュリティが動作しないDMZで設定することにしました。
すると、問題なく自宅内(LAN内)から自宅内(自宅サーバ)への接続が高速でできるようになりました。
とりあえずどうにかなってよかった
ちなみに自宅内から自宅内サーバには接続できないのが本来の動きだと思います。
結局OUTとINのグローバルIPが同一になるからとかいう理由じゃないかと思います。
調べた感じだと、CoregaとBaffaloは可能だが、NecとかPlanexとかは駄目らしい。