| 1 | [[PageOutline]] |
| 2 | |
| 3 | = Name-based VirtualHost with SSL = |
| 4 | * [http://kjirou.sakura.ne.jp/wiki_mirror/index.php?a%2FApache#q549090f 名前ベースのバーチャルホストで複数ドメインにSSLを割り当てることは可能か?] |
| 5 | * 本質的な問題 |
| 6 | {{{ |
| 7 | HTTP プロトコルと SSL の原理を考えてみても不可能なことは明らかですね。 |
| 8 | ネームベースのバーチャルホストは、HTTP リクエストヘッダに含まれる「Host」を参照 して |
| 9 | アクセスするバーチャルホストを変化させますが、 |
| 10 | SSL 接続の場合、HTTP リクエストヘッダは暗号化されており、 |
| 11 | 参照することができません。 |
| 12 | |
| 13 | 参照するためには、暗号を解読してやればよいわけですが、 |
| 14 | 暗号を解読するためには先に証明書の交換を行う必要がありますね。 |
| 15 | }}} |
| 16 | |
| 17 | * ただし、全てのVirtualHostで同じワイルドカード証明書を指定すれば可能 |
| 18 | * [http://httpd.apache.org/docs/2.2/ssl/ssl_faq.html#vhosts2 Why is it not possible to use Name-Based Virtual Hosting to identify different SSL virtual hosts?] |
| 19 | * It is possible, but only if using a 2.2.12 or later web server, built with 0.9.8j or later OpenSSL. This is because it requires a feature that only the most recent revisions of the SSL specification added, called Server Name Indication (SNI). |
| 20 | * The reason is that the SSL protocol is a separate layer which encapsulates the HTTP protocol. So the SSL session is a separate transaction, that takes place before the HTTP session has begun. The server receives an SSL request on IP address X and port Y (usually 443). Since the SSL request did not contain any Host: field, the server had no way to decide which SSL virtual host to use. Usually, it just used the first one it found which matched the port and IP address specified. |