- - PR -
Apache (SSL)で異常
1
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-07-12 17:20
VirtualHostの設定を下記のように行っております。
Apacheのバージョンは、2.0.52 で、OSは、CentOS 4.3 です。 全ての ServerName は、同じサーバーです。 ■/etc/httpd/conf.d/ssl.conf ---- Listen 80 Include conf.d/*.conf ServerName www.hoge.com:80 DocumentRoot "/var/www/html" NameVirtualHost *:80 NameVirtualHost *:443 <VirtualHost _default_:80> DocumentRoot "/var/www/html" ServerName www.hoge.com:80 ServerAlias hoge.com:80 </VirtualHost> ---- ■/etc/httpd/conf.d/ssl.conf ---- Listen 443 <VirtualHost _default_:443> DocumentRoot "/var/www/html" ServerName www.hoge.com:443 ServerAlias hoge.com:443 : </VirtualHost> ---- ■/etc/httpd/conf.d/a.conf ---- <VirtualHost *:80> DocumentRoot "/var/www/html/a" ServerName www.a.hoge.com:80 ServerAlias a.hoge.com:80 : </VirtualHost> <VirtualHost *:443> DocumentRoot "/var/www/html/a" ServerName www.a.hoge.com:443 ServerAlias a.hoge.com:443 : </VirtualHost> ---- ■/etc/httpd/conf.d/b.conf ---- <VirtualHost *:80> DocumentRoot "/var/www/html/b" ServerName www.b.hoge.com:80 ServerAlias b.hoge.com:80 : </VirtualHost> <VirtualHost *:443> DocumentRoot "/var/www/html/b" ServerName www.b.hoge.com:443 ServerAlias b.hoge.com:443 : </VirtualHost> ---- 下記のテストを実施しました。 テストケース 1-1 http://www.hoge.com/ 1-2 http://hoge.com/ 2-1 https://www.hoge.com/ 2-2 https://hoge.com/ 3-1 http://www.a.hoge.com/ 3-2 http://a.hoge.com/ 4-1 https://www.a.hoge.com/ 4-2 https://a.hoge.com/ 5-1 http://www.b.hoge.com/ 5-2 http://b.hoge.com/ 6-1 https://www.b.hoge.com/ 6-2 https://b.hoge.com/ すると、テストケース 6-1、6-2 だけが異常です。 以上の内容は、それぞれ 4-1、4-2 と同じ内容を表示します。 他は、正常です。 つまり、SSLの場合のみ VirtualHost が正常に機能できいません。 設定の不備でしょうか? 正常に機能させる方法を教えてください。 よろしくお願いいたします。 | ||||||||||||||||
|
投稿日時: 2006-07-12 18:19
ドキュメント読みましょう。
http://httpd.apache.org/docs/2.0/vhosts/name-based.html | ||||||||||||||||
|
投稿日時: 2006-07-13 12:25
ドキュメントをよく読まずに投稿して、すいませんでした。
では、質問を変えたいのですが、 1台のサーバーで複数のSSL(https)に対応したWebサイトを 構築する方法を教えてください。 https://www.hoge.com/ https://hoge.com/ https://www.a.hoge.com/ https://a.hoge.com/ https://www.b.hoge.com/ https://b.hoge.com/ これらは、全て同じIPアドレスで、表示するページが違います。 こちらで一晩考えてみた(空想レベルですが)のですが、 ホスト名を判断してRewriteすればよいかなと思っています。 ただ、Tomcatと連携しているので、その辺設定が難しいです。 例えば、www.a.hoge.com は、JkMount /a/* ajp13 www.b.hoge.com は、JkMount /b/* ajp13 他に、ホストによって変わる点は、 ・ログの出力先 ・証明書 ですが、まずはちゃんと機能させたいところです。 それはこれから試してみますが、 他に方法があれば、教えていただけますでしょうか。 よろしくお願いいたします。 | ||||||||||||||||
|
投稿日時: 2006-07-13 12:59
1つのIPアドレスでは1つのSSL証明書しか使えません。
つまり、FQDNごとにIPアドレスを用意する必要があります。 これはSSLの実装上の仕様と言っても過言ではないです。 よって、FQDNを別にしたいのならIPアドレスを6つ用意してください。 これが答えです。 どうしても1つのIPアドレスで実現したいのであればポートを別けるしかありません。 http://www.hoge.com:443/ hoge.com:444/ http://www.a.hoge.com:445/ などのように。 一応、別解としてCNがワイルドカードなSSL証明書も世の中に存在しますが、 いろいろあって個人的にはあまりお勧めはしません。 ドキュメント読まなくても、「SSL バーチャルホスト」などで検索すると この話題はいくらでも出てきますのでもう一度調べてみては? @IT会議室でも何度か同じような話が出てたと思いますよ。 [ メッセージ編集済み 編集者: 綾瀬 編集日時 2006-07-13 13:01 ] | ||||||||||||||||
|
投稿日時: 2006-07-13 16:04
コメントありがとうございます。
調べてみました。 SSLプロトコルの認証がHostヘッダを渡す前に行われるため、ネームベースのバーチャルホストが効かないのですね。 その上で、もう少し食い下がりたいのですが、 (条件:ハードウェアを増やしたり、別途プロバイダと契約したりしたくない(お金をかけたくない)) 1. Apache 2.2のmod_sslでは「RFC 2817 - Upgrading to TLS Within HTTP/1.1」(port 443(https)ではなく、port 80(http)を用いて、いったんクリアテキストで Hostヘッダ等を渡した後にSSLに切り替える)が実装されているそうですね。 Apache 2.2で、SSLによるネームベースのバーチャルホストを試された方がいらっしゃれば、コメントいただけないでしょうか。 問題なければ、これがもっともスマートな解決手段かと思われます。
2. IPアドレスをホスト名の数分用意する。これはグローバルIPアドレスですよね? ローカルIPアドレスでIPアドレスベースのバーチャルホストにする方法はありますか? mod_proxyとかでできるのでしょうか? LinuxのVIFという方法で、1枚のネットワークインターフェースに複数のIPアドレスを 割り当てることができるようですね。
3. ポートをホスト名の数分開ける。これはやりたくないです。ポートを開けたくないです。 例えば、このようなことは可能でしょうか? www.hoge.com:443 → ポート転送 → https://www.hoge.com:443/ hoge.com:443 → ポート転送 → https://hoge.com:444/ www.a.hoge.com:443 → ポート転送 → https://www.a.hoge.com:445/ iptablesとかで、ホスト名を判断することはできるのでしょうか? これもSSLプロトコルの都合上、ダメでしょうか。 初めてのことが多いので1つ1つ試していきます。
ワイルドカードなSSL証明書の導入を検討しているのですが、 どのような問題があるのでしょうか? 是非、教えていただきたいです。 | ||||||||||||||||
|
投稿日時: 2006-07-14 10:06
こんにちは。
仮にサーバ側で正しく動作したとしても、これを実装したクライアント(WEBブラウザ)が まだ無いはずです。 少なくともIEやMozilla等のメジャーなもので対応したというのは聞いたことがないです。 よって現時点では実質使えないのでは?と思ってます。
ローカルからしかアクセスが無いのであればもちろんローカルIPでも構いません。 ただ、今回はインターネット上でのサービス提供と受け取りましたので、 グローバルIP以外の選択肢は無いと思います。
今度はiptablesのマニュアルでも読んでみてはいかがでしょう?
問題がある、とは一言も書いてませんけど 少なくとも、今回Jumpin' Jack Flashさんがやろうとしていることには 合わないと思います。 仮にCNが*.example.comな証明書を発行してもらった場合、 www.example.com ssl.example.com a.example.com など、サブドメインが1段の場合はワイルドカードの範囲内ですが、 www.a.example.com abc.def.example.com など、2段以上になると一致しなくなり範囲外となります。 | ||||||||||||||||
|
投稿日時: 2006-07-14 15:08
1.
おっしゃるとおり、ブラウザも対応していなければならないので、 時期尚早ですね。 却下です。 2. インターネットで公開するサービスですので、グローバルIPアドレスが ホスト数分必要になるので、コストに見合いません。 却下です。 3. iptablesの勉強をしてみます。毎度、調査が浅く申し訳ございません。 しかし、iptablesを完全に理解するのはすぐにできることではないので、 今回は、見送ろうと思います。 4. で、手がなくなってしまったので、妥協案として、httpsサーバーは、 https://www.hoge.com のみとし、 https://hoge.com/ → https://www.hoge.com/ https://www.a.hoge.com/ → https://www.hoge.com/a/ https://a.hoge.com/ → https://www.hoge.com/a/ https://www.b.hoge.com/ → https://www.hoge.com/b/ https://b.hoge.com/ → https://www.hoge.com/b/ にしようと思います(っていうか、元の状態に戻った)。 ワイルドカードなSSL証明書の件は了解しました。 サブドメインが2段以上になってもダメなんですね。 先にわかってよかったです。 ありがとうございました。 |
1