ラベル Apache の投稿を表示しています。 すべての投稿を表示
ラベル Apache の投稿を表示しています。 すべての投稿を表示

2010/04/14

"mod_rewrite" "%2F"

mod_rewrite で飛んでほしかったんですが
何故だか "%2F" が URL に入ってると飛べなくて
別にこんなリクエスト受けつけなけりゃという話もありますが
投げてくる人がいるんですから仕方がありません

GET で ? も使わずに base64 されたデータが飛んでくるんですが
これは mod_rewrite で query に回すとかで正しいんでしょうか
http://sample.com/ だけ公開したいサーバがあって
http://sample.com/Z2d1dHRlcg%3D%3D みたいなリクエストが来るんで
これを処理して返事したかっただけなんですが
なんか、大鉈振ってる気がします...

でまぁ、検索しましたら
PHPプロ!TIPS+
AllowEncodedSlashes On を設定しなさいと教えて頂き
無事に動くものができました

よかったよかった

2009/08/21

"Required SSLCacheServerPath missing"

Apache-SSL を忘れてました

apache 1.3 のソースと、それに合わせて apache-ssl のソースを取ってきます
バージョンを合わせましょう
で、apache のソースを展開して移動して apache-ssl をその場で展開します
中に FixPatch ってスクリプトがあるんで ./FixPatch ってして実行
patch あてるか聞かれるんで y って答えてあげます
で、あとは configure して make して make install
src に移動して make certificate ってするとオレオレ証明書も作ってくれます
apache_1.3.?/SSLconf/conf/httpsd.pem に証明書と鍵が入ってます

で、apache_1.3.?/SSLconf/conf/httpd.conf が設定サンプル
ココに SSLCacheServerPath とか設定してあるんですが
インストールした方の conf/httpsd.conf には記述が無いので
まんまだと起動できなくって "Required SSLCacheServerPath missing" って出ます
で、httpd.conf に SSLCacheServerPath はあるんですが
path が変なとこ向いてるんで bin/gcache を指してあげ
更に証明書と秘密鍵のパスも設定してあげると起動します

tar xfz apache_1.3.41.tar.gz 
cd apache_1.3.41
tar xfz ../apache_1.3.41+ssl_1.60.tar.gz
./FixPatch
./configure
make
make install
cd src/
make certificate
cd ../SSLconf/conf/
cp http* /usr/local/apache/conf
cd /usr/local/apache
(conf の中身をいろいろいじる)
./bin/httpsdctl start
SSL 部分の設定 include したら動くようになってると素敵だな
って思いました
User とか Group とか再定義できるんですかね、Log も
上書き??

apache-1.3 mod_ssl

復習大切ですよね、というわけで apache のこと復習してました

apache-1.3 の場合 mod_ssl ってのは本体とは別で配布されてます
本体も mod_ssl も展開して
./configure --with-apache=../apache-1.3.41
的なことをして設定
更に本体の方に移動して
./configure && make && make certificate && make install
的なインストールをします
設定ファイルは conf/httpd.conf に入ってまして
でも Listen するのが 8080 とか 8443 とかになってました
make certificate するときにオレオレ作ったんでそれが使われます
で、startssl

apache-2.0 の場合は本体に入っているので
./configure --enable-ssl
的なことをして設定
設定ファイルには 443 ポートでの設定が入ってる
設定ファイルは conf/ssl.conf が conf/httpd.conf から Include されてるので編集
証明書は作ってくれないのかな??

apache-2.3 の場合も本体に入ってる
設定ファイルは conf/extra/httpd-ssl.conf になってて
conf/httpd.conf からの Include は comment out されてます

にしても、apache 大きかったです

2009/08/12

x-forwarded-for combine

proxy 的なものがかまされると
apache なんかの access log が残念なことになってしまいます

Apache の log format の default は Common Log Format とかいって
"%h %l %u %t \"%r\" %>s %b"
だそうです (mod_log_config - Apache HTTP サーバ)
これは
%h でホスト名は取ってるんだけど proxy 使ってるとサーバの名前しか取れません

しかし、「x-forwarded-for と combine で FA」と耳にしたのでググってみました
[Pound][Apache]X-Forwarded-Forログ設定 : ブログシステム - BLOG.BBTUNE.COM -
なるほど、mod_log_config - Apache HTTP サーバ
%{Foobar}i サーバに送られたリクエストの Foobar: ヘッダの内容
ってのを使うんですね。
これでもぉログ取り放題です。

2009/07/24

wildcard subjectaltname virtualhost

SSL と VirtualHost 関連で「どうなの?」的なことを問われたので
確か素敵まとめサイトがあったと思って検索したら
SSL/TLS で Namebase のバーチャルホスト
が出てきました
素敵!!
VhostTaskForce - CAcert Wiki
ここも素敵かな??

多分 Apache 用語ですけど
VirtualHost
1 つのウェブサーバで複数のウェブサイトを構築
IP address ベースと Name ベースのものがある
IP ベース VirtualHost
アクセスがあった IP address 毎に
サイト・コンテンツを指定して複数サイトがあるように見せる
IP address が複数必要なので場合によってはコストが高い
Name ベース VirtualHost
サーバーの名前毎にコンテンツを振り分ける VirtualHost
IP address が 1 つしかなくても複数のサイトが構築できる
HTTP 1.1 とかで Host というヘッダをクライアントは送るので
そこで判断してるんですよね?? きっと

