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>