#contents
* Virtual Server で SSL 接続をサポートする [#i4836d19]
- Fedra2 環境に以降するにあたり、以下の内容を実現しようと考えた
-- Virtual server の設定により www, www-SSL, wiki, webmail を独立させる
--- 従来 https://www.hmuna.com/wiki としていたものを https://wiki.hmuna.com/ としたい
-- 各エントリーに対して SSL 通信を確保する
-- SSL 認証関係を統合して管理する (従来は Apache系、Mail系が別々だった)
-- 各 virtual server 毎にページ内でユーザ認証を行えるようにしたい (Digest 認証を使いたい)
-- webmail が使えるようにしたい
** SSL と virtual server の関係 [#x7516407]
- virtual server の設定は /etc/httpd/conf/httpd.conf で行っている。
- しかし このスクリプトの実行よりも先にSSL 通信確立が行われる。
-- 接続先毎に IP を分けた(=IP based)virtual server なら個々に SSL 設定が可能
-- 名前だけによる(=Name based、DNS エントリー上の同一IPに複数の名前を定義)では、SSL 対応が出来ない.... が一般解釈
- virtual server アクセス時にポートを明示的に指定させることで、Name based virtual server の SSL 化が出来ることがわかった。
** /etc/httpd/conf/httpd.conf と /etc/httpd/conf.d/ssl.conf の設定を編集 [#bb890b22]
*** httpd.conf の編集 [#k87d6e9b]
- Listen port の設定はここに書いた (ssl.conf の設定は無効にした)
- 2005-1-1 時点での httpd.conf → &ref(httpd.conf);
- 2005-10-24 時点での httpd.conf → &ref(httpd.conf_20051024);
#
# Use name-based virtual hosting.
#
#NameVirtualHost *:80
#NameVirtualHost www.hmuna.com
NameVirtualHost *:443
NameVirtualHost *:9443
NameVirtualHost *:9444
# Munakata add virtual host entry for WWW page
#<VirtualHost www.hmuna.com>
# ServerAdmin root@hmuna.com
# DocumentRoot /var/www/html/htdocs
# ServerName www.hmuna.com
#</VirtualHost>
# Munakata add virtual host entry for PukiWiki page
#<VirtualHost wiki.hmuna.com>
# ServerAdmin root@hmuna.com
# DocumentRoot /var/www/html/pukiwiki/
# ServerName wiki.hmuna.com
#</VirtualHost>
*** ssl.conf の編集 [#x6f3e43e]
- Virtual server の設定はここに書いた
- 認証関係は 各 Virtual server directive の中に設定した
- 2005-1-1 時点での ssl.conf → &ref(ssl.conf);
- 2005-10-24 時点での ssl.conf → &ref(ssl.conf_20051024);
</VirtualHost>
# ----------------------------------------------------------------------------------------------------------------------------------
# muna add virtual host entry for webmail (443)
# -----------------------------------------------------------------------------------------------------------------------------------
##
## SSL Virtual Host Context (443)
##
<VirtualHost _default_:443>
DocumentRoot "/var/www/html/htdocs"
ServerName webmail.hmuna.com:443
ServerAdmin munakata@hmuna.com
# Server Certificate:
SSLCertificateFile /usr/local/certs/webmail_server.crt
# Server Private Key:
SSLCertificateKeyFile /usr/local/certs/server.key
# Certificate Authority (CA):
SSLCACertificatePath /usr/local/certs/demoCA
SSLCACertificateFile /usr/local/certs/demoCA/cacert.pem
# muna add Revocation File
# temporaly disabled by muna
#SSLCARevocationFile /usr/local/certs/demoCA/crl/crl.pem
# muna modify only trust CA direct certfication
# now disable client verification
#SSLVerifyClient require
#SSLVerifyDepth 1
# muna enables .htaccess control inder www-ssl data directory
<Directory "/var/www/html/webmail">
AllowOverride All
</Directory>
</VirtualHost>
# -----------------------------------------------------------------------------------------------------------------------------------
# muna add virtual host entry for wiki (9443)
# ----------------------------------------------------------------------------------------------------------------------------------
##
## SSL Virtual Host Context (9443)
##
<VirtualHost _default_:9443>
# munakata add SSL virtual host entry
DocumentRoot "/var/www/html/pukiwiki"
ServerName wiki.hmuna.com:9443
ServerAdmin munakata@hmuna.com
# -----------------------------------------------------------------------------------------------------------------------------------
# muna add virtual host entry for webmail (9444)
# -----------------------------------------------------------------------------------------------------------------------------------
##
## SSL Virtual Host Context (9444)
##
<VirtualHost _default_:9444>
DocumentRoot "/var/www/html/webmail"
ServerName webmail.hmuna.com:9444
ServerAdmin munakata@hmuna.com
** virtual server データディレクトリーのパーミション設定 [#m88b45ad]
- 設定がおかしいと本来のページにアクセスされない
-- ページなし(404)にならず、default のページにリダイレクトされる
-- これは SSL 無しのページなので、設定上不味い。 理由を解析する必要がある
- /var/www/html の下の設定確認
-- 各ディレクトリー下のパーミションは 755 にした
-- 各ディレクトリー下のオーナーは apache.apache にした
[root@power certs]# ls -al /var/www/html/
合計 16
drwxr-xr-x 3 root root 4096 1月 1 19:56 .
drwxr-xr-x 8 root root 4096 11月 13 00:20 ..
drwxr-xr-x 2 apache apache 4096 12月 31 18:13 htdocs
-rwxrwxrwx 1 apache apache 18 12月 25 08:00 info.php
lrwxrwxrwx 1 apache apache 20 12月 25 08:51 pukiwiki -> /var/pukiwiki- 1.4.4/
lrwxrwxrwx 1 apache apache 24 1月 1 19:56 webmail -> /usr/share/squirrelmail/
* Virtual Server の認証の設定 [#k57b1930]
** Digest 認証の設定 [#u87136e2]
- /etc/httpd/conf.d/ssl.conf の設定
# muna adopt digest authrization to wiki space
<Directory "/var/www/html/pukiwiki">
Options Indexes FollowSymlinks
AllowOverride None
Order allow,deny
Allow from all
AuthType Digest
AuthName "private wiki"
AuthDigestFile /usr/local/certs/secret_wiki_digest
Require vallid-user
</Directory>
- /usr/local/serts/secret_wiki_digest の作成
-- ここで指定する RELM(”private wiki” の部分)が上記の定義と一致している必要があるようだ (名前とパスワード以前に)
[root@power certs]# htdigest -c secret_wiki_digest "private wiki" munakata
Adding password for munakata in realm private wiki.
New password: ← nananamuna
Re-type new password:
- 一般ユーザーから認証ファイルが見えないようにパーミションを変更
[root@power certs]# chown apache.apache secret_wiki_digest
[root@power certs]# chmod 600 secret_wiki_digest
[root@power certs]# ls -l
合計 24
drwxr-xr-x 6 root root 4096 12月 30 21:35 demoCA
-rw-r--r-- 1 root root 1839 12月 30 21:43 mail.pem
-rw------- 1 apache apache 55 12月 31 09:26 secret_wiki_digest
-rw-r--r-- 1 root root 952 12月 30 21:37 server.crt
-rw-r--r-- 1 root root 708 12月 30 21:29 server.csr
-rw-r--r-- 1 root root 887 12月 30 21:24 server.key
[root@power certs]# cat secret_wiki_digest
munakata:private wiki:bec8fa7b1226a242f6a0c367d070fe42
- これで Digest 認証で正常に Top page まで入れることを確認した。
- IE6 では wiki のリンク先にアクセスするとエラーになることが判った。
- log を見ると
[Fri Dec 31 22:18:29 2004] [error] [client 192.168.1.12] Digest: uri mismatch - </> does not match request-uri </?DVD_VideoEdit>, referer: https://wiki.hmuna.com:9443/
となっている。 Mozilla や Firefox では問題なく表示できるので IE6 固有の問題と思われる。
** BASIC 認証への設定 [#a33dcddb]
- 上記の問題の回避のため、BASIC 認証の設定を行う
- /etc/httpd/conf.d/ssl.conf の中の Virtual Server 毎の定義部に追加する
- この設定により、virtual server 毎の認証方法を決めることができた。
-- WWW-SSL については Digest 認証、 wiki は BASIC 認証、 webmail は認証なし
# instead, I adopt basic authrization
<Directory "/var/www/html/pukiwiki">
Options Indexes FollowSymlinks
AllowOverride None
Order allow,deny
Allow from All
AuthType Basic
AuthName "Enter private wiki password"
AuthUserFile /usr/local/certs/secret_wiki_basic
Require valid-user
</Directory>
- BASIC 認証用のパスワードファイルの作成
[root@power root]# cd /usr/local/certs/
[root@power certs]# htpasswd -c secret_wiki_basic munakata
New password: ← "nananamuna"
Re-type new password:
Adding password for user munakata [root@power certs]# htpasswd -c *** httpd
[root@power certs]# chown apache.apache secret_wiki_basic
[root@power certs]# ls -l secret_wiki_basic
-rw------- 1 apache apache 23 1月 2 10:33 secret_wiki_basic
* SSL の自動起動 [#k16d806e]
- /etc/rc.d/inetd/httpd の内容を編集する (一箇所追加のみ)
#
# muna modify to start SSL
#
start() {
echo -n $"Starting $prog: "
check13 || exit 1
# daemon $httpd $OPTIONS
daemon $httpd -D SSL $OPTIONS
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch ${lockfile}
return $RETVAL
}
** 起動直後のポートの確認 (SSL で起動していることの確認) [#q1e8242c]
- 起動すると 443(www-SSL),9443(wiki),9444(webmail) が LISTEN になっている
[root@power root]# netstat -an --tcp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:32770 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:32771 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:32772 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:783 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:1007 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:9010 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:988 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN
tcp 0 0 :::9443 :::* LISTEN
tcp 0 0 :::9444 :::* LISTEN
tcp 0 0 :::80 :::* LISTEN
tcp 0 0 :::22 :::* LISTEN
tcp 0 0 :::443 :::* LISTEN
tcp 0 1380 ::ffff:192.168.1.17:22 ::ffff:192.168.1.1:2036 ESTABLISHED
tcp 0 0 ::ffff:192.168.1.1:9443 ::ffff:192.168.1.1:2055 TIME_WAIT
[root@power root]#