で、こっから少し古い話

一方 SSL は TCP の接続の後にネゴシエーションするわけですが
ここにはまだ Apache 出てこないんで Host とかの内容見ません
SSL のネゴシエーションのときに分かるのは TCP までの情報なので
IP address とか port 番号とかです
なので、HTTPS でサーバが証明書を提示する際にどの証明書を提示するか
それを決める判断の基準も IP address とか port 番号しかありません

IP ベースの VirtualHost であれば IP address と port 番号毎に
1 つサイトが決まっているので証明書を提示してあげれば良いのですが
1 つの IP アドレスの下で Name ベースの VirtualHost をしてる場合
それら VirtualHost 達で 1 枚しか証明書が提示できません
なのでワイルドカードや SubjectAlternativeName などを利用して
1 枚で複数の FQDN に対応できる証明書が利用されています

古い話終わり

で、RFC 3546 で TLS 拡張で Server Name Indication ってのが定義されてるそうで
TLS レベルで接続したいサーバの名前を指定する仕組みが決められて
それ使えば Name ベースの VirtualHost でも問題無しに
1 Host 毎に 1 枚証明書を対応付けれて IP address もぉ要らないよ!
ということになっているみたいです

IE7 以降とか Fx 2 以降とか Opera 8 以上は対応してるみたいなんですが
携帯とかどうなんだろう??

更に、RFC 2817 では Upgrading to TLS という仕組みも定義されてるとか
HTTP 1.1 から TLS な世界に切り替わるみたいですが
ちょっと、ググっただけでは対応状況までは分かりませんでした

Server Name Indication が普及してくれると分かり易くていいですね

2009/06/13

mod_wsgi

mod_wsgi 再びなわけです
前回はこちら
前回はシステム設定で指定は極力避けたいなと思ってたんですが
とりあえず動いたらいいじゃないということで WSGIScriptAlias 解禁

WSGIScriptAlias は多分設定ファイルの直下か
VirtualHost の直下でないと書けないので
そこで
WSGIScriptAlias / /foo/var/abc/def
とか書いてあげて
def が WSGI の受け答えのできるスクリプトか何かなら動いてくれて
トップから Django という素敵サイトが完成しました

色々ググるのもいいけれど原典にあたるというのが大切だなと思いました
ソース読め? 読めないんだなぁ、これが、読解力薄くて

2009/05/29

"IOError: [Errno 11] Resource temporarily unavailable"

Plone でいじってるサイトがありまして
ちょっと改造したいんだけど既にハードコーディングバリバリになってたりしまして
インスタンスをコピーしていじろうと思いました。
で、Linux だし cp -a とかでコピーしてしまうわけです。
var の下は lock とかあるし Data.fs だけ残して消してみたりする。
更に、etc/zope.conf の port を変更する。
で、bin/runzope とかしてみると当然のようにエラーが出ます。
何か色々流れた後に
"IOError: [Errno 11] Resource temporarily unavailable"
とか書いてあるんでググります。
インスタンス走ってるからダメなんじゃん? みたいなことが ML で言われてる。

そこで思いだしました、Plone はスクリプトが色々ハードコードだったかも。
で、etc と bin の下で grep してみました。
コピー元の絶対パスが各所に見受けられました。
コピーしただけでは元を見ちゃうのでそりゃ先ず port がかぶっているわけです。
なんでマッチしなくなるまで置換しまくりました。
vi 少し覚えてきてるんで :%s/xxx/yyy/g てなもんです。

で〜、一応 SSL くらいかけとくかってんで apache の方も設定コピーします。
mod_rewrite と mod_proxy してるのでそこの設定の port だけ変更します。
ここでもグダグダ。
VirtualHost だけコピーして port とか log の場所変えて起動。
繋がらない。
NameVirtualHost? と思って追加してみる。
繋がらない。
Listen だと気付いて Listen する。
繋がった。
何で Listen 忘れるんだよ、「apache の設定ならできます」じゃなかったのかよ、
と心の中で数回呟いてじっと手を見ました。

忘れるよね、人間だもの。

2009/04/16

SSLCipherSuite

Apache の mod_ssl 関連の設定で SSLCipherSuite ってのがあります。
ググりました。
akr流(2006-02-04)が最初にひっかかって
知りたいこと大体書いてあるっていう素敵 blog でした。
でも良い子は mod_ssl - Apache HTTP Server も見ないといけませんね。
暗号の基礎の勉強なら新版暗号技術入門がとっても分かり易いんですが
運用となると Apacheハンドブックとか OpenSSL とか読んで勉強すべきでしょうか...。



