CentOS51でバックアップサーバ/(9)SSLの導入 のバックアップ(No.2)


[[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のインストール

ダウンロード

  • まずは、SSL用のモジュール(mod_ssl)をインストールするのだが、yumであっけなく終わってしまう。
    [root@kuraric51 ~]# yum -y install mod_ssl
    Setting up Install Process
    Parsing package install arguments
    Resolving Dependencies
    (中略)
    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  ]
  • ルータのポート443を開いておかないと、外部からSSLアクセスができない。
    router

接続試験

  • 早速、接続試験を行う。基本的に問題ないが、接続時に必ず警告が出る。
    IE_alert
  • これは、証明書が信用できませんと言っている。本来のセキュリティからすれば、なりすまし防止のために公式の認証機関の証明書をもらう必要があるのだが、年間数万円の費用がかかってしまう。それは勘弁してもらって割愛と。したがって、自己証明書(いわば、「オレオレ」証明)なので、こうした警告が出る。ご理解をいただきたい。
  • IEの場合は、この程度なのだが、新しく出たGoogleのブラウザChromeだと、激しい警告が出る。普通の人だと思わず引いてしまいそう(^^;) フィッシング対策強化と言うことだと思いますが、ま、めげずに行きましょう!!
    Chrome-alert

コンテンツの振分けについて

  • 以上で、サーバ側のSSL設定自体は終わった。問題は、コンテンツをどう配置するかである。
  • 現在のコンテンツを整理すると以下のようになるが、どれをSSLに移行するかという議論である。
    contents
  • 会員制で閲覧限定していたページと、くらさんブログのようにオープンにしていたページがある。この運用上の差異を踏襲することにした。前者を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 DocumnetRootの変更(実際は、現状のまま)

[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を再起動する

<<<<<< この項、未完 >>>>>>>


トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS   リンク元