私の仮想ホストは次のようになります:
<VirtualHost example.com:443>
SSLEngine on
SSLCertificateFile /etc/apache2/ssl-keys/example/example.crt
SSLCertificateKeyFile /etc/apache2/ssl-keys/example/example.key
SSLCACertificateFile /etc/apache2/ssl-keys/example/COMODO_EV_SSL.ca-bundle.crt
SSLProtocol -ALL -SSLv3 +TLSv1
SSLCipherSuite ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
BrowserMatch ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
DocumentRoot /home/example/www/current/web
ServerName example.com
ServerAlias www.example.com
<IfModule php5_module>
php_value newrelic.appname "Example"
</IfModule>
</VirtualHost>
もし私がhttps://例.comすべては順調ですが、私には理由は分かりませんが、同じサーバーを指している他のドメインに行くと、https://任意のドメイン上記の仮想ホストが応答しています。ブラウザは証明書がドメインと一致していないと表示しますが、それを無視すると、https://例.com下https://任意のドメイン、その下でもhttp://任意のドメイン私は全く別のウェブサイトを持っています。
使用できることは知っていますhttpsの上http://任意のドメイン別の IP アドレスで別の証明書を設定する必要がありますが、それは私の問題ではありません。
次のいずれかのオプションを実現したいと考えています。
- https://任意のドメイン指すべきhttp://任意のドメイン
- https://任意のドメイン404エラーを返す
これを実現するにはどうすればいいでしょうか?よろしくお願いします。
答え1
ポートに 1 つの vhost のみを定義した場合、Apache によってデフォルトの vhost として扱われ、それに接続するすべてのクライアントに提供されます。
したがって、別の仮想ホストを追加し、それをデフォルトのものとして扱い、404クライアントとなるように設定する必要がありました。example.comの証明書と同じ証明書を使用する必要があります。これは、example.comにアクセスするクライアントにも使用されるためです。https://example.com使用しない場合スニ。
つまり、次のようになります。
<VirtualHost _default_:443>
SSLEngine on
SSLCertificateFile /etc/apache2/ssl-keys/example/example.crt
SSLCertificateKeyFile /etc/apache2/ssl-keys/example/example.key
SSLCACertificateFile /etc/apache2/ssl-keys/example/COMODO_EV_SSL.ca-bundle.crt
SSLProtocol -ALL -SSLv3 +TLSv1
SSLCipherSuite ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM
Redirect 404 /
</VirtualHost>
SNI のないクライアントを気にしない場合 (最近ではそのようなクライアントは少数です)、同じ IP 上に異なる TLS 証明書を持つ任意の数の https Web サイトが存在する可能性があります。仮想 SSL ホスティングの制限は、証明書が提供される前に、非 SNI クライアントがアクセスしたい仮想ホストを SSL レイヤーに通知しないという事実によります。