1318211278 CentOS5.7 共有SSL バーチャルドメインへの設定が出来ずに困ってます。

複数のVサイトを立ち上げていて、カート決済の為に、共有のSSLの設定をしておりますが、
httpd.conf ssl.conf virtualhost.confの書き方についてお教えください。
※現在はmod_sslで通常のドメイン表示は出来ていて、httpd://にすると別なルートフォルダーを見るようになってしまっています。
基本ルート /var/www/html  VドメインA /home/A/public_html  VドメインB /home/B/public_html
基本的に伺いたいのは、それぞれのドメインへ、同じポートの443を利用して、共有SSLが使えるかどうか? 他のレンタルサーバのVPSでこの設定ができていたので、可能だと思っています。

httpd.confで、NameVirtualHost *:443 Include conf.d/*.confで外部ファイルをインクルード。
ssl.conf で、<VirtualHost 1.1.1.1(IP):443> 抜粋 localhost.crt等は読めていますエラー無し
→ 添付画像にします。

各ドメインの virtualhost.conf には下記を記入しています。
<VirtualHost *:443>
DocumentRoot /home/A/public_html
ServerName A
ServerAlias www.A
Options FollowSymLinks ExecCGI
</VirtualHost>
それぞれSSLEngine onを記入するのか?等、基本的に分かっていませんが、
お教えいただけると助かります。 Apache2.0

回答の条件
  • 1人10回まで
  • 登録:
  • 終了:2011/10/17 10:50:02

ベストアンサー

id:JULY No.1

回答回数966ベストアンサー獲得回数247

コメント欄の Becky_moni さんで答が半分出ているようなものですが、Apache httpd 2.0 では、一つの IP アドレスで複数のドメインを扱う、「名前ベースのバーチャルホスト」では、SSL/TLS は使えません。


その理由は、まず、SSL/TLS の接続直後の処理で、サーバの証明書がやりとりされますが、サーバの証明書が「証明しているもの」は、Web サーバの場合 FQDN、つまり、サイトのホスト名になります。


ところが、名前ベースのバーチャルホストでは、接続した時点では、クライアントがどのバーチャルホストにつなごうとしたのかが分からないため、どの証明書をクライアントに渡すべきか、判断出来きません。SSL/TLS の通信を成立させるための処理が、HTTP プロトコル中で指定される「このホストにつなぐ」という情報の前に行われるために、このような事が発生します。


で、これを解決するために、SNI と呼ばれる SSL/TLS の拡張機能が作られましたが、Apache httpd でこの SNI に対応したのは、2.2.12 以降になります。


Apacheの設定を変更し、単一IPアドレス上で複数のSSLサイトを運用する - builder


なので、CentOS 5.7 に付いてくる Apache httpd では対応していないはずです。


あと、SNI 自体はサーバ、ブラウザの共に対応している必要がありますが、古いブラウザや、携帯電話の場合に対応していない可能性があります。ですので、SNI 対応の Web サーバに入れ替えても、ブラウザによってはダメな場合がある、という認識が必要です。

  • id:Becky_moni
    自己レスです 他で調べていたらこういう記事がありました。
    でも、他のレンサバVPSでは <VirtualHost 1.1.1.1 :443> IPベースで出来ていたのです。
    ---
    先に証明書とかを送るので1つのリスナー(IP:ポート)に
    SSL,非SSL,第2のSSL設定の混在はできない
    最初のVirtualHostでSSLEngine onすると、そのポートはSSLになってさらにほかのVirtualHostは見ない
    VirtualHostの上のレベルでSSLEngine onにしてても名前による切り替えはしてくれない(これはエラーになる)
    最初のVirtualHostでSSLEngine offにすると、名前で振り分けるけど次のVirtualHostでSSLEngine onにしてもSSLはonにはならない
  • id:Becky_moni
    JULYさん 有り難うございます。
    なるほどですね。名前ベースでは解決できないという事がなんとなく分かったので、
    固定IP使ってるので全てにhttpd.confから 書き込みをしましたら、解決しました。
    知らない間にOSも5.7にあがって、Apache/2.2.3  built: Aug 31 になっていました。大変失礼しました。

    まだ自分の中でも分からない事があって、ssl.confにはデフォルトの443の設定が書き込んであり、
    ヴァーチャルの為のファイルvirtualhost.confにいくら書き込んでも443だけ認識してくれていません。
    仕方がなくhttpd.confに直書きせざるを得なくなったり。
    ヴァーチャルの設定443の中で、SSLEngine onにするとエラー出したり、解決できていない問題もありますが、とりあえずSSLEngine offにして、httpd.confに書き込んでいれば、エラーは現在でていませんでした。
    もし分かればお教えください。 書き方はこうでした。
    ## vaddhost: (A.com) at *:443
    <VirtualHost 1.1.1.1 :443>
    ServerName A.com
    ServerAlias www.A.com
    DocumentRoot /home/A.com/public_html
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteOptions inherit
    </IfModule>
    </VirtualHost>

  • id:JULY
    > 知らない間にOSも5.7にあがって、Apache/2.2.3  built: Aug 31 になっていました。

    yum で update すると、マイナーバージョンは勝手に上がっていくので、知らぬ間に 5.7 というのは普通ですが、Apache httpd が 2.2 系に変わっているのは、私も気づいていませんでした。

    ただ、SNI 対応は 2.2.12 からで、SNI 対応の機能がバックポート(古いバージョンでも新しい機能が使えるようにすること)された形跡も無いので、SNI 非対応は変わらず、名前ベースのバーチャルホストで SSL/TLS が使えない事は変わりません。

    > ヴァーチャルの為のファイルvirtualhost.confにいくら書き込んでも443だけ認識してくれていません。

    そもそも、名前ベースのバーチャルホストで SSL/TLS が使えないんで、NameVirtualHost の設定が残っていると、そんな事があるかもしれません。SSLEngine on が VirtualHost の外で設定するとエラーになるのは、その通りです。

    http://httpd.apache.org/docs/2.2/mod/mod_ssl.html#sslengine
    --------------------------------------------------------------------
    This should be used inside a <VirtualHost> section
    to enable SSL/TLS for a that virtual host.
    --------------------------------------------------------------------

    SSLEngine の設定は VirtualHost セクション内である必要があります。


  • id:Becky_moni
    ありがとうございました。
    Apacheのヴァージョンは自分が間違っていただけかもしれません。
    少し難しい世界なので、ぼちぼち学習していきます。
    とりあえず解決しましたので有り難うございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません