*Apache2.x(ssl+PHP) [#ua42169a]
RIGHT:更新日&lastmod();  

Apache2.xを[[ここ:http://www.apache.jp/misc/download.html]] opensslを[[ここ:http://ring.tains.tohoku.ac.jp/archives/net/openssl/source/]]から、~
PHPを[[ここ:http://www.php.net/]]または[[Ring:http://www.ring.gr.jp/pub/net/www/php/distributions/]]からDownloadしてくる。~
Apache2.xからはmod_sslは実装されているので必要ない。
PDFlibを[[ここ:http://www.pdflib.com/jp/]]からDownloadしてくる。

**opensslのinstall [#r752c198]
 $ tar zxvf openssl-0.9.7d.tar.gz
 $ cd openssl-0.9.7d
 $ ./config
 $ make
 $ make test
 $ su
 # make install

**apache2.xのinstall [#e01f395e]

 $ tar zxvf httpd-2.0.50.tar.gz

***IE6のバグ [#w4ab6af3]
ページアクセス時にxxx.php?data=abcのような変数渡しをするとdigest
認証でエラーする。(IE6のバグ?)

[[apache1.3.xと同じ。:https://wwwism.dyndns.org/hp/linux/apache.htm]] 

そこでhttpd-2.0.50/modules/aaa/mod_auth_digest.c
 1680行くらいを修正
                    && d_uri.path[0] == '*' && d_uri.path[1] == '\0'))
 #ifdef  NOT_FOR_ME  <---追加
            /* check that query matches */
            || (d_uri.query != r_uri.query
                && (!d_uri.query || !r_uri.query
                    || strcmp(d_uri.query, r_uri.query)))
 #endif  <---追加
            ) {
	(略)
              }

***ここから本来のインストール [#q157ac4f]

 $ cd ../httpd-2.0.50
 $ CFLAGS="-O2" ./configure \
   --prefix=/usr/local/apache2050 --enable-module=so \
   --enable-shared=ssl --enable-ssl [--with-ssl=/usr/local/ssl] \
   --enable-auth_digest --enable-rewrite
  (--enable-auth_digest: Digest認証)
   --with-included-apr
  (--with-included-apr 2.2.4では無いと以下のエラーが出る)

[[sslについては>#ssl]]/usr/local/sslは不要

&color(red){''Apache2.2.4でのconfigエラーにつて''};

config時のエラー

 Configuring Apache Portable Runtime Utility library...
 
 checking for APR-util... yes
 configure: error: Cannot use an external APR-util with the bundled APR


apr と apr-util のバージョン 1.0 や 1.1 がシステムの一部として既にインストールされている場合、 apr/apr-util を 1.2 にアップグレードするか、 httpd を隔離した環境でビルドする必要がある。または --with-included-aprでにげる。

 Apache Portable Runtime(APR)
 
 Apach の過般なライブラリで,Apach のサーバコードの OS 依存の部分を 
 OS 非依存の部分から分割するために作られた

''apr と apr-utilのインストール''

apr
 $ cd srclib/apr
 $ ./configure --prefix=/usr/local/apr-httpd/
 $ make
 $ su
 # make install

apr-util
 $ cd ../apr-util
 $ ./configure --prefix=/usr/local/apr-util-httpd/ --with-apr=/usr/local/apr-httpd/
 $ make
 $ su
 # make install

httpd のconfigで--with-apr=/usr/local/apr-httpd/ --with-apr-util=/usr/local/apr-util-httpd/を追加 


''httpdのインストールの続き''
 $ make 
 $ su
 # make install
 # cd /usr/local
 # ln -s apache2050 apache2

/usr/local/apache2/conf/httpd.confを修正

 ##User nobody
 ##Group #-1
 User www
 Group www

[&color(red){apache2.2.x};は言語の順番、ユーザディレクトの設定が別のファイルになった。
 # Language settings
 #Include conf/extra/httpd-languages.conf
 Include conf/extra/httpd-languages.conf
 とし、

 extra/httpd-languages.confファイルで以下のようにする]

 ##LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW
 LanguagePriority ja en ca cs da de el eo es et fr he hr it ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW

 # User home directories
 #Include conf/extra/httpd-userdir.conf
 Include conf/extra/httpd-userdir.conf

 ------------------------------------------------ ]

 ##AddDefaultCharset ISO-8859-1
 AddDefaultCharset off

 #AddHandler cgi-script .cgi
 AddHandler cgi-script .cgi .pl

 ##ServerAdmin you@example.com
 ServerAdmin okada@YYY.ac.jp

 #ServerName www.example.com:80
 ServerName uso5002.YYY.ac.jp

 <Directory />
 ##    Options FollowSymLinks
 ##    AllowOverride None
    Options All MultiViews -Indexes <-- -Indexesはindex.html等がないときディレクトリを表示させない(個人ディレクトリの下)
     AllowOverride All
 </Directory>

''この<Directory />ディレクティブの意味''

 AccessFileName .acl 

という設定があると、以下のようにして無効にされていない限り、 ドキュメント /usr/local/web/index.html を返す前に、サーバは /.acl, /usr/.acl, /usr/local/.acl, /usr/local/web/.acl から ディレクティブを読み込みます。

 <Directory />
 AllowOverride None
 </Directory> 

Directoryディレクティブでのパス指定は絶対パスでの指定になります。つまり / は、ルートディレクトリを意味します。Directoryディレクティブ内に記述した設定は、該当ディレクトリ内のすべてのサブディレクトリにも適用されます。


 ##    Options Indexes FollowSymLinks
     Options All MultiViews -Indexes <-- -Indexesはindex.html等がないときディレクトリを表示させない(documentsrootの下)

 ##    AllowOverride None
     AllowOverride All

 ##DirectoryIndex index.html index.html.var
 DirectoryIndex index.html index.htm index.php index.cgi index.pl index.shtml

[&color(red){apache2.2.x};についてDirectoryIndexを追加する

 # DirectoryIndex: sets the file that Apache will serve if a directory
 # is requested.
 #
&color(red){以下を追加 DirectoryIndex index.html index.htm index.php index.cgi index.pl index.shtml};

 <IfModule dir_module>
     DirectoryIndex index.html
 </IfModule>

 -----------------------------------------------------------------]


233行目くらいの~
LoadModule auth_digest_module modules/mod_auth_digest.so~
があればをコメントアウトする。~

--------------httpd.confここまで---------------------------

&color(red){apache2.2.x};については~
statusを表示するには~
httpd.confの

 # Real-time info on requests and configuration
 ##Include conf/extra/httpd-info.conf
 Include conf/extra/httpd-info.conf

を修正し

extra/httpd-info.conf


    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from 10          <---アクセス許可IPを追加
    Allow from 192.244.75  <---アクセス許可IPを追加


server-infoについてはmod_info.cが必要なため、コメントアウトする

 ##
 ##    SetHandler server-info
 ##    Order deny,allow
 ##    Deny from all
 ##    Allow from 10
 ##    Allow from 192.244.75
 ##

https://www.abc-u.ac.jp/server-statusでアクセス


モジュールの組み込みの確認

 % usr/local/apache2050/bin/httpd -l
 Compiled in modules:
   core.c
   mod_access.c
   mod_auth.c
   mod_auth_digest.c  <---ここで確認
   mod_include.c
   mod_log_config.c
   mod_env.c
 (以下略)

***モジュールについて [#x8ecbc59]

モジュールについては2種類あり静的モジュールは上記なように、httpd -lで確認できる~
もうひとつのモジュールはDSO(Dynamic Shared Object)は必要に応じて組み込むためプログラムの軽量化が出来る。これは

 ./configure --enable-proxy=shared

のように=sharedをつける。確認は

 ./httpd -M
 Loaded Modules:
 (略)
 so_module (static)
 php5_module (shared) <--ここを確認

**mod_rewriteについて [#m0f84769]
URLのリダイレクト等に使用できるモジュールでコンパイル時に--enable-rewriteでconfigureする

httpd.confで以下のようにすると存在しないファイルは[[missing-2.php>Web Memo/PHPメモ#JUMP]]で処理を行う

 RewriteEngine On
 ##RewriteBase
 
 RewriteCond /usr/local/apache223/htdocs%{REQUEST_FILENAME} !-f <--条件不成立で次の行へ、成立でRewriteRuleへ     (1)
 RewriteCond /usr/local/apache223/htdocs%{REQUEST_FILENAME} !-d <--条件成立でRewriteRuleへ、不成立でRewriteRuleを行わない    (2)
 ##RewriteRule (.*) http://www.abc.ac.jp%{REQUEST_FILENAME} [R,L] <--全てのファイルはhttp://www.abc.ac.jpの同じURLにリダイレクト R:リダイレクト L:ここでルールの終了   (3)
 RewriteRule (.*) /missing-2.php (4)
 RewriteLogLevel 9   <--数値が大きいほど情報が多くなる。9だとほとんどの情報が出力される
 RewriteLog "logs/rewrite_log"

(1)は指定ファイルが存在しない場合の成立、(2)は指定ディレクトリが存在しない場合に成立

(1)(2)(3)を指定して(4)は指定しなときは存在しないファイル、ディレクトリは(3)で指定したURLへ。

また、(4)だけ指定は全て(4)のPHPに行くので、PHP内部で処理

(1)(2)(4)指定して(3)は指定しなときは存在しないファイル、ディレクトリは(4)で指定したPHPへ。そこで処理。

**Digest認証の利用の仕方 [#v3b919de]

パスワードの作成
 $ /usr/local/apache2/bin/htdigest -c /home/okada/hogehoge/htdtpsswd ism abc
                                                                     ^^^(1)
 Adding password for center in realm ism.
 New password:
 Re-type new password:

出来たファイルの確認
 ls -l
 合計 12
 -rwxr-xr-x    1 okada    okada          46 Apr  5 10:50 htdtpsswd*

新しいユーザの追加・変更
 % /usr/local/apache2/bin/htdigest /export/home/okada/himitsu/htdtpsswd ism  je2ism
 Adding user je2ism in realm ism
 (Changing password for user je2ism in realm ism)
 New password:
 Re-type new password:
 
&color(red){Vine4.xからhtdigestからhtdigest2になっているようだ};

.htaccess

 <Limit HEAD GET POST>
 
  AuthDigestFile /home/okada/hogehoge/htdtpsswd <---Apache2.2.x以前
&color(red){Apache2.2.x以降はAuthDigestFileはなくなり、AuthUserFile(Basic認証と同じ)になった。};
  AuthUserFile /home/okada/hogehoge/htdtpsswd <---Apache2.2.x以降
  AuthName ism  <---(1)と合わせる
  AuthType Digest
  Require valid-user  <---ユーザ認証の場合はここまでOK
  Satisfy any   <---この行があると以下のIPでは認証が不要。それ以外はパスワードが 必要
  order deny,allow
  allow from 192.168.1.0/24  <---IPアクセス制限
  deny from all
 
 </Limit>

''指定以外の指定(GET 以外は許可ユーザ[パスワード])''

    <LimitExcept GET>
        require valid-user
 
    </LimitExcept>


''Digest認証:''
 HTTP/1.1対応のブラウザでのみ利用可能
 認証情報はMD5で暗号化され、チャレンジ・レスポンス型で認証されるので、
 セッション開設ごとに値が変わるので暗号解読が困難となり、パケット盗聴
 されても解読はかなり困難である。

''.htaccess''

 <Limit HEAD GET POST>
        AuthUserFile /home/okada/himitsu/htdtpsswd2
        AuthName center
        AuthType Digest
        Require valid-user
 </Limit>


''Basic認証:''
 認証情報には一般的にはプレインテキストを MIME エンコードしたものが使用
 されるので、パケットを盗聴されると簡単にデコードできてしまうという欠点
 がある。但し、MD5での暗号化も可能。

''.htaccess''

 AuthName "Himitsu No Basho"
 AuthType Basic
 AuthUserFile /home/okada/himitsu/htpasswd2
 <LIMIT GET POST>
     require valid-user
 </LIMIT>


**Virtua lHost(名前ベース)の設定 [#b89e1516]

''Apache2.2.xでは''
httpd-vhosts.confの中に以下を追加する

 <Directory "/usr/local/apache223/htdocs">
 (略)
 </Directory>

 [以下を追加]
 <Directory "/usr/local/apache2052/v-host1">
     AllowOverride All
     AllowOverride All
 
     Order allow,deny
     Allow from all
 
 </Directory>

あとは2.0.xと同じようにextra/httpd-vhosts.conf追加し
 #Include conf/extra/httpd-vhosts.conf
のコメントをはずす。

''Apache2.0.xでは''~
ひとつの物理ホストを異なるホスト名でアクセスするときに利用する。~
ただし、~okadaのように個人ディレクトリはどのホスト名でも同じになる~

例えば、v-host0.YYY.ac.jp、v-host1.YYY.ac.jpという名前で異なるディレクトリにアクセスさせるには 

httpd.confにの最後に
 <VirtualHost *:80>
      DocumentRoot /usr/local/apache2052/v-host0
      ServerName   v-host0.YYY.ac.jp
 </VirtualHost>
 
 <VirtualHost *:80>
      DocumentRoot /usr/local/apache2052/v-host1
      ServerName   v-host1.YYY.ac.jp
 </VirtualHost>

と記入すればよい。

このとき本来のDocumentRootや、ServerNameは無視され、Virtual Hostのはじめの
エントリーが表示される。

またailiasでディレクトリ指定するときは、以下のように<VirtualHost *:80>の中に指定する。このとき、ディレクティブアクセス内容はhttpd.confに指定してあればいいようだ

 <VirtualHost *:80>
     DocumentRoot /var/www/html
     ServerName manabi.abc.ac.jp
     ErrorLog /var/log/apache2/error_log
     CustomLog /var/log/apache2/access_log common
     Alias       /moodle/  "/var/www/moodle/"   <==ここ
 
 </VirtualHost>

しかし、このときServerNameがmanabi.abc.ac.jpなため、IPアドレスや,HOST名だけで
アクセスされた場合はデフォルトで一番初めに指定した<VirtualHost *:80>にアクセスされるため、この表記が一番初めの場合はmanabi.abc.ac.jp以外でも指定バーチャルホスト指定外では表示されてしまうようだ。


例えば本来の
 DocumentRoot /usr/local/apache2052/htdocs
 ServerName    www.YYY.ac.jp
の記述があった場合

http://www.YYY.ac.jp/

にアクセスすると

/usr/local/apache2052/v-host0/

が表示される。

当然http://v-host0.YYY.ac.jpにアクセスしても

/usr/local/apache2052/v-host0/

が表示される。

また名前ベースのVirtual Hostではsslは本来の1つしか使用できない

つまり、

https://www.YYY.ac.jp/もhttps://v-host0.YYY.ac.jpもhttps://v-host1.YYY.ac.jp同じページが表示される。

**Virtua lHost(IPベース)の設定 [#cbc3b30d]
sslではipベースでないと振り分けられないので以下ようにextra/httpd-ssl.confの設定(&color(red){Apache2.2.x};)を追加する必要がある。~
これはヘッダー部まで暗号化されるのでホスト名がわからないようである。~
あわせてIPアドレスをインターフェイスにつける必要がある。

<VirtualHost _default_:443>から</VirtualHost>の間をコピーし2つ作成し

 ##<VirtualHost _default_:443>
 <VirtualHost 192.168.1.30:443>
 
 #   General setup for the virtual host
 DocumentRoot "/usr/local/apache223/htdocs"
 ##DocumentRoot "/usr/local/food"
 ##ServerName www.example.com:443
 ##ServerAdmin you@example.com
 ServerName enfant.abc-u.ac.jp:443
 ServerAdmin okada@abc-u.ac.jp
 ErrorLog /usr/local/apache223/logs/error_log-enfant
 TransferLog /usr/local/apache223/logs/access_log-enfant
 
 (略)
 </VirtualHost>
 
 <VirtualHost 192.168.1.31:443>
 
 #   General setup for the virtual host
 DocumentRoot "/usr/local/food"
 ##ServerName www.example.com:443
 ##ServerAdmin you@example.com
 ServerName food.abc-u.ac.jp:443
 ServerAdmin okada@abc-u.ac.jp
 ErrorLog /usr/local/apache223/logs/error_log-enfant
 TransferLog /usr/local/apache223/logs/access_log-enfant
 
 (略)
 </VirtualHost>


***余談 [#pbc08bb2]
WindowsXPのhostsファイルは

c:\windows\system32\drivers\etc\hosts

である。

**&aname(ssl){sslの設定}; [#cffad671]
Apache2からは configure時 --enable-sslオプションだけでopenssl,openssl-develがインストールされていれば利用できる。


キーは以下のように利用する。
 cd /usr/local/apache2/conf
 ln -s /etc/httpd/conf/ssl.crt .
 ln -s /etc/httpd/conf/ssl.key .

''Vine4.xでは''

 ln -s /etc/apache2/conf/ssl.crt .  (証明書 公開キー)
 ln -s /etc/apache2/conf/ssl.key .  (秘密キー)


自分で証明書を作成するには以下のようにする。

&color(red){''Vien4.xで作成方法は[[ここ>Linux Memo/Openssl]]にある。(Opensslはrpmインストール)''};

***openssl0.9.7.eでのトラブル [#r9018f46]
認証局を作成するために

# /usr/local/ssl/misc/CA.pl -newcaを実行すると

unknown option -next_serial

というエラー出る。

x509のオプションとしてこのバージョンでは-next_serialはないようだ。

そこで、/usr/local/ssl/misc/CA.plの107行目あたりを

 #               system ("$X509 -in ${CATOP}/$CACERT -noout "   <--コメントアウ ト
 #                       . "-next_serial -out ${CATOP}/serial");   <--コメントアウト

以下を追加する
                open OUT, ">${CATOP}/serial";
                print OUT "01\n";
                close OUT;
その結果
demoCA/serialというファイルが出来る。内容は
 01
という3バイトのファイル。

また、公開キーの作成時/usr/local/ssl/misc/CA.pl -signで

 Using configuration from /usr/share/ssl/openssl.cnf
 1215:error:0E06D06C:configuration file routines:NCONF_get_string:no
value:conf_lib.c:329:group=CA_default name=unique_subject
のようなエラーが出るが無視してもkeyは作成できた。

 # cd /root
 # mkdir sslfiles
 # cd sslfiles

***CA証明書の作成 [#f2bcbfd0]
(認証局[自分ところ]の作成)
 # /usr/local/ssl/misc/CA.pl -newca
 CA certificate filename (or enter to create) <---Enterのみ入力
 
 Making CA certificate ...
 Using configuration from /usr/share/ssl/openssl.cnf
 Generating a 1024 bit RSA private key
 ....++++++
 ......++++++
 writing new private key to './demoCA/private/cakey.pem'
 Enter PEM pass phrase:  <---パスワード入力(1)
 Verifying password - Enter PEM pass phrase: <---同じパスワード入力
 -----
 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) [AU]:JP
 State or Province Name (full name) [Some-State]:XXX Pref
 Locality Name (eg, city) []:ZZZ
 Organization Name (eg, company) [Internet Widgits Pty Ltd]:YYY University
 Organizational Unit Name (eg, section) []:
 Common Name (eg, your name or your server's hostname) []:uso5002.zzz.ac.jp
 Email Address []:okada@YYY.ac.jp


***サーバーキーの作成 [#m3d10b9d]
(秘密キーの作成)
 #  /usr/local/ssl/misc/CA.pl -newreq
 Using configuration from /usr/share/ssl/openssl.cnf
 Generating a 1024 bit RSA private key
 ...++++++
 ......++++++
 writing new private key to 'newreq.pem'
 Enter PEM pass phrase:<---パスワード入力(2)
 Verifying password - Enter PEM pass phrase:<---同じパスワード入力
 -----
 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) [AU]:JP
 State or Province Name (full name) [Some-State]:XXX Pref
 Locality Name (eg, city) []:ZZZ
 Organization Name (eg, company) [Internet Widgits Pty Ltd]:YYY University
 Organizational Unit Name (eg, section) []:ZZZ University
 Common Name (eg, your name or your server's hostname) []:uso5002.zzz.ac.jp
 Email Address []:okada@YYY.ac.jp 
 
 Please enter the following 'extra' attributes
 to be sent with your certificate request
 A challenge password []:  <---Enterのみ入力
 An optional company name []:  <---Enterのみ入力
 Request (and private key) is in newreq.pem


***サイト証明書の発行 [#lb6f1d09]
(公開キーの作成)
 #  /usr/local/ssl/misc/CA.pl -sign
 Using configuration from /usr/share/ssl/openssl.cnf
 Enter PEM pass phrase: <---CA証明書のときのパスワード(1)と同じパスワードを入力
 Check that the request matches the signature
 Signature ok
 The Subjects Distinguished Name is as follows
 countryName           :PRINTABLE:'JP'
 stateOrProvinceName   :PRINTABLE:'XXX Pref'
 localityName          :PRINTABLE:'ZZZ'
 organizationName      :PRINTABLE:'ZZZ University'
 organizationalUnitName:PRINTABLE:'ZZZ University'
 commonName            :PRINTABLE:'uso5002.YYY.ac.jp'
 emailAddress          :IA5STRING:'okada@YYY.ac.jp'
 Certificate is to be certified until Feb 11 07:57:55 2005 GMT (365 days)
 Sign the certificate? [y/n]:y
 
 
 1 out of 1 certificate requests certified, commit? [y/n]y
 Write out database with 1 new entries
 Data Base Updated
 Signed certificate is in newcert.pem


***認証局の確認 [#bde54565]
 # cd /root/sslfiles

自分で証明書を発行してときはself signed certificateになる
 # /usr/local/ssl/bin/openssl verify ./demoCA/cacert.pem
 ./demoCA/cacert.pem: /C=JP/ST=Mie Pref/L=Matsusaka/O=Matsusaka   Univ/CN=vvine30.abc-u.ac.jp/emailAddress=okada@abc-u.ac.jp
 error 18 at 0 depth lookup:self signed certificate
 OK

OKが出ないときは以下のコマンドを実行し、issuerとsubjectが同じことを確認する。
 # /usr/local/ssl/bin/openssl x509 -noout -issuer -subject - in ./demoCA/cacert.pem
 issuer= /C=JP/ST=Mie Pref/L=Matsusaka/O=Matsusaka Univ/CN=vvine30.abc-u.ac.jp/emailAddress=okada@matsusaka-u.ac.jp
 subject= /C=JP/ST=Mie Pref/L=Matsusaka/O=Matsusaka Univ/CN=vvine30.abc- u.ac.jp/emailAddress=okada@abc-u.ac.jp

確認が出来ないときはCAの作成がうまくできていない。

***証明書(秘密キー)の確認 [#gd81d244]

 # /usr/local/ssl/bin/openssl verify -CAfile ./demoCA/cacert.pem newcert.pem
newcert.pem: OK

認証局証明書が見つからないと以下のようなエラーが出る
 error 20 at 0 depth lookup:unable to get local issuer certificate

***証明書(秘密キー)の表示 [#u919b071]

 # /usr/local/ssl/bin/openssl  x509 -in newcert.pem -text
 Certificate:
     Data:
         Version: 3 (0x2)
         Serial Number: 1 (0x1)
         Signature Algorithm: md5WithRSAEncryption
         Issuer: C=JP, ST=Mie Pref, L=abc, O=abc Univ,  CN=vvine30.abc.ac.jp/emailAddress=okada@abc-u.ac.jp
         Validity
             Not Before: Nov 24 04:30:48 2004 GMT 
             Not After : Nov 24 04:30:48 2005 GMT
         Subject: C=JP, ST=Mie Pref, L=abc, O=abc Univ, OU=abc Univ, CN=vvine30.matsusaka-u.ac.jp/emailAddress=okada@abc-u.ac.jp
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
             RSA Public Key: (1024 bit)
                 Modulus (1024 bit):
 (略)
 MSYwJAYJKoZIhvcNAQkBFhdva2FkYUBtYXRzdXNha2EtdS5hYy5qcIIBADANBgkq
 hkiG9w0BAQQFAAOBgQBsuaErU5zV1YIbokV5qPJxhYbKHbdb7F4LwqdhJEckNnlv
 nfHpYp7wtjbG+bESjiQ0IWoU17bSb3FW3xGGx1vvr0U/X2HDySQwTw4IrOMHJaIl
 Q+QyUMnS1vL4YI00RxGOXTd9dAnLUSyzxowHorn9/i42Ul1kij4xNMzv/fPSrA==
 -----END CERTIFICATE-----



***パスフレーズの解除 [#q61532f7]
パスフレーズの解除を行うと、起動時にパスフレーズを聞かれなくなる。

 # openssl rsa -in newreq.pem -out site.key
 read RSA key
 Enter PEM pass phrase:<---CA証明書のときのパスワード(1)と同じパスワードを入力
 writing RSA key

 #  chmod 400 site.key

注)パスワードの入力を求められる状態に戻したときは 
 # openssl rsa -des3 -in site.key -out site.key


***作成したファイルを配置 [#fff09da1]
 # mkdir /usr/local/apache2/conf/ssl.crt
 # mkdir /usr/local/apache2/conf/ssl.key
公開キーのコピー
 # cp newcert.pem /usr/local/apache2/conf/ssl.crt/newcert.crt
秘密キーのコピー
 # cp site.key /usr/local/apache2/conf/ssl.key/


***ssl.confの設定 [#m18531de]
/usr/local/apache2/conf/ssl.confを以下のように修正

 ##ServerName www.example.com:443
 ServerName uso5002.YYY.ac.jp:443
 ##ServerAdmin you@example.com
 ServerAdmin okada@YYY.ac.jp
 
 
 ##SSLCertificateFile /usr/local/apache2050/conf/ssl.crt/server.crt
 SSLCertificateFile /usr/local/apache2050/conf/ssl.crt/newcert.crt
 
 
 ##SSLCertificateKeyFile /usr/local/apache2050/conf/ssl.key/server.key
 SSLCertificateKeyFile /usr/local/apache2050/conf/ssl.key/site.key

''&color(red){SSL起動時注意};''

apache-2.2.xから、ssl版起動もbin/apachectl startで可能になった。

bin/apachectl sslstartとすると

The startssl option is no longer supported.

というエラーで起動できない


''DocumetRootをSSLだけ変更するには''

DocumentRoot "/usr/local/apache2050/htdocs"

を

DocumentRoot "/usr/local/apache2050/sslhtdocs"

のように変更する

(ただし、個人のディレクトリ[~okada]等はhttpでもhttpsどちらでも同じようにアクセスできる)

''VeriSign''~
承認してもらう公開キーの作成(奥村先生のページより)

 $ openssl md5 * >rand.dat (たとえば)
 $ openssl genrsa -rand rand.dat -des3 1024 >key.pem
 XXX semi-random bytes loaded
 Generating RSA private key, 1024 bit long modulus
 ......
 Enter PEM pass phrase: hogehoge
 Verifying password - Enter PEM pass phrase: hogehoge
 $ openssl req -new -key key.pem -out csr.pem
 Using configuration from /var/ssl/openssl.cnf
 Enter PEM pass phrase:
 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) [AU]:JP
 State or Province Name (full name) [Some-State]:Mie
 Locality Name (eg, city) []:Matsusaka
 Organization Name (eg, company) [Internet Widgits Pty Ltd]:Matsusaka University
 Organizational Unit Name (eg, section) []:Webserver Team
 Common Name (eg, YOUR name) []:secure.matsusaka-u.ac.jp
 Email Address []:webmaster@matsusaka-u.ac.jp
 
 Please enter the following 'extra' attributes
 to be sent with your certificate request
 A challenge password []:
 An optional company name []:
 
csr.pem は次のようなものです。  

 -----BEGIN CERTIFICATE REQUEST-----
 ほげほげほげ……
 -----END CERTIFICATE REQUEST-----



[[VeriSign テスト用認証取得:http://oku.edu.mie-u.ac.jp/~okumura/networking/ssl.html]]の仕方が奥村先生のページにある。
[[VeriSignのセキュアサーバIDの設定:https://wwwism.dyndns.org/hp/VeriSign.htm]]

**PDFlib+PHPのinstall [#j7433b25]
***zlibのインストールを確認 [#pbb89790]

 $ rpm -qa | grep zlib
 zlib-1.1.4-0vl2
 zlib-devel-1.1.4-0vl2

***PDFlibのinstall [#jde8e915]
''PDFlib-6.0.0のインストール''

このバージョンから作成したpdfファイルに「www.pdf.com」のスタンプが入る。

消すにはライセンスを購入する必要がある。

PDFlib-5.0.3には入らなかった。

PDFlib-Lite-6.0.0p1だけで実現できるようにするにはここ にあるようにインストール
すればよい。

php用のPDFlibはバイナリとしてPDFlib-6.0.0p1-Linux.tar.gzに入っている。~
それ以外のC++やPerl、その他のドキュメント等はPDFlib-Lite-6.0.0p1-Unix-src.tar.gz~
のソースからインストールする。(PHPのライブラリは入っていない)~

このバージョンはPHP4.3.0から4.3.6/5.0.0RC3をサポート。

php用のバイナリのコピー

 $ tar zxvf PDFlib-6.0.0p1-Linux.tar.gz
 $ su
 # cp PDFlib-6.0.0p1-Linux/bind/bind/php/php-50x/libpdf_php.so /usr/local/lib/

PDFlibのinstall(PHPで使用するときはいらないかも)

 $ tar zxvf PDFlib-Lite-6.0.0p1.tar.gz
 $ cd  PDFlib-Lite-6.0.0p1
 $ ./configure --with-tifflib --with-zlib --with-pnglib --with-jpeglib
configが終了すると
最後にサマリーが出る。
 For your convenience, here's a summary of configure's results:
 
 Support for shared libraries:           yes
 C++ language binding for PDFlib:        yes
 Java language binding for PDFlib:       no
 Perl language binding for PDFlib:       yes
 Python language binding for PDFlib:     yes
 Tcl language binding for PDFlib:        yes
 PHP language binding for PDFlib:        no, see bind/pdflib/php/readme.txt
 PDF import library (PDI):               no
      Note: if you purchase the additional PDF import library (PDI)
      you can also manipulate existing PDF documents with PDFlib.
      The additional block feature can be used to personalize PDF.
      See http://www.pdflib.com for details.
 
 Please observe the licensing terms for commercial PDFlib usage.
 PDFlib license agreement and purchase order can be found in the doc directory.
 
 $ make
 $ su
 # make install
 # exit

***libxml2のインストール [#g7ce6962]
PHP5からはlibxml2のVer.2.5以降が必要なため、 VinePlusでは2.4.xではバージョンが古いためソースからインストール ここからDownlaod

 $ tar zxvf libxml2-2.6.11.tar.gz
 $ libxml2-2.6.11
 $ ./configure --with-zlib=/usr/lib
 $ make
 $ make tests
 ## XML regression tests
 ## XML regression tests on memory
 (略)
 ## examples regression tests
 make[1]: 出ます ディレクトリ `/usr/local/src/libxml2-2.6.11/doc/examples'
 
 $ su
 # make install

''libxml2-devel-2.6.9-0vl1.i386.rpmをインストールしてもよい。''

''PDFlib-5.0.3のインストール(旧バージョン)''

php用のPDFlibはバイナリとしてPDFlib-5.0.3-Linux.tar.gzに入っている。~
それ以外のC++やPerl、その他のドキュメント等はPDFlib-Lite-5.0.3-Unix-src.tar.gz~
のソースからインストールする。(PHPのライブラリは入っていない)~

このバージョンはPHP4.1.0から4.3.3をサポート。

php用のバイナリのコピー

 $ tar zxvf PDFlib-5.0.3-Linux.tar.gz
 $ su
 # cp PDFlib-5.0.3-Linux/bind/php/php-4.2.1/libpdf_php.so /usr/local/lib/

PDFlibのinstall(PHPで使用するときはいらないかも)

 $ tar zxvf PDFlib-Lite-5.0.3-Unix-src.tar.gz
 $ cd  PDFlib-Lite-5.0.3-Unix-src
 $ ./configure --with-tifflib --with-zlib --with-pnglib --with-jpeglib
configが終了すると

最後にサマリーが出る。

 For your convenience, here's a summary of configure's results:
 
 Support for shared libraries:           yes
 C++ language binding for PDFlib:        yes
 Java language binding for PDFlib:       no
 Perl language binding for PDFlib:       yes
 Python language binding for PDFlib:     yes
 Tcl language binding for PDFlib:        yes
 PHP language binding for PDFlib:        no, see bind/pdflib/php/readme.txt
 PDF import library (PDI):               no
      Note: if you purchase the additional PDF import library (PDI)
      you can also manipulate existing PDF documents with PDFlib.
      The additional block feature can be used to personalize PDF.
      See http://www.pdflib.com for details.
 
 Please observe the licensing terms for commercial PDFlib usage.
 PDFlib license agreement and purchase order can be found in the doc directory.

 $ make
 $ su
 # make install
 # exit

**PHPのinstall [#ee048c81]
Vine3.0では、flexとflexで必要なyaccがどうもないようなでインストールする。~
また、zlib-devel-1.1.4-0vl3.i386.rpmもインストールが必要。~

(develはVine-3.0/i386/Vine/RPMS.devel/にある)

***flexに関する問題 [#leca6fe6]
rpmからインストール

コマンド(apt-get)でflex、bisonをインストールしてもOK
 # apt-get update
 # apt-get install flex
 パッケージリストを読みこんでいます... 完了
 依存情報ツリーを作成しています... 完了
 以下のパッケージが新たにインストールされます:
   flex
 アップグレード: 0 個, 新規インストール: 1 個, 削除: 0 個, 保留: 0 個
 119kB のアーカイブを取得する必要があります。
 展開後に 242kB のディスク容量が追加消費されます。
 取得:1 http://updates.vinelinux.org 3.1/i386/plus flex 2.5.4a-30vl1 [119kB]
 119kB を 0s 秒で取得しました (462kB/s)
 変更を適用しています...
 Preparing...                ########################################### [100%]
    1:flex                   ########################################### [100%]
 完了

 apt-get install bison
 パッケージリストを読みこんでいます... 完了
 依存情報ツリーを作成しています... 完了
 以下のパッケージが新たにインストールされます:
   bison
 アップグレード: 0 個, 新規インストール: 1 個, 削除: 0 個, 保留: 0 個
 290kB のアーカイブを取得する必要があります。
 展開後に 661kB のディスク容量が追加消費されます。
 取得:1 http://updates.vinelinux.org 3.1/i386/plus bison 1.875-6vl1 [290kB]
 290kB を 0s 秒で取得しました (1185kB/s)
 変更を適用しています...
 Preparing...                ########################################### [100%]
    1:bison                  ########################################### [100%]
 完了

これで、yaccのソースインストールも不要。


--------------------------------------------------------------------------------

***ソースからインストール(yaccのインストール) [#v4b80bb4]
Yacc とは Yet Another Compiler Compiler を表します。 Yacc の GNU 版は Bison と呼ばれています。 これは、言語を記述する文法を、その言語のパーサーに変換するツールです。

適当なところがわからなかったので[[ここ]]からDownload。 
 $ tar zxvf byacc-1.9.tar.gz
 $ cd byacc-1.9
 $ make
 cc -O -DNDEBUG   -c -o closure.o closure.c
 cc -O -DNDEBUG   -c -o error.o error.c
 (略)
 
 Loading yacc ... main.o(.text+0x460): In function `create_file_names':
 : warning: the use of `mktemp' is dangerous, better use `mkstemp'
 done 
 
 $ su
 # cp yacc /usr/local/bin

***flexのインストール [#de6b565c]
flex はスキャナを生成するツールです。スキャナとはテキストの中にある構 造を認識するプログラムです。flex は与えられたファイルの記述を読みこん でスキャナを生成します。

[[ここ:ftp://ftp.gnu.org/pub/non-gnu/flex/]]からDownload。 
 $ tar zxvf  flex-2.5.4a.tar.gz
 $ cd flex-2.5.4
 $ configure
 $ make
 $ su
 # make install

***phpのインストール [#m752d9e8]
 $ tar jxvf php-5.0.0.tar.bz2
 $ cd php-5.0.0
 $ ./configure --with-zlib-dir=/usr/lib --with-jpeg-dir=/usr/lib \
 --with-png-dir=/usr/lib --with-tiff-dir=/usr/lib \
 [--with-pdflib=/usr/local \ <---(/usr/local/libではない)] <--不要かも?
 --with-apxs2=/usr/local/apache2/bin/apxs \
 --with-pgsql --without-mysql --enable-mbstring \
 --enable-mbstr-enc-trans --enable-mbregex \
 [--with-libxml-dir=/usr/local] <--不要かも?
 --with-gd

 Thank you for using PHP.<---(最後の行)

 $ make
 Build complete.
 (It is safe to ignore warnings about tempnam and tmpnam).<---(最後の行)
 $ su
 # make install

初めてのインストールのときは
 # cp php.ini-recommended /usr/local/lib/php.ini

(PDFlib-6.0.0p1では以下2箇所を変更追加する)

php.iniの

 extension_dir = "./"
 を
 extension_dir = "/usr/local/lib"
 に変更
 
 extension=libpdf_php.so
 を追加

/usr/local/apache2/conf/httpd.confに以下を追加

 LoadModule php5_module        modules/libphp5.so

 AddType application/x-httpd-php .php

確認
 $ /usr/local/bin/php -i | grep PDF
 PDF Support => enabled
 PDFlib GmbH Binary-Version => 6.0.0p1

apacheを再起動

# /usr/local/apache2/bin/apachectl sslstart

&color(red){phpのバージョンをあげた時はapache2.2.xの再起動はrestartでなく、stop,startの必要がある。};

以下の1行のinfo.php

 <?php
 phpinfo();
 ?>

でPDFセッション(pgsqlの前あたり)の確認


[[ここ:https://wwwism.dyndns.org/hp/pdflib-s.htm]]のサンプルで動作確認をする。

configureでどのようなオプションをつけたを表示
 $ cd /usr/local/bin
 $ ./php -i
 phpinfo()
 PHP Version => 5.0.1
 
 System => Linux uso5001.abc-u.ac.jp 2.4.27-0vl7.2 #1 Sat Dec 11  17:29:33 JST 2004 i686
 Build Date => Sep  1 2004 12:05:19
 Configure Command =>  './configure' '--with-zlib-dir=/usr/lib' '--with-jpeg-\
 dir=/usr/lib' '--with-png-dir=/usr/lib' '--with-tiff-dir=/usr/lib' \
 '--with-apxs2=/usr/local/apache2/bin/apxs' '--with-pgsql' '--without-mysql' \
 '--enable-mbstring' '--enable-mbstr-enc-trans' '--enable-mbregex'
 Server API => Command Line Interface
 Virtual Directory Support => disabled
 (以下略)

**脆弱性 [#m487f453]
4.3.7以前のすべてのバージョン

5.0.0RC3以前のすべてのバージョン

で--enable-memory-limitが有効のときPHPに対してデータをPOSTするだけで、
任意のコードを実行できる脆弱性がある。4.2.0以降は --enable-memory-limit
はconfigureの標準設定では無効になっている。(2004/7/15)

[[参考:http://slashdot.jp/developers/article.pl?sid=04/07/15/0337223&topic=56&mode=thread]]

***参考ページ [#l26d27c7]
[[奥村先生のページ:http://oku.edu.mie-u.ac.jp/~okumura/linux/?Apache%202]] 

[[Apacheパラメータ>Linux Memo/Apache2.x/Apacheパラメータ]]
--------------------------------------------------------------------------------
RIGHT:[[元ページ:http://wwwism.dyndns.org/hp/linux/apache2.htm]]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS