Category: Apache

6月 23 2011

indexのないディレクトリの一覧を表示させない

/etc/httpd/conf/httpd.confを編集

#Options Indexes FollowSymLinks
Options -Indexes FollowSymLinks

Indexes を -Indexesにする

6月 23 2011

PHP Warning: Header may not contain more than a single header, new line detected. in


と表示させようとしたら。。。。。。

PHP Warning:  Header may not contain more than a single header, new line detected. in

なんてエラーが。。。。。。。

Header?????
調べてみるとなんだか
「HTTPヘッダーは単純に、改行を挟むだけで、複数のヘッダーを送れてしまうため、改行が含まれている文字列はエラーとするように PHP4.4.2 または 5.1.2 以降で変更になりました。」
とかなんとか……あまり関係ないなぁ
とりあえず


これで表示されたが原因は不明だ。。。。。

環境によってはheaderをつけなくてはいけないのか?????

なんか気持ち悪いので入れなおしたら直った!!!!

4月 10 2011

OpenSSL設定

まずOpenSSLがインストールされているか確認

# openssl version
OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008

mod_sslインストール

# yum install mod_ssl

ここでは証明局を/etc/pki/CA サーバー証明を/usr/local/ssl にする
/usr/local/にsslディレクトリを作成。CAは過程で作成される。

# mkdir /usr/local/ssl

/etc/pki/tls/misc/CA を編集

# vi /etc/pki/tls/misc/CA

有効期限を10年にしておく

#DAYS="-days 365" # 1 year
#CADAYS="-days 1095" # 3 years
DAYS="-days 3652" # 10 years
CADAYS="-days 3652" # 10 years

/etc/pki/tls/openssl.cnfの設定

# vi /etc/pki/tls/openssl.cnf

default_daysを10年へ
default_bitsを2048へ

[ usr_cert ] basicConstraintsをCA:TRUEへ
nsCertTypeを指定
nsComment = “OpenSSL Generated Certificate” コメントアウト
nsCertType = sslCA, emailCA コメント解除

—- 以下は同じことを2度入力するので設定しておいた方がいいかも
countryName_default 国名 JP
stateOrProvinceName_default 都道府県 Tokyoとか
localityName_default 市区町村 Shinjukuとか
0.organizationName_default 組織名 
organizationalUnitName_default 部署名など コメント解除して
commonName_default 追記

#default_days    = 365           # how long to certify for
default_days    = 3652           # how long to certify for

#default_bits            = 1024
default_bits            = 2048

#countryName_default = GB
countryName_default = JP

#stateOrProvinceName_default = Berkshire
stateOrProvinceName_default = Tokyo

#localityName_default = Newbury
localityName_default = Shinjuku

#0.organizationName_default = My Company Ltd
0.organizationName_default = Company

[ usr_cert ]
#basicConstraints=CA:FALSE
basicConstraints=CA:TRUE

# nsCertType = client, email, objsign
nsCertType = server, client, email, objsign

#nsComment = "OpenSSL Generated Certificate"

認証局(CA)を構築する

# cd /etc/pki/tls/misc/
# ./CA -newca
CA certificate filename (or enter to create)

Making CA certificate ...
Generating a 2048 bit RSA private key
......................................++++++
......++++++
writing new private key to '../../CA/private/./cakey.pem'
Enter PEM pass phrase: /*パスフレーズ入力*/
Verifying - 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.
-----
/*以下opennssl.conf defaul設定でよければenter 設定する場合は環境に合わせ*/
Country Name (2 letter code) [GB]:JP  /*国*/
State or Province Name (full name) [Berkshire]:Tokyo /*都道府県*/
Locality Name (eg, city) [Newbury]:Shinjuku /*市区町村*/
Organization Name (eg, company) [My Company Ltd]:Company /*組織名*/
Organizational Unit Name (eg, section) []:Section /*部署名など*/
Common Name (eg, your name or your server's hostname) []:****.com /*ホスト名*/
Email Address []:info@****.com /*メールアドレス*/

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: /*証明書を破棄する場合に必要になるパスワード*/
An optional company name []: /*別の組織名がある場合*/
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for ../../CA/private/./cakey.pem: /*最初に入力したパスフレーズ*/
Check that the request matches the signature
Signature ok
・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・
        Subject:
            countryName               = JP
            stateOrProvinceName       = Tokyo
            organizationName          = Company
            organizationalUnitName    = Section
            commonName                = ****.com
            emailAddress              = info@****.com
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
・・・・・・・・・・・・
・・・・・・・・・・・・・・
Write out database with 1 new entries
Data Base Updated

公開鍵(cacert.pem)が認証ができてるかを確認

# openssl verify /etc/pki/CA/cacert.pem
cacert.pem: /C=JP/ST=Tokyo/L=Shinjuku・・・・・・・・・・・・
error 18 at 0 depth lookup:self signed certificate
OK

CAの秘密鍵を他人に見られないようにパーミッション設定

# chmod 600 /etc/pki/CA/private/cakey.pem
# chmod 700 /etc/pki/CA/private

やり直したい場合は/etc/pki/CAをディレクトリごと削除

rm -rf /etc/pki/CA

ここで/usr/local/sslへ移動

# cd /usr/local/ssl

サーバー秘密鍵(server.key) の作成 

# openssl genrsa -rand rand.dat -des3  -out server.key 2048
0 semi-random bytes loaded
Generating RSA private key, 2048 bit long modulus
..................................................+++
....+++
e is 65537 (0x10001)
Enter pass phrase:/*パスフレーズ*/
Verifying - Enter pass phrase: /*パスフレーズ確認*/

秘密鍵(server.key)を使って公開鍵(server.csr)を作成

# openssl req -new -key server.key -out server.csr
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.
-----
/*以下opennssl.conf defaul設定でよければそのままenter 設定する場合は環境に合わせ*/
Country Name (2 letter code) [GB]:JP  /*国*/
State or Province Name (full name) [Berkshire]:Tokyo /*都道府県*/
Locality Name (eg, city) [Newbury]:Shinjuku /*市区町村*/
Organization Name (eg, company) [My Company Ltd]:Company /*組織名*/
Organizational Unit Name (eg, section) []:Section /*部署名など*/
Common Name (eg, your name or your server's hostname) []:****.com /*ホスト名*/
Email Address []:info@****.com /*メールアドレス*/

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

ここで/etc/pki/tls/miscへ移動

# cd /etc/pki/tls/misc

サーバーの公開鍵(server.csr)に認証局(CA)の署名をしてもらう

# openssl ca -policy policy_anything -out /usr/local/ssl/cert-ca.pem -infiles /usr/local/ssl/server.csr
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for /etc/pki/pvCA/private/cakey.pem: /*パスフレーズ入力*/
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: ********************* GMT
            Not After : ********************* GMT
        Subject:
            countryName               = JP
            stateOrProvinceName       = Tokyo
            organizationName          = Company
            organizationalUnitName    = Section
            commonName                = ****.com
            emailAddress              = info@****.com
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
            ・・・・・・・・・・・

Certificate is to be certified until ************ GMT (3652 days)
Sign the certificate? [y/n]:y/*「証明書に署名しますか?」 yes*/

1 out of 1 certificate requests certified, commit? [y/n]y /*「署名リクエストを作成しますか?」 yes*/
Write out database with 1 new entries

認証局(CA)の署名つき証明書が作成されたか確認
/usr/local/ssl/cert-ca.pem: OK が表示されればOK

# openssl verify -CAfile /etc/pki/CA/cacert.pem /usr/local/ssl/cert-ca.pem
/usr/local/ssl/cert-ca.pem: OK 

/usr/local/ssl/へ移動

# cd /usr/local/ssl/

クライアントが読み込むCAの証明書(server.crt)を作成

# openssl x509 -inform pem -in /etc/pki/CA/cacert.pem -out client.crt -outform der

サーバーの秘密鍵をバックアップしパスフレーズ削除しておく

# cp -p server.key server.key.bk
# openssl rsa -in server.key.bk > server.key
Enter pass phrase for server.key.bk: /*パスフレーズ*/
writing RSA key

/etc/httpd/conf.d/ssl.confの設定

# vi /etc/httpd/conf.d/ssl.conf

112行目SSLCertificateFile
119行目SSLCertificateKeyFile
を変更

#SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateFile /usr/local/ssl/cert-ca.pem

#SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
SSLCertificateKeyFile /usr/local/ssl/server.key

httpdのリスタート

# service httpd restart
httpd を停止中:                    [  OK  ]
httpd を起動中:                    [  OK  ]

これでOK!!!
CAを作らないパターンなら簡単だがCA作るパターンは苦労した。。。。。。。

《参考サイト》
おれおれCA(プライベート認証局)構築編
OpenSSLでの自己認証局(CA)や証明書などの作成方法
OpenSSLを使ったCAの構築
Apache + OpenSSL CSR生成手順 (新規)
Apache+SSL環境構築の流れ

2月 24 2011

Windows Apache SSL

コマンドプロンプトでApache2.2\binまで移動して以下を実行
サーバ用秘密鍵(server.key)

openssl genrsa -out ../conf/server.key 1024

サーバ用公開鍵(server.csr)

openssl req -new -key ../conf/server.key -out ../conf/server.csr -config ../conf/openssl.cnf

サーバ用証明書(server.crt)

openssl x509 -in ../conf/server.csr -out ../conf/server.crt -req -signkey ../conf/server.key -days 365

ブラウザ用証明書(server.der)

openssl x509 -in ../conf/server.crt -out ../conf/server.der -outform DER

それぞれのファイルがApache2.2\confに出来る
httpd.confの設定
以下の2行のコメントを解除

LoadModule ssl_module modules/mod_ssl.so
Include conf/extra/httpd-ssl.conf

この状態でApacheを再起動するとOK

その他細かな設定はhttpd-ssl.confにて

http://domain1.localhost/

http://domain2.localhost/

なんてローカルでヴァーチャルホスト風に設定しているのでせっかくだからそれぞれでSSL通信したい!!
httpd-ssl.conftにVirtualHostの設定部分があるのでそこにNameVirtualHost *:443

NameVirtualHost *:443

以下の部分をVirtualHostではさまれた部分を丸々コピーしてヴァーチャルホストの分をペーストする。
コメントの部分は要らないから削除した方が見やすい。
変更は以下の2点

<VirtualHost _default_:443> これを <VirtualHost *:443>
DocumentRoot “C:/localhost/domain1″
ServerName domain1.localhost:443
</VirtualHost>

これでhttps://domain1.localhost/でアクセスできる

《参考サイト》
Apache2.2 + OpenSSLでSSL化
1つのIPでSSLの複数のバーチャルホストをしたい

2月 24 2011

windowsで .htaccess を使う

Windowsの開発環境でも.htaccessを使いたい!!
mod_rewriteしたいから!!!

httpd.confを編集

LoadModule rewrite_module modules/mod_rewrite.so  ←コメントを解除

<Directory “対象ディレクトリパス”>
  AllowOverride All  ← AllowOverrideNoneだったらAllに変更
</Directory>

↓以下を追記
AccessFileName h.htaccess
<Files h.htaccess>
  Order allow,deny
  Deny from all
</Files>

AccessFileName と
<Files ≶
で使用するファイル名を定義する
なんでも良いのだがここではh.htaccess
これだとアップしたときに頭のhを削除するだけだから簡単

《参考サイト》
Windows環境でApacheの.htaccessを使うには
テンプレートマスター