2014年2月27日木曜日

CentOS Apache+SSLでhttpと通信を行う

Webサーバー間の通信を暗号化することができる。
リンクがhttpsになっているやつがそうなんだそうな。
これでユーザー名やパスワードの情報送信をWebサーバー間で行っても安心!

参考サイト

OpenSSLがインストールされているか確認する


今ではほとんどデフォルトでインストールされているらしいけど、念のため。
下記コマンドを実行する

/*---------------------------------------------------------------------------*/
openssl version
/*---------------------------------------------------------------------------*/

OpenSSLのバージョンが表示されればインストール済み。
表示されないようならyumなりなんなり使ってインストールしよう。

mod_sslをインストールする


ssl機能をサーバーに実装してくれるモジュールをインストールする。

/*---------------------------------------------------------------------------*/
yum install --enablerepo=remi mod_ssl
/*---------------------------------------------------------------------------*/

Webサーバーの秘密鍵を生成する


キーを作成するディレクトリに移動して生成コマンドを実行する。
入力を求められるパスフレーズは任意でオーケー。
今後のSSL鍵関連にはこのパスを使うので忘れないように。

/*---------------------------------------------------------------------------*/
openssl genrsa -des3 1024 > server.key
/*---------------------------------------------------------------------------*/

ディレクトリはどこでも問題なさそう。
参考サイトにならってhttpdのconfディレクトリを今回は使用する。

Webサーバーの公開鍵を生成する


続けて公開鍵。コマンドを叩け!

/*---------------------------------------------------------------------------*/
openssl req -new -key server.key > server.csr
/*---------------------------------------------------------------------------*/

各種公開鍵の情報を入力。各要素がなにを指しているかを参考サイトから引用して張っとく。

/*---------------------------------------------------------------------------*/

   正しい秘密鍵のパスフレーズを入力すると、公開鍵情報の入力が求められます。参考例として筆者が入力した値をリスト1に紹介します。それぞれ、Country Nameは国名、State or Province Nameは都道府県名、Locality Name、区町村名となります。

   また、Organization Nameは組織名、Organizational Unit Nameは部門名です。Common NameはSSLを使うサイトの名前(今回は皆さんのサーバIPアドレス)、Email Addressはメールアドレスとなります。

   A challenge passwordは証明書を破棄する場合に必要になるパスワード、An optional company nameは別の組織名がある場合、その組織名の入力となります。なお「A challenge password」と「An optional company name」は空欄でもかまいません。

/*---------------------------------------------------------------------------*/

デジタル証明書を作成する


本来このデジタル証明書は有料で発行してもらうものなのだが、今回は自分で作成してしまう。

/*---------------------------------------------------------------------------*/
openssl x509 -in server.csr -days 365 -req -signkey server.key > server.crt
/*---------------------------------------------------------------------------*/

こちらでも、秘密鍵作成時のパスフレーズが求められる。

SSLの設定を行う


ssl_modをインストールしたときに/etc/httpd/conf.d/ssl.confが作成されているので
そいつを編集する。

/*---------------------------------------------------------------------------*/
<VirtualHost hogeserver:443>
DocumentRoot "/var/www/html"
ServerName hogeserver
SSLCertificateFile /hoge/httpd/conf/server.crt
SSLCertificateKeyFile /hoge/httpd/conf/server.key
/*---------------------------------------------------------------------------*/

変更箇所のみ抜粋。SSLCertificateFileとSSLCertificateKeyFileは作成した鍵のファイルパス。
ServerNameは公開鍵作成時に指定したホスト名を指定。でないと警告が出る。

設定を完了したらapacheを再起動する。

/*---------------------------------------------------------------------------*/
/etc/rc.d/init.d/httpd restart
/*---------------------------------------------------------------------------*/

ポートが開放されているかを確認する


参考サイト


ツールが置いてあるページに飛んでポートが開放されているかを確認する。
ページに飛んだらホスト名とポート番号を入力してボタンを押す。

自分はポートが開放されているのに気づかないで結構な時間を無駄にしてしまった。
ポートが開放されていなければ開放してあげよう。
/etc/sysconfig/iptablesに使用するポート番号(今回は443)を追加。

/*---------------------------------------------------------------------------*/
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
/*---------------------------------------------------------------------------*/

ほんでもって再起動。

/*---------------------------------------------------------------------------*/
/etc/init.d/iptables restart
/*---------------------------------------------------------------------------*/

もっかいツールを使って開放されているか確認。開放されていれば次へ。

SSLで接続する


次へと言うかこれで最後。httpsを使ってWebページに接続する。接続に問題なければ成功。

おまけ:apache再起動時の鍵認証をなくす


SSL、というか秘密鍵を導入するとapacheを再起動するたびにパス認証が必要になる。
面倒なのでこれをなくす。

/*---------------------------------------------------------------------------*/
openssl rsa -in server.key -out server.key
/*---------------------------------------------------------------------------*/

サーバー用秘密鍵からパスワードを削除してしまう。これでパスの入力がいらなくなる。


0 件のコメント:

コメントを投稿