12-4. Apache WWWサ−バ (1) Apache WWWサ−バ `21/03 * 単純にコンパイルする Apache については、"5-3. サ−バサイドスクリプト" も参照されたい。 2001年3月 Sun サイトのア−カイブには apache_1.3.4 のバイナリしかなかった。以下は Apache の 1.3.9 を Solaris 2.6 でコンパイルした様子である。 # /bin/csh # setenv PATH /usr/local/bin:/usr/ccs/bin:$PATH # cd /usr/local/source/ # zcat apache_1.3.9.tar.gz | tar xvf - # cd apache_1.3.9;ls -F ABOUT_APACHE Makefile.tmpl cgi-bin/ icons/ Announcement README conf/ logs/ INSTALL README.NT config.layout src/ KEYS README.configure configure* LICENSE WARNING-NT.TXT htdocs/ # ./configure << 何もオプションを付けていない。 # make; make install # cd /usr/local/apache;ls -F bin/ conf/ icons/ libexec/ man/ cgi-bin/ htdocs/ include/ logs/ proxy/ # bin/httpd -l << どんなモジュ−ルが入ったかリストする。実際は縦に出る。 Compiled-in modules: http_core.c mod_env.c mod_log_config.c mod_mime.c mod_negotiation.c mod_status.c mod_include.c mod_autoindex.c mod_dir.c mod_cgi.c mod_asis.c mod_imap.c mod_actions.c mod_userdir.c mod_alias.c mod_access.c mod_auth.c mod_setenvif.c # bin/apachectl start << /usr/local/apache/conf/httpd.conf をデフォルトで見る。 ./apachectl start: httpd started # ps -ef | grep httpd root 741 1 0 14:16:47 ? 0:00 /usr/local/apache/bin/httpd nobody 2196 741 0 15:26:11 ? 0:00 /usr/local/apache/bin/httpd nobody 2183 741 0 15:25:53 ? 0:00 /usr/local/apache/bin/httpd nobody 2192 741 0 15:26:04 ? 0:00 /usr/local/apache/bin/httpd nobody 2184 741 0 15:25:53 ? 0:00 /usr/local/apache/bin/httpd nobody 2181 741 0 15:25:53 ? 0:00 /usr/local/apache/bin/httpd nobody 2182 741 0 15:25:53 ? 0:00 /usr/local/apache/bin/httpd nobody 2180 741 0 15:25:53 ? 0:00 /usr/local/apache/bin/httpd # kill 741 << root の httpd を殺すと全部の httpd デ−モンが消える。 * Proxy と DSO 機能を追加する # ./configure --enable-module=so --enable-module=proxy << DSO & Proxy support。 Configuring for Apache, Version 1.3.9 + using installation path layout: Apache (config.layout) + Warning: no Perl interpreter detected for support scripts. + Perhaps you need to specify one with --with-perl=FILE. Creating Makefile Creating Configuration.apaci in src enable-module=so 指定で静的 Creating Makefile in src に mod_so.cモジュ−ルが追加 + configured for Solaris 260 platform される。enable-module=proxy + setting C compiler to gcc で動的に mod_proxy.c モジュ + setting C pre-processor to gcc -E −ルが追加される。 + checking for system header files + adding selected modules プロキシサ−バとして利用する + using -ldl for vendor DSO support には、少しでもパフォ−マンス + checking sizeof various data types を上げるためモジュ−ルを静的 + doing sanity check on compiler and options 組み込みにするのがよい。不要 Creating Makefile in src/support なモジュ−ルは削ってもいい。 Creating Makefile in src/os/unix Creating Makefile in src/ap 動的モジュ−ルだと5から9% Creating Makefile in src/main 性能が落ちると書かれてあった。 Creating Makefile in src/lib/expat-lite 「Software Design」2003/12 の Creating Makefile in src/modules/standard 62ペ−ジ、"モジュ−ルをDSOで Creating Makefile in src/modules/proxy 組み込むと遅くなる?"、参照。 # make; make install /usr/local/apache/conf/httpd.conf ------------------------------------------------------------------------------- | | |Port 80 << 80番ポ−トで Proxy を動かしてもいい。 | | |# CacheNegotiatedDocs: By default, Apache sends "Pragma: no-cache" with each |# document that was negotiated on the basis of content. This asks proxy |# servers not to cache the document. Uncommenting the following line disables |# this behavior, and proxies will be allowed to cache the documents. |#CacheNegotiatedDocs << コメントを外すと HTML の記述でキャッシュしない指 | | 示を無視して、キャッシュするようにする。 |# |ProxyRequests On << キャッシュをしないプロキシだけなら、これだけコメ |# ント外せばいい。 |# Order deny,allow |# Deny from all |# Allow from .your_domain.com |# | |# Enable/disable the handling of HTTP/1.1 "Via:" headers. |# ("Full" adds the server version; "Block" removes all outgoing Via: headers) |# Set to one of: Off | On | Full | Block |#ProxyVia On | |# To enable the cache as well, edit and uncomment the following lines: |# (no cacheing without CacheRoot) |#CacheRoot "/usr/local/apache/proxy" |#CacheSize 5 << キャッシュ用に使うディスク容量。Kbyte。 |#CacheGcInterval 4 << キャッシュ期間を過ぎたファイルをチェックする。hr。 |#CacheMaxExpire 24 << キャッシュしておく時間。HTML の中の Expire 指示は | 無視する。CacheDefaultExpire の値が上限となる。 |#CacheLastModifiedFactor 0.1 << 有効期限のないファイルの有効期限を決める。squid | や NetCache と同じ意味。CacheMaxExpire 値が上限。 |#CacheDefaultExpire 1 << 有効期限のないファイルのデフォルトの有効期限。 |#NoCache a_domain.com another_domain.edu joes.garage_sale.com |# ↑キャッシュしないドメイン、IPアドレスなど記載する。 | | # /usr/local/apache/bin/apachectl -help usage: apachectl (start|stop|restart|fullstatus|status|graceful|configtest|help) start - start httpd stop - stop httpd restart - restart httpd if running by sending a SIGHUP or start if not running fullstatus - dump a full status screen; requires lynx and mod_status enabled status - dump a short status screen; requires lynx and mod_status enabled graceful - do a graceful restart by sending a SIGUSR1 or start if not running configtest - do a configuration syntax test help - this screen [ Proxy サ−バとして実際に利用するには ] /etc/resolv.conf /etc/nsswitch.conf このマシンからインタ−ネ ------------------------ ------------------------ ットのサイトの名前解決が |domain nix.co.jj |passwd: files できるようにする。DNS |#nameserver 127.0.0.1 |group: files のクライアントとして名前 |nameserver IPを記述 |hosts: files dns 解決できるよう設定する。 * Solaris 9 に入っていた Apache `25頃 Sun の V210 でも Blade 2500 でも同じ内容だった。バ−ジョンは 1.3 だった。 Apache の起動制御ファイル /etc/rc2.d/K16apache と /etc/init.d/apache は内容はほぼ一緒だ った。grep で比較すると少し違いはあるが。 ソ−スファイルはなし、バイナリが入って いた。`29/06 にも確認。 # ls /etc/apache README.Solaris jserv.conf mime.types tomcat.conf access.conf jserv.properties mime.types.new zone.properties httpd.conf-example magic srm.conf # ls -F /usr/apache bin/ htdocs/ include/ jserv/ libexec/ man/ perl5/ tomcat/ # ls /usr/apache/bin ab checkgid htpasswd logresolve apachectl dbmmanage httpd rotatelogs apxs htdigest jserv_shmedit suexec.disabled /etc/init.d/apache /etc/apache/httpd.conf ----------------------------------- ------------------------------------------- |#!/sbin/sh |ServerType standalone |APACHE_HOME=/usr/apache |ServerRoot "/usr/apache" |CONF_FILE=/etc/apache/httpd.conf | | | | |# Dynamic Shared Object (DSO) Support |LoadModule proxy_module libexec/libproxy.so # cd /etc/apache |AddModule mod_proxy.c # cp httpd.conf-example httpd.conf |AddModule mod_so.c |#SharedModule libproxy.so # /etc/init.d/apache start | | httpd starting. |Port 80 |User nobody # cd /usr/apache/bin |Group nobody # ./httpd -v |ServerAdmin you@yourhost.com Server version: Apache/1.3.31 (Unix) |Servername 127.0.0.1 Server built: Aug 19 2004 10:18:38 |DocumentRoot "/var/apache/htdocs" | | # ./httpd -l | Compiled-in modules: | ※ ProxyRequests On などの記述はない。 http_core.c | mod_so.c suexec: disabled; invalid wrapper /usr/apache/bin/suexec << エラ−のように見え るが問題ないらしい。 httpd.conf の内容はほとんど何もいじってない。触っても Servernameのところぐらいか。 パソコンのブラウザからアクセスしたら日本語のマニュアルが見えた。 "あなたの予想に 反して、このペ−ジが見えているでしょうか?"、と。 これで Apache はWWWサ−バと しては正常に稼働でいている。httpd.conf には LoadModule と AddModule の記述はたく さんあった。プロキシサ−バのモジュ−ルもある。ということは、この制御ファイルでは 最初から全部、有効にしているということか。README.Solarisの記述もそのように読める。 /usr/apache/libexec にはコンパイル済みのモジュ−ル libproxy.soなどがたくさんある。 でも動作を確認したところプロキシサ−バとしては機能しなかった。多分 httpd.conf に ProxyRequests On などの記述を自分で書けばいいのでないか。要確認!。 /etc/apache/README.Solaris 抜粋 ----------------------------------------------------------------------- |By default, all supplied modules are enabled, except mod_jserv and |mod_webapp (see below). This may not be an optimal configuration, as |you may not want or need many of the modules. In particular, |mod_perl is a memory hog (if you don't need it). (2) OpenSSL のインスト−ルとコンパイル `02/10 * Apache + OpenSSL + Apache-SSL 96年当時 Apache に SSLeay という SSL 用モジュ−ルを追加して、 暗号化WWWサ− バのテストをした。ほとんど日本語での参考資料がなく、 Netscape 社の英文ドキュメン トを読んで何とか設定したものだった。今日、インタ−ネット上でちょっと探しただけで も、インスト−ル例やデジタルID発行のやり方など見つけることができる。月日も経ち、 進歩したところもあるかと思うので、 改めて SSL 暗号化について調べてみることにした。 結果、現在 Apache を SSL 対応するには、3つの方法があることがわかった。 その中で も SSLeay に代わる OpenSSL モジュ−ルを入れたのが、どうもいいようであった。 1. OpenSSL + Apache-SSL( Apache 用 SSL 対応パッチ ) 2. OpenSSL + mod_ssl( Apache 用モジュ−ル ) 3. SSLeay + Apache-SSL Apache-SSL は Apache のパッチという形になっている。 mod_ssl は Apache のモジュ− ルという形になっている。Apache-SSL サイトいわく、 mod_ssl より安定性が高いという ことである。OpenSSL と SSLeay の違いは?。OpenSSL は SSLeay をベ−スに開発されて いる。SSLeay もまだ開発が続けられてはいる。 両者のコマンド体系は全く同じと言って いい。OpenSSL は SSL Ver.2.0/3.0 それに TLS 1.0 をサポ−トする。 TLS は SSL を基 に標準化した仕様で、ほとんど同じだが互換性はない。また、実装されたソフトはほとん どなく、実質的には SSL V.3.0 が使われている。 Apache-SSL は http://www.apache-ssl.org/ が本家である。 その忠実な日本語訳のサイ トが http://japache.infoscience.co.jp/Apache-SSL/Apache-SSL.html である。 現時点 での最新は 2000/03/06 リリ−スの apache_1.3.12+ssl_1.39 である。 OpenSSL の本家は http://www.openssl.org/ で、 openssl コマンドの詳しい説明がある。 日本語サイトは http://japache.infoscience.co.jp/technical/openssl/ である。 日本 語サイトでの最新は '99/08/09 の openssl-0.9.4 だが、本家では openssl-0.9.6である。 * OpenSSL のインスト−ルとコンパイル ( INDY IRIX 5.3 で実施 ) % cd /usr/local/source % ftp ftp.openssl.org > get openssl-0.9.4.tar.gz % zcat openssl-0.9.4.tar.gz | tar xvf - % cd openssl-0.9.4 % ./config Operating system: mips2-sgi-irix Configuring for irix-gcc IsWindows=0 できた Makefile のここを 02 にすること。 CC =gcc ↓ CFLAG =-mips2 -O3 -DTERMIOS -DB_ENDIAN % make << 10分ぐらいかかった。 % make test << 5分ぐらいかかった。 % make install * Apache に SSL 用パッチを当てる % cd /usr/local/source/apache_1.3.9 % zcat apache_1.3.9+ssl_1.37.tar.gz | tar xvf - % ./FixPatch % ./configure % make; make install * テスト用デジタルIDを作る % cd /usr/local/source/apache_1.3.9/src % make certificate /usr/local/ssl/bin/openssl req -config ../SSLconf/conf/ssleay.cnf \ -new -x509 -nodes -out ../SSLconf/conf/httpsd.pem \ -keyout ../SSLconf/conf/httpsd.pem; \ ln -sf httpsd.pem ../SSLconf/conf/`/usr/local/ssl/bin/openssl \ x509 -noout -hash < ../SSLconf/conf/httpsd.pem`.0 Using configuration from ../SSLconf/conf/ssleay.cnf unable to load 'random state' What this means is that the random number generator has not been seeded with much random data. Consider setting the RANDFILE environment variable to point at a file that 'random' data can be kept in. Generating a 1024 bit RSA private key ...+++++ .+++++ writing new private key to '../SSLconf/conf/httpsd.pem' ----- 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) [Some-State]:Aichi Locality Name (eg, city) []:Nagoya Organization Name (eg, company; recommended) []:NIX Ltd Organizational Unit Name (eg, section) []:CAD server name (eg. ssl.domain.tld; required!!!) []:web.nix.co.jj Email Address []:katou@nix.co.jj % cd /usr/local/source/apache_1.3.9/SSLconf できたデジタルID % ls -al conf ↓ lrwxr-xr-x .. 10 10月 20日 13時41分 4c46adae.0 -> httpsd.pem -rw------- .. 7385 7月 25日 1999年 httpd.conf -rw-r--r-- .. 1860 10月 20日 13時41分 httpsd.pem lrwxr-xr-x .. 21 10月 20日 13時03分 mime.types -> ../../conf/mime.types -rw------- .. 1019 6月 21日 1998年 ssleay.cnf httpsd.pem ----------------------------------------------------------------- |-----BEGIN RSA PRIVATE KEY----- ここからWWWサ−バの秘密鍵 |MIICXQIBAAKBgQDMEKNQoSlTb5rCWhUysyapzekbZny4IgplSx+pp8Dn9xnhpYlI | | |EO6wYQuQmc7UdUFAu36ZZUDagRT2AKbRUC/pnKrZ1ic+ |-----END RSA PRIVATE KEY----- |-----BEGIN CERTIFICATE----- ここからWWWサ−バのデジタルID |MIICojCCAgugAwIBAgIBADANBgkqhkiG9w0BAQQFADCBljELMAkGA1UEBhMCSlAx | | |Yiw9R/Ne |-----END CERTIFICATE----- 以前はこんな便利なコマンドはなかった。% make certificate だけで、 自己証明したデ ジタルIDができる。これでともかく暗号化WWWのテストができる。 httpsd.pem には WWWサ−バのデジタルID、それに秘密鍵も含まれていることに注意したい。 % cd /usr/local/apache/conf;ls access.conf magic srm.conf access.conf.default magic.default srm.conf.default httpsd.conf mime.types httpsd.conf.default mime.types.default ※ここの httpsd.conf は暗号化対応でない。 % mv httpsd.conf httpsd.conf.org << 一応とっておく。 % cp /usr/local/source/apache_1.3.9/SSLconf/conf/httpd.conf httpsd.conf ↑ 暗号化対応の制御ファイル /usr/local/apache/conf/httpsd.conf ---------------------------------------------- << とりあえずこれだけの制御ファ |User www イルで Apache は稼働する。 |Group user |LogLevel debug | |#SSLRandomFile /dev/urandom 1024 << これら一体何。コメント |#SSLRandomFilePerConnection /dev/urandom 1024 << にしても問題ないようだ。 | |ServerType standalone |Port 443 |DocumentRoot /usr/local/apache/htdocs | | | SSLRequireSSL | | |SSLEnable |SSLCacheServerPath /usr/local/apache/bin/gcache |SSLCacheServerPort logs/gcache_port |SSLCacheServerRunDir /tmp |SSLSessionCacheTimeout 15 | |#SSLCACertificatePath |#SSLCACertificateFile |SSLCertificateFile /usr/local/source/apache_1.3.9/SSLconf/conf/httpsd.pem |#SSLCertificateKeyFile | 注. SSLCACertificateFile は,CAのデジタルIDを |SSLVerifyClient 0 指定することになっている。しかし、クライアン |SSLVerifyDepth 10 ト認証しない場合は、使わない方がいいかも知れ | ない。ブラウザをNetscape 4.78 で指定したとこ |SSLFakeBasicAuth ろ、フォ−マットがおかしいとアクセスできなか |SSLRequireCipher かった。IE では特に問題なくアクセスできたが。 |SSLBanCipher NULL-MD5:NULL-SHA | |CustomLog logs/ssl_log "%t %{version}c %{cipher}c %{clientcert}c" |ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/" * それではテストしよう % cat /etc/hosts 192.168.1.1 indy1 web.nix.co.jj % httpsdctl start Reading key for server web.nix.co.jj:443 Enter PEM pass phrase:12345567 << パスフレ−ズを入れる。入力の表示 Launching... /usr/local/apache/bin/gcache はされない。 pid=18180 httpsdctl start: httpd started % netscape https://web.nix.co.jj/ << 暗号化WWWサ−バにアクセスする。 IPアドレスを入れてもできる。 [/usr/local/ssl]----[bin]--- c_rehash, openssl |-[misc]-- CA.pl, CA.sh, c_hash, c_info, | c_issuer, c_name, der_chop |-[private] 最初はカラ |-[certs] 最初はカラ |-[include]--[openssl]-- e_os.h .. |-[lib]-- libcrypto.a, libssl.a |- openssl.cnf % cd /usr/local/source/openssl-0.9.4;ls -F CHANGES Makefile.ssl demos/ libssl.a shlib/ CHANGES.SSLeay NEWS dep/ makevms.com* ssl/ Configure* README doc/ ms/ test/ INSTALL VMS/ e_os.h mt/ times/ INSTALL.VMS apps/ e_os2.h openssl.doxy tmp/ INSTALL.W32 bugs/ include/ out/ tools/ LICENSE certs/ install.com perl/ util/ Makefile@ config* libRSAglue.a rsaref/ Makefile.org crypto/ libcrypto.a sf/ % ls demos/apps CA.com CA.pl* CA.sh openssl.cnf demoCA/ ... * Apache のコマンド % cd /usr/local/apache/bin;ls ab dbmmanage htdigest httpsd logresolve apxs gcache htpasswd httpsdctl rotatelogs % httpsdctl usage: httpsdctl (start|stop|restart|fullstatus|status|graceful|configtest|help) start - start httpd stop - stop httpd restart - restart httpd if running by sending a SIGHUP or start if not running fullstatus - dump a full status screen; requires lynx and mod_status enabled status - dump a short status screen; requires lynx and mod_status enabled graceful - do a graceful restart by sending a SIGUSR1 or start if not running configtest - do a configuration syntax test help - this screen * openssl のコマンド % cd /usr/local/ssl/bin % openssl genrsa -rand rand.dat -des 1024 > key.pem % openssl genrsa -des 1024 > key.pem % openssl rsa -text -in key.pem << key.pem の情報を全部表示。 % openssl req -new -key key.pem -out csr.pem % openssl req -text -in csr.pem << -textは情報を全部表示する。 % openssl x509 -text -in verisign.pem % openssl x509 -in httpsd.pem -fingerprint -noout << Finger Print だけ表示する。 % openssl OpenSSL> rsa ? << 使えるオプションを表示する。 OpenSSL> rsa -text -in key.pem << 対話モ−ド。 (3) VeriSign のテスト用デジタルID `02/10 * これで試してみることができる 日本の VeriSign のサイトを見てみよう http://www.verisign.co.jp/。 昔とはうって変 わってだいぶ内容的に充実してきた。暗号化の勉強もできる。そしていつからか知らんが、 WWWサ−バのテスト用デジタルIDを発行するようになっている。これは有難い。14 日間有効な "テスト用セキュア・サ−バID"、40 bit DES 版である。このデジタルID は VeriSign の正規な署名はなされていない。つまり Netscape のブラウザなどに最初か ら入っているデジタルIDでは認証されない。そのため "テスト用ル−ト証明書" をブラ ウザに入れる必要がある。このファイルは VeriSign のサイトに置かれている。これはテ ストID取得の画面にそって順にやっていくと、ブラウザに入れる案内が出るので、それ に従えばいい。 その前に、先ずWWWサ−バの公開鍵と秘密鍵を作る。key.pem と言うファイルに両者が 入る。-rand rand.dat というのは、これらの鍵を作るための乱数である。rand.dat とい うのは名前など何でもよく、どんなファイルでも構わない。この自分のメモ書きでもいい。 次に CSR( Certificate Signing Request ) というファイルを作成する。CAに証明して もらうためのフォ−マットである。証明というのは正確でないかも、デジタル署名をして もらうためのフォ−マットといった方がいいか。 下記では csr.pem と言うファイルを作 っている。このファイルには、会社名やWWWサ−バの FQDN など、 それに key.pem の 中の公開鍵が入る。 この csr.pem ファイルを画面にそって VeriSign に送るわけである。 小生がやってみたところ、"テスト用セキュア・サ−バID" がすぐにメ−ルで来た。 % openssl genrsa -rand rand.dat -des 1024 > key.pem % openssl req -new -key key.pem -out csr.pem key.pem csr.pem ------------------------------------ ------------------------------------ |-----BEGIN RSA PRIVATE KEY----- |-----BEGIN CERTIFICATE REQUEST----- |Proc-Type: 4,ENCRYPTED | | |DEK-Info: DES-CBC,A0E3E986F3B6298D |-----END CERTIFICATE REQUEST----- | | | |-----END RSA PRIVATE KEY----- デジタルIDがメ−ル Subject: VeriSign Trial Server ID で来る ----------------------------------------------------------------------------- |Dear VeriSign Customer, | |Congratulations -- your Test Server ID (certificate), issued to |WEB.NIX.CO.JJ, is included at the end of this message. |VeriSign has digitally signed your Certificate, providing assurance that your |certificate has not been damaged or changed without detection. | |For instructions on how to install your Test Server ID and the Test CA root, |please visit: |http://digitalid.verisign.co.jp/trialserver/trialStep4.htm |http://digitalid.verisign.co.jp/trialserver/trialStep5.htm | |After testing your Trial Server ID, we encourage you to check out VeriSign's |full line of Secure Site Services at: |http://digitalid.verisign.co.jp/secureserver/index.html | |VeriSign Digital ID Services | |-----BEGIN CERTIFICATE----- \ この部分が VeriSign がテストで発行してくれた | | | 申請WWWサ−バ用のデジタルID。これだけ切 |-----END CERTIFICATE----- / り取って適当なファイル名にする。verisign.pem というファイルにここではしてみた。 % cd /usr/local/ssl/bin; ls -F c_rehash* httpsd.pem openssl* verisign.pem csr.pem key.pem rand.dat /usr/local/apache/conf/httpsd.conf 変更する箇所だけ示す --------------------------------------------------------------------------- |#SSLCertificateFile /usr/local/source/apache_1.3.9/SSLconf/conf/httpsd.pem | |SSLCertificateFile /usr/local/ssl/bin/verisign.pem << これら入れるディレクトリ |SSLCertificateKeyFile /usr/local/ssl/bin/key.pem << はどこでも構わない。 * VeriSign テスト用ル−ト証明書をとる http://digitalid.verisign.co.jp/trialserver/trialStep4.htm にアクセスして、"テス ト用ル−ト証明書" のとこをクリックすると、自動的にブラウザに入ってくる。いろいろ 聞いて来るが、名前を付けよと出たところで "TEST CA" とか入れると、 ブラウザに登録 される。名前を付けないと、その時だけのル−トデジタルIDとなる。 Windows 98 でど こに、このデジタルIDが入ったのか調べてみた。何とバイナリファイルに記録されてい た。下記のファイルをダンプすると、Netscape Communicator のセキュリティ情報で確認 できるル−ト証明書がずらずら出てきた。 C:\Program Files\Netscape\Users\katou\cert7.db * VeriSign 本番用デジタルIDを取得する 上記でテスト用を取得できたなら、それで技術的にはクリアしたことになる。後は手続き 的なことである。申請するWWWサ−バが本当に実在しているか、いろいろ書類を揃えて VeriSign に審査してもらうことになる。注意したいのは VeriSign がやるのは、 WWW サ−バが実在しているかどうかを証明するのであって、信用がおけるかどうかを証明する ものではないということ。書類は "印鑑登録証明書" と "商業登記簿謄本" などが必要で ある。この二つの書類は、帝国デ−タバンクの企業コ−ドと上場企業の証券コ−ドがあれ ば、出さなくてもいいと VeriSign のホ−ムペ−ジには書いてあった。料金は 40 bit 暗 号化対応のが約8万円/年、128 bit のが12万円/年だったか。 http://www.verisign.co.jp/ > グロ−バル・サ−バID対応プラット−ム/128 bit 用。 Apache ヘの対応:Apache_1.3.12+ssl_1.39, openssl-0.9.5a。 http://www.jp.thawte.com/ > '99/10 VeriSign に吸収されていた。初年度 $125, 次年度以降は $100。 (4) Apache WWWサ−バの完成形 `02/10 * PHP3、XML、PostgreSQL はどうなった "5-4. デ−タベ−スとの連携 (1) PostgreSQL を試してみる" からの続きということにな る。そこまでで PHP3、XML、PostgreSQL を Apache と連携できるようにした。それにSSL を加えての話になる。 apache_1.3.9 : Apache の本体。1.3.12 が最新。 apache_1.3.9+ssl_1.37 : Apache 用 SSL 対応パッチ。 openssl-0.9.4 : SSL の本体。0.9.6 が最新。 postgresql-6.5.3 : ユ−ザ katou でデ−タベ−ス作成。 php-3.0.12jp-beta4 : 最新は PHP4、処理が速くなっている。 XML パ−サの expat : PostgreSQL と Apache に入っている。 % cd /usr/local/source/apache_1.3.9 % ./configure --enbale-module=so << DSO タイプの apache を作る。これで PHP3の % make モジュ−ルは動的に読み込む。PostgreSQL は % make install 別プロセスだから関係なし。 % postmaster -S -i << ユ−ザ katou で実行すること。 隣のパソコンの Netscape Navigator から https://192.168.1.1:443/postg.php3 とアク セスして確認する。PHP3 のドキュメントなどが、PHP3 をインス−ルすると docs ディレ クトリに入って来る。前のディレクトリ apache は名前をかえて、 本章で新規に apache を作り直したので、PHP3 のドキュメントなどはない。 必要なら前の apache のディレク トリを見て、手作業で入れること。 PHP3 のモジュ−ル libphp3.so はコピ−しておくこ と。 それに cgi-bin に作ったテスト用のプログラムなども必要ならコピ−してくること。 /usr/local/apache/htdocs/postg.php3 ----------------------------------------------------------- | | * Apache の制御ファイル /usr/local/apache/conf/httpsd.conf ------------------------------------------------------------ |ServerType standalone << SSL 対応は必ず standalone にすること。 |ServerRoot "/usr/local/apache" |PidFile /usr/local/apache/logs/httpd.pid |ScoreBoardFile /usr/local/apache/logs/httpd.scoreboard |Timeout 300 |KeepAlive On |MaxKeepAliveRequests 100 |KeepAliveTimeout 15 |MinSpareServers 5 |MaxSpareServers 10 |StartServers 5 << 稼働すると httpsd デ−モンが5個できる。 |MaxClients 150 |MaxRequestsPerChild 0 | |LoadFile /usr/local/pgsql/lib/libpq.so << PostgreSQL モジュ−ル。 |LoadModule php3_module libexec/libphp3.so << PHP3 モジュ−ル。 | |Port 443 << SSL 対応のポ−ト番号は 443。暗号化WWW |User www サ−バのみ稼働する。 |Group user |ServerAdmin katou@nix.co.jj |ServerName web.nix.co.jj << ここコメントでも稼働はするぞ。 |DocumentRoot "/usr/local/apache/htdocs" | | << ここテストの時はコメントにした方がいいか | Options FollowSymLinks も。ディレクトリをリスティングするかどう | AllowOverride None かということで。 | |DirectoryIndex index.html << テストの時はコメント外した方がいいかも。 | | | Options Indexes FollowSymLinks | AllowOverride None | Order allow,deny | Allow from all | |AccessFileName .htaccess | | Order allow,deny | Deny from all | |UseCanonicalName On |TypesConfig /usr/local/apache/conf/mime.types |DefaultType text/plain << ファイルの拡張子から種類を確定できないの | は、ただのテキストとみなす。 |HostnameLookups Off |ErrorLog /usr/local/apache/logs/error_log |LogLevel warn << debug というのもある。コメントでもいい。 |LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined |LogFormat "%h %l %u %t \"%r\" %>s %b" common |LogFormat "%{Referer}i -> %U" referer |LogFormat "%{User-agent}i" agent |#CustomLog /usr/local/apache/logs/access_log common |ServerSignature On |Alias /icons/ "/usr/local/apache/icons/" | | Options Indexes MultiViews | AllowOverride None | Order allow,deny | Allow from all | |ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/" | | AllowOverride None | Options None | Order allow,deny | Allow from all | |IndexOptions FancyIndexing | | << 途中略。 | |AddType application/x-httpd-php3 .php3 << PHP3 の拡張子の宣言。 |AddType application/x-httpd-php3-source .phps << PHP3 の拡張子の宣言。 | |AddType application/x-tar .tgz |#AddHandler cgi-script .cgi << cgi-bin ディレクトリ以外でも | 拡張子が .cgi なら実行する。 |BrowserMatch "Mozilla/2" nokeepalive | | << 途中略。 | | << これより SSL の設定。 | SSLRequireSSL << ここコメントでも SSLEnable が | 記述されていれば暗号化になる。 | |TransferLog logs/transfer_log |SSLEnable << SSLDisable にすると暗号化しな |SSLCacheServerPath /usr/local/apache/bin/gcache くなる。 |SSLCacheServerPort logs/gcache_port |SSLCacheServerRunDir /tmp |SSLSessionCacheTimeout 15 VeriSign が署名したWWWサ−バのデジタルID | ↓ |SSLCertificateFile /usr/local/ssl/bin/verisign.pem |SSLCertificateKeyFile /usr/local/ssl/bin/key.pem ← このWWWサ−バの秘密鍵 |SSLVerifyClient 0 ← WWWクライアントのデジタルIDはチェックしない。 |SSLVerifyDepth 10 | |SSLFakeBasicAuth |SSLRequireCipher |SSLBanCipher NULL-MD5:NULL-SHA |CustomLog logs/ssl_log "%t %{version}c %{cipher}c %{clientcert}c" (5) OpenSSL の demoCA による自前CA `02/10 * OpenSSL の demoCA CA.sh シェルスクリプトを見ると、96年の履歴までで、それ以後の履歴はない。どうも 以前 SSLeay を試した時と内容は変わってないみたいである。OpenSSL を展開したままの demoCA ディレクトリには、デモ用のCAデジタルIDとCA秘密鍵がある。 以下はこれ をそのまま使ってWWW用のデジタルIDを作成した。新規にCAも作成したいのなら他 のディレクトリで CA.sh を実行する。 そこに demoCA というディレクトリができるので cacert.pem、cakey.pem などを作成していく。CA.sh は /usr/local/ssl/openssl.cnf と いう制御ファイルを参照してデジタルID等を吐き出す。作成されたデジタルIDの有効 期間は1年とかなっているが、 これは openssl.cnf ファイルに default_days = 365 と 書かれているからである。何だったら自分用に書き換えてもよい。 [/usr/local/source/openssl-0.9.4/apps] | [demoCA]--- cacert.pem << デモ用のCAのデジタルID。 |- [private]-- cakey.pem << デモ用のCAの秘密鍵。 |- [crl] << 認証サイト失効リスト。 |- [newcerts] |- [certs] |- serial << 発行デジタルIDの管理番号ファイル。 |- index.txt << 発行デジタルIDのデ−タベ−ス。 cacert.pem << % opnessl x509 -text -in cacert.pem で中身を見れる。 --------------------------------------------------------------------- |subject=/C=AU/SOP=QLD/O=Mincom Pty. Ltd./OU=CS/CN=SSLeay demo server |issuer= /C=AU/SOP=QLD/O=Mincom Pty. Ltd./OU=CS/CN=CA |-----BEGIN X509 CERTIFICATE----- | |MIIBgjCCASwCAQQwDQYJKoZIhvcNAQEEBQAwODELMAkGA1UEBhMCQVUxDDAKBgNV |BAgTA1FMRDEbMBkGA1UEAxMSU1NMZWF5L3JzYSB0ZXN0IENBMB4XDTk1MTAwOTIz |MzIwNVoXDTk4MDcwNTIzMzIwNVowYDELMAkGA1UEBhMCQVUxDDAKBgNVBAgTA1FM |RDEZMBcGA1UEChMQTWluY29tIFB0eS4gTHRkLjELMAkGA1UECxMCQ1MxGzAZBgNV |BAMTElNTTGVheSBkZW1vIHNlcnZlcjBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC3 |LCXcScWua0PFLkHBLm2VejqpA1F4RQ8q0VjRiPafjx/Z/aWH3ipdMVvuJGa/wFXb |/nDFLDlfWp+oCPwhBtVPAgMBAAEwDQYJKoZIhvcNAQEEBQADQQArNFsihWIjBzb0 |DCsU0BvL2bvSwJrPEqFlkDq3F4M6EGutL9axEcANWgbbEdAvNJD1dmEmoWny27Pn |IMs6ZOZB |-----END X509 CERTIFICATE----- % cd /usr/local/source/openssl-0.9.4/apps % CA.sh -newreq << newreq.pem ができる。申請用リクエストのファイル。 Using configuration from /usr/local/ssl/openssl.cnf | Enter PEM pass phrase: 1234567 << 秘密鍵用のパスフレ−ズを入れる。 | Country Name (2 letter code) [AU]:JP State or Province Name (full name) [Some-State]:Aichi Locality Name (eg, city) []:Nagoya Organization Name (eg, company) [Internet Widgits Pty Ltd]:NIX LTD Organizational Unit Name (eg, section) []:CAD Common Name (eg, YOUR name) []:web.nix.co.jj Email Address []:katou@nix.co.jj | % CA.sh -sign << newcert.pem ができる。申請WWWのデジタルID。 Using configuration from /usr/local/ssl/openssl.cnf | ※ newreq.pem には申請WWWの秘密鍵も入っていることに注意。% CA.sh -newreq の最 後で "Request (and private key) is in newreq.pem" と出て来る。 % cd demoCA デモ用のCAのデジタルIDを DER 形式にする。 % openssl x509 -in cacert.pem -outform der -out ccc.der % ls -F demoCA cacert.pem certs/ index.txt newcerts/ serial ccc.der crl/ index.txt.old private/ serial.old * WWWサ−バにCAのデジタルIDを用意する % cp ccc.der /usr/local/apache/htdocs /usr/local/apache/htdocs/index.html 毎度おなじみの Apache のウェルカムペ−ジ --------------------------------- に用意してみた。ここブラウザからクリック | すると、いろいろ聞いてきて Netscape なら | | [セキュリティ情報]-->[署名者] の所にこの |
ファイルが入っていく。 [署名者] の欄には |TEST CA デフォルトで VeriSign など幾つかのル−ト |
CAのデジタルIDが入っている。 ccc.der | | も、その仲間入りをしたわけだ。 /usr/local/apache/conf/mime.types これ追加しておくこと。やらないとブラウザ --------------------------------- から ccc.der をクリックした際、 デジタル |application/x-x509-ca-cert der IDと認識せず、ファイルをただダウンロ− | | ドする画面が出てしまう。 * WWWブラウザの暗号化情報 Netscape Communicator 4.5 で確認したことだが、画面左下の鍵マ−クをクリックすると [セキュリティ情報] が出て来る。上の ccc.der を読み込まずに、直接このWWWサ−バ にアクセスすると、いろいろ聞いてきて、 下記の [Webサイト] にデジタルIDが入るこ とになる。ここクリックすると "受け付けたWebサイトの証明書" の画面が出て、 デジタ ルID web.nix.co.jj というのが見えるはずである。一方 ccc.der をクリックして、や っていくと [署名者] の方にデジタルIDが入っていく。 ------------------------------ | Netscape |----------------------------- | セキュリティ情報 | パスワ−ド ※[本人][他人][Webサイト] 最初は空で何も入っていない。 | Navigator | Messenger | 証明書 | 本人 << 自分用のデジタルID。最初は何も入っていない。 | 他人 << 他の人のデジタルID。メ−ルの S/MIME で使う。 | Webサイト << WWWサ−バのデジタルID。 | 署名者 << VeriSign など幾つかのル−トCAデジタルIDがある。 | 暗号化モジュ−ル | * FQDN とIPアドレスでのアクセスの違い Netscape Communicator 4.75 や 4.78 で確認。[本人][Webサイト][署名者]には何もなし。 これで Apache の暗号化サ−バにアクセスする。サ−バのホスト名は INDY である。 a) https://indy/ とやる。"新しいサイト証明書" という画面が次々と5つ出てくる。そ こで "●証明書を受け付ける(有効期限まで)" を選択。[Webサイト]にはWWWサ−バ のデジタルIDが入った。[署名者] には何も入らなかった。この後 https://indy/と やっても、何も画面は出て来なかった。 b) https://192.9.10.2/ とやる。"新しいサイト証明書" という画面が次々と5つ出てく る。最後に次の画面が加えて出てきた。この画面だけは、この後も毎回出てくる。 ----------------------------------------------------------------- | 証明書の確認 | | サイト '192.9.10.2' から提出された証明書には、正しいサイト名が | 含まれていません。第三者がこのサイトとの通信を傍受しようとして | いる可能性がわずかですがあります。もしも、下に表示される証明書 | が接続先のものでないという疑いがある場合は、接続をキャンセルし | て、サイト管理者に連絡して下さい。 | | 以下が、提出された証明書です: |---------------------------------------------------------------- | 証明書: NIX | 署名者: NIX | 暗号化: Highest グレ−ド(RC4,128ビット秘密鍵) [詳細] |---------------------------------------------------------------- | [キャンセル] [続ける] ----------------------------------------------------------------- ※ Netscape のブラウザでは、暗号化WWWアクセスに当たり、NetscapeにはWWWのデ ジタルIDを署名したCAのデジタルIDが本来入っている必要があるのだが、 なく ても暫定的に受け付けるという動きをするようである。