これは SSL/TLS 張るときに使う暗号関係のアルゴリズムのリストを指定しまして、
openssl の ciphers ってコマンドで見れます。
デフォルトだと
$ openssl ciphers -v | sort
AES128-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(128) Mac=SHA1
AES256-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(256) Mac=SHA1
DES-CBC-MD5 SSLv2 Kx=RSA Au=RSA Enc=DES(56) Mac=MD5
DES-CBC-SHA SSLv3 Kx=RSA Au=RSA Enc=DES(56) Mac=SHA1
DES-CBC3-MD5 SSLv2 Kx=RSA Au=RSA Enc=3DES(168) Mac=MD5
DES-CBC3-SHA SSLv3 Kx=RSA Au=RSA Enc=3DES(168) Mac=SHA1
DHE-DSS-AES128-SHA SSLv3 Kx=DH Au=DSS Enc=AES(128) Mac=SHA1
DHE-DSS-AES256-SHA SSLv3 Kx=DH Au=DSS Enc=AES(256) Mac=SHA1
DHE-RSA-AES128-SHA SSLv3 Kx=DH Au=RSA Enc=AES(128) Mac=SHA1
DHE-RSA-AES256-SHA SSLv3 Kx=DH Au=RSA Enc=AES(256) Mac=SHA1
EDH-DSS-DES-CBC-SHA SSLv3 Kx=DH Au=DSS Enc=DES(56) Mac=SHA1
EDH-DSS-DES-CBC3-SHA SSLv3 Kx=DH Au=DSS Enc=3DES(168) Mac=SHA1
EDH-RSA-DES-CBC-SHA SSLv3 Kx=DH Au=RSA Enc=DES(56) Mac=SHA1
EDH-RSA-DES-CBC3-SHA SSLv3 Kx=DH Au=RSA Enc=3DES(168) Mac=SHA1
EXP-DES-CBC-SHA SSLv3 Kx=RSA(512) Au=RSA Enc=DES(40) Mac=SHA1 export
EXP-EDH-DSS-DES-CBC-SHA SSLv3 Kx=DH(512) Au=DSS Enc=DES(40) Mac=SHA1 export
EXP-EDH-RSA-DES-CBC-SHA SSLv3 Kx=DH(512) Au=RSA Enc=DES(40) Mac=SHA1 export
EXP-RC2-CBC-MD5 SSLv2 Kx=RSA(512) Au=RSA Enc=RC2(40) Mac=MD5 export
EXP-RC2-CBC-MD5 SSLv3 Kx=RSA(512) Au=RSA Enc=RC2(40) Mac=MD5 export
EXP-RC4-MD5 SSLv2 Kx=RSA(512) Au=RSA Enc=RC4(40) Mac=MD5 export
EXP-RC4-MD5 SSLv3 Kx=RSA(512) Au=RSA Enc=RC4(40) Mac=MD5 export
RC2-CBC-MD5 SSLv2 Kx=RSA Au=RSA Enc=RC2(128) Mac=MD5
RC4-MD5 SSLv2 Kx=RSA Au=RSA Enc=RC4(128) Mac=MD5
RC4-MD5 SSLv3 Kx=RSA Au=RSA Enc=RC4(128) Mac=MD5
RC4-SHA SSLv3 Kx=RSA Au=RSA Enc=RC4(128) Mac=SHA1

っていうのが有効になってます。
何を表してるかっていうと
「名前 SSLのバージョン 鍵交換の方法 認証方法 通信の暗号化方法 メッセージ認証のハッシュ」

$ openssl ciphers -v 'ALL' | sort

ってすると使える全ての Suite が列挙されます

! で「それ以降で選択されても出ないようにする」っていう強い拒否なので
EXP: 米国で輸出規制があった頃に輸出できた暗号強度?
ADH: 匿名 Diffie-Hellman 鍵交換 (って何?)
LOW: 56bit とか 64bit とか小さな暗号強度のもの
SSL2: SSL2
辺りを使わないようにしてみると
$ openssl ciphers -v 'ALL:!EXP:!ADH:!LOW:!SSLv2' | sort
AES128-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(128) Mac=SHA1
AES256-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(256) Mac=SHA1
DES-CBC3-SHA SSLv3 Kx=RSA Au=RSA Enc=3DES(168) Mac=SHA1
DHE-DSS-AES128-SHA SSLv3 Kx=DH Au=DSS Enc=AES(128) Mac=SHA1
DHE-DSS-AES256-SHA SSLv3 Kx=DH Au=DSS Enc=AES(256) Mac=SHA1
DHE-RSA-AES128-SHA SSLv3 Kx=DH Au=RSA Enc=AES(128) Mac=SHA1
DHE-RSA-AES256-SHA SSLv3 Kx=DH Au=RSA Enc=AES(256) Mac=SHA1
EDH-DSS-DES-CBC3-SHA SSLv3 Kx=DH Au=DSS Enc=3DES(168) Mac=SHA1
EDH-RSA-DES-CBC3-SHA SSLv3 Kx=DH Au=RSA Enc=3DES(168) Mac=SHA1
RC4-MD5 SSLv3 Kx=RSA Au=RSA Enc=RC4(128) Mac=MD5
RC4-SHA SSLv3 Kx=RSA Au=RSA Enc=RC4(128) Mac=SHA1
中々絞れてるかな。

ん〜、完璧主義者なら MD5 も外すべきかなぁ。