私は実際には非常に単純なタスクを達成しようとしています。
アプリケーションをポートにバインドし、そのポートのVirtualHostエントリごとにSSLEngineを有効にします。すべてが1つのことに加えて機能します。HTTPS://ではなくHTTP://で始まるURLを入力すると、HTTPS://要求スキームを使用することを示唆するBad Requestエラーが表示されます。本当の質問は、http://sub.domain.tld:4000/
からhttps://sub.domain.tld:4000
にリダイレクトする方法(302)です。
そこに見られる例: http://isil.monsternett.no:844
ありがとう。
編集:
たぶん私はコア構造に間違いを犯しているのでしょうか?これは私が使用するものです:
Listen 4000
NameVirtualHost 0.0.0.0:4000
<VirtualHost 0.0.0.0:4000>
RewriteEngine On
...
</VirtualHost>
Listen 4001
NameVirtualHost 0.0.0.0:4001
<VirtualHost 0.0.0.0:4001>
RewriteEngine On
...
</VirtualHost>
Listen N
NameVirtualHost 0.0.0.0:N
<VirtualHost 0.0.0.0:N>
RewriteEngine On
...
</VirtualHost>
Apache Httpdは、ほとんどのサーバーと同様に、2つの異なるプロトコル(ここではHTTPとSSL/TLS)に同じポートを使用することをサポートしていません。
これを行うには、サーバーが最初の要求の内容に基づいてプロトコルを検出できる必要があります。HTTP要求のように見えるか、SSL/TLS Client Helloメッセージのように見えるかです。一部のサーバーはこれを実行できます(例: JavaのGrizzly )が、これは非常に珍しいことです。 Apache Httpdはこれをサポートしていません。
(補足として、 HTTP-> HTTPSリダイレクトは部分的にしか有用ではありません とにかく、ユーザーがHTTPSを使用することを期待してください。)
Webページがポート9001
でホストされている場合は、Linuxボックスでポートを有効にし、/etc/httpd/conf.d/ssl.conf
でこれらの変更を行います。次に、リスンポートを9002
に設定し、SSL証明書とキーを作成して、次の構成をhttpd.confファイルに配置します。
Listen 9001
<VirtualHost *:9001>
ServerAdmin root@localhost
DocumentRoot /mnt/work/httpd
<Directory "/mnt/work/httpd">
Options FollowSymLinks
AllowOverride AuthConfig
</Directory>
SSLEngine On
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP
SSLCertificateKeyFile /etc/httpd/www.test.example.com.key
SSLCertificateFile /etc/httpd/www.test.example.com.crt
RewriteCond %{HTTPS} off
RewriteRule (.*) https://www.test.example.com:9002%{REQUEST_URI}
。htaccessファイルは次のようになります。
AuthType Digest
AuthName "realm"
AuthDigestProvider file
AuthGroupFile /dev/null
AuthUserFile /mnt/work/httpd/digest_auth
Require user username