CentOS51でバックアップサーバ/(9)SSLの導入 のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- CentOS51でバックアップサーバ/(9)SSLの導入 へ行く。
- 1 (2008-10-14 (火) 17:34:54)
- 2 (2008-10-14 (火) 17:59:41)
- 3 (2008-10-18 (土) 13:22:35)
- 4 (2008-10-18 (土) 13:22:35)
[[CentOS51でバックアップサーバ/(9)SSLの導入 ]]
- SSLはWebサーバとPC間の通信を暗号化するプロトコルである。ブラウザ側から言えば、アドレス欄に通常「http://kurainet.com/」と入力するところが、「https://kurarinet.com/」となって、最下段のステータス欄に鍵マークが施錠状態になったりする。暗号化するので、パスワード入力や送受信データの内容が読み取られる(盗聴の)心配がなく、一般には、通販サイトのカード番号の入力画面などで使われることが多い。
- TCPサービスのポート番号も異なる。HTTPは#80、SSLは#443である。このため、ドメイン一つでも異なるサイトを同時に運用することも可能である。(昔、個人専用のホームページを裏で運用していたことはあるのだが、その話はあらためて)
- クラリNETは基本的に会員制で運用しているので、セキュリティを考えるともっと早くに導入してもよかったのだが、面倒と億劫でずーっと引き伸ばしてきたのだが、「いい加減にやれよ!」という天の声が聞こえたので、あわてて取り組みました(^^;)
- 結果的には、それほど難しいことはなかったのですが、ポイントとしては、既存のコンテンツをSSLと非SSLに振り分けるためのサーバ内DIR構成と、http:// でアクセスしてきても自動的にSSLにするための設定の2つでした。(2008/10/14記)
SSLのインストール †
- 例によっていつものサイト「CentOSで自宅サーバー構築」の記事Webサーバー間通信内容暗号化を参考にした。
ダウンロード †
- まずは、SSL用のモジュール(mod_ssl)をインストールするのだが、yumであっけなく終わってしまう。
[root@kuraric51 ~]# yum -y install mod_ssl Setting up Install Process Parsing package install arguments Resolving Dependencies --> Running transaction check ---> Package mod_ssl.i386 1:2.2.3-11.el5_1.centos.3 set to be updated --> Processing Dependency: libdistcache.so.1 for package: mod_ssl --> Processing Dependency: libnal.so.1 for package: mod_ssl --> Running transaction check ---> Package distcache.i386 0:1.4.5-14.1 set to be updated --> Finished Dependency Resolution Dependencies Resolved ============================================== Package Arch Version Repository Size ============================================== Installing: mod_ssl i386 1:2.2.3-11.el5_1.centos.3 base Installing for dependencies: distcache i386 1.4.5-14.1 base 119 k Transaction Summary ============================================== Install 2 Package(s) Update 0 Package(s) Remove 0 Package(s) Total download size: 203 k Downloading Packages: (1/2): distcache-1.4.5-14 100% |=========================| 119 kB 00:00 (2/2): mod_ssl-2.2.3-11.e 100% |=========================| 84 kB 00:00 Running rpm_check_debug Running Transaction Test Finished Transaction Test Transaction Test Succeeded Running Transaction Installing: distcache ######################### [1/2] Installing: mod_ssl ######################### [2/2] Installed: mod_ssl.i386 1:2.2.3-11.el5_1.centos.3 Dependency Installed: distcache.i386 0:1.4.5-14.1 Complete!
証明書の発行 †
- 続いて証明書や暗号化のキーを発行する。
- まず、当該の概要のDIRに移動する
[root@kuraric51 /]# cd /etc/pki/tls/certs/
- 証明書作成のためのMakefileが用意されているが、有効期間が1年(365日)なので、あらかじめ10年分(3,650日)に変更しておく。sed コマンドで、Makefile内の 有効期間用の文字列を置換している。
[root@kuraric51 certs]# sed -i 's/365/3650/g' Makefile
- まず、サーバ用の証明書と秘密鍵を作成する。パスワードは適用に決めておく(忘れないように)【】部分が実際の入力個所。
[root@kuraric51 certs]# make server.crt umask 77 ; \ /usr/bin/openssl genrsa -des3 1024 > server.key Generating RSA private key, 1024 bit long modulus .............................................++++++....++++++ e is 65537 (0x10001) Enter pass phrase:【パスワード入力】 Verifying - Enter pass phrase:【パスワード再入力】 umask 77 ; \ /usr/bin/openssl req -utf8 -new -key server.key -x509 -days 3650 -out server.crt -set_serial 0 Enter pass phrase for server.key: You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [GB]:【JP】 State or Province Name (full name) [Berkshire]:【Nagano】 Locality Name (eg, city) [Newbury]:【Nagano】 Organization Name (eg, company) [My Company Ltd]:【Enterキー】 Organizational Unit Name (eg, section) []:【kurarinet.com】 Common Name (eg, your name or your server's hostname) []:【kurarinet.com】 Email Address []:【admin@kurarinet.com】
- サーバー用秘密鍵からパスワード削除しておく。これは、Webサーバー起動する度にパスワードを要求されないようにするためである。
[root@kuraric51 certs]# openssl rsa -in server.key -out server.key Enter pass phrase for server.key:【パスワード入力】 writing RSA key
- 生成されファイルをチェックすると、新しいファイル2つができている。
[root@kuraric51 certs]# ls -l 合計 464 -rw-r--r-- 1 root root 2247 10月 12 11:52 Makefile -rw-r--r-- 1 root root 441017 6月 15 08:37 ca-bundle.crt -rw------- 1 root root 1371 9月 22 14:52 localhost.crt -rwxr-xr-x 1 root root 610 6月 15 08:37 make-dummy-cert -rw------- 1 root root 1334 10月 12 11:54 server.crt ★(証明書) -rw------- 1 root root 887 10月 14 16:05 server.key ★(秘密鍵)
SSLの設定 †
- 証明書や鍵を作成しただけでは有効にならない。これを適用すべく、SSL用の設定ファイルに指定する必要がある。
- ApacheSSL設定ファイルを開いて編集する。デフォルトでは。localhost.crtなどが適用されている。この2箇所を書き換える。
[root@centos certs]# vi /etc/httpd/conf.d/ssl.conf ----------- [サーバー用証明書を指定] SSLCertificateFile /etc/pki/tls/certs/localhost.crt ↓ SSLCertificateFile /etc/pki/tls/certs/server.crt [サーバー用秘密鍵を指定] SSLCertificateKeyFile /etc/pki/tls/private/localhost.key ↓ SSLCertificateKeyFile /etc/pki/tls/certs/server.key
- 続いてDocumentRootを変更する。SSLをインストールしただけでは、コンテンツへリンクしない。とりあえず、現在のDocumentRootと同じにしておく。#を削除してコメント解除する。設定ファイルは同じく、ssl.conf
# General setup for the virtual host, inherited from global configuration #DocumentRoot "/var/www/html" ↓ DocumentRoot "/var/www/html"
Apacheの再起動とルータのポート443をオープンにする †
- ssl.confの設定変更を反映させるには、httpdを再起動する必要がある。
[root@kuraric51 certs]# /etc/rc.d/init.d/httpd restart httpd を停止中: [ OK ] httpd を起動中: [ OK ]
接続試験 †
- これは、証明書が信用できませんと言っている。本来のセキュリティからすれば、なりすまし防止のために公式の認証機関の証明書をもらう必要があるのだが、年間数万円の費用がかかってしまう。それは勘弁してもらって割愛と。したがって、自己証明書(いわば、「オレオレ」証明)なので、こうした警告が出る。ご理解をいただきたい。
- IEの場合は、この程度なのだが、新しく出たGoogleのブラウザChromeだと、激しい警告が出る。普通の人だと思わず引いてしまいそう(^^;) フィッシング対策強化と言うことだと思いますが、ま、めげずに行きましょう!!
コンテンツの振分けについて †
- 会員制で閲覧限定していたページと、くらさんブログのようにオープンにしていたページがある。この運用上の差異を踏襲することにした。前者をSSLに移行し、後者は 非SSLに残す。といっても、サーバ内でディレクトリーを分けて配置し、アクセス方法を変えるだけであるが。
リダイレクト †
- もう一つ問題がある。会員限定コンテンツをSSLに移行した場合、接続先が https://・・となる。ところが、お気に入りに登録済みのものは http://・・のままである。
- 切替え後に、知らずに http://・・で来た人はアクセスできなくなってしまう。これは困る。
- というわけで、調べてもらったら、サーバ側で自動的に https://・・振り替えてあげる方法がわかった。「パソコンおやじ」の記事■HTTPでアクセスした時、自動的にHTTPSにrewriteする方法である。
- 具体的には、mod_rewrite を使うのだが、あらかじめ組み込まれているので、転送設定を書き加えるだけでよい。詳細は次項で。
切替え手順 †
- 以上で、準備が整ったので、最終的な切替え手順を整理する。
- まず、DIRを2つに分けるが、切替えを簡単にするため、SSL化コンテンツを現状DIR構成のまま残し、非SSLコンテンツを新しいDIRにmoveすることにした。
①DIR構成
【SSL化コンテンツ】今のDIRにそのまま残す。 /var/www/ +html/ +pastlog.html (旧ホスト過去ログメニュー) +bbs16/ (イメージ掲示板のデータ類) +wiki/ (旧wiki) +past/ (旧ホストの過去ログデータ) +members/ (同上 past/と同じ?) +ezm/ (これも、SSLにしておこう!) +OpenPNE/ (SNS)
【非SSLコンテンツ】 新しいDIRに移す /var/www/open/ +index.php (トップページ類) +*.html(change.html★、howto.html、member.html kurari_sys.html、kurari_ikou.html など) +style_top.css (共通スタイルシート) +*.gif、*.jpg (各種イメージファイル) +mailform.php、mailform.dat (メールフォームphp) +sgcouter/ (カウンターphp) +kurasan/ (kurasan-blogの 入り口) +wordpress/ (同上の本体)
- 設定変更が必要なファイルがいくつかある
②OpenPNEの設定変更
・URLを変更 https://kurainet.com/ とする [root@kuraric51]# vi /var/www/OpenPNE/config.php ーーー // Web上の絶対パス(URL)(最後にスラッシュを付けてください) define('OPENPNE_URL', 'https://kurarinet.com/sns/'); ・PartialSSLの設定(2ヶ所)をコメントに(詳細は略)
③ssl.conf 書換え(実際は、現状のまま)
[root@kuraric51]# vi /etc/httpd/conf.d/ssl.conf ーーーー # General setup for the virtual host, inherited from global configuration DocumentRoot "/var/www/html"
④httpd.conf
・書換え-1 (DocumentRootを修正し、関連するDirectory指定も合わせる) [root@kuraric51]# vi /etc/httpd/conf/httpd.conf ------- DocmentRoot "/var/www/open" <Directory "/var/www/open"> ・書換え-2(リダイレクト処理を追加する) <IfModule mod_rewrite.c> RewriteEngine On RewriteLog "logs/rewrite_log" RewriteLogLevel 0 RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^/sns/(.*)?$ https://%{HTTP_HOST}/sns/$1 [L,R] RewriteRule ^/ezm/(.*)?$ https://%{HTTP_HOST}/ezm/$1 [L,R] RewriteRule ^/wiki/(.*)?$ https://%{HTTP_HOST}/wiki/$1 [L,R] RewriteRule ^/bbs16/(.*)?$ https://%{HTTP_HOST}/bbs16/$1 [L,R] RewriteRule ^/members/(.*)?$ https://%{HTTP_HOST}/members/$1 [L,R] RewriteRule ^/cgi-bin/(.*)?$ https://%{HTTP_HOST}/cgi-bin/$1 [L,R] </IfModule>
⑤httpdの再起動