複数の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
コメント欄の 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 サーバに入れ替えても、ブラウザによってはダメな場合がある、という認識が必要です。
コメント(4件)
でも、他のレンサバ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にはならない
なるほどですね。名前ベースでは解決できないという事がなんとなく分かったので、
固定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>
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 セクション内である必要があります。
Apacheのヴァージョンは自分が間違っていただけかもしれません。
少し難しい世界なので、ぼちぼち学習していきます。
とりあえず解決しましたので有り難うございました。