No.485
【Apache】非SSLサイトへのSSLアクセスをエラーにする【SSL】
httpsつけてアクセスすると謎のページが表示されるんですけど…
2024年現在、WEBサイトはSSL化が標準扱いになってきている。
Let's Encrypt のような無料サービスもあり、確かにSSLは普及しているのだが、世の中には大人の都合でSSL化できないサイトもまだまだ多い。
そういうhttpでしかアクセスできないサイトにhttpsでアクセスするとまったく別なページが表示されることがある。これは、SSLの設定がないためデフォルト(扱いの)ページが表示されてしまっているのだ。
この解決が意外と面倒で、apacheのconfファイルの読み込まれる順番が変わったりすると、また別な挙動をしたりしてしまう。お悩みの管理者の方も多いだろう。
というわけで単純かつ簡単な解決方法をメモ。
解決方法
各ドメインごとにSSLの設定を書いてしまうのが楽だ。
もちろんページがないのでエラーとなる設定を書くのが望ましいだろう。
自分は 404 Not Found
になるように設定している。URLのミス扱いなら 400 Bad Request
でも良さそうだ。
/etc/httpd/conf.d
以下のSSL非対応ドメインの設定に下記を追加する。一応サブサブドメインも防止している。
<VirtualHost IPアドレス:443>
ServerName ドメイン名
ServerAlias ドメイン名 *.ドメイン名
Redirect 404 /
</VirtualHost>
具体的にはこんな感じ。
<VirtualHost 127.0.0.1:443>
ServerName subdomain.example.com
ServerAlias subdomain.example.com *.subdomain.example.com
Redirect 404 /
</VirtualHost>
400 Bad Request
にするなら Redirect 404 /
の部分を下記にすればOK。
Redirect 400 /
参考:SSLのデフォルト設定
一応下記のような記載を行っておけばSSLアクセスのデフォルトページが設定できるはずなのだが、なぜかうまく動作させられたためしがない。
設定ファイルの読み込み順などで影響を受けるし、面倒くさいのでこちらの方法は諦めてしまった。
<VirtualHost *:443>
DocumentRoot /var/www/html
</VirtualHost>
や
<VirtualHost _default_:443>
DocumentRoot /var/www/html
</VirtualHost>