wgetのHSTSを一時的に無効にする

2020年8月21日LinuxLinux,Webサイト

wgetのHSTSを一時的に無効にする

サーバーの設定を確認するためwgetを使ってこのブログにアクセスしたところ、HSTSのせいで勝手にhttps:~なアドレスに変更して接続してしまいました。

今回の設定確認ではhttp~のアドレス(非SSL/TLS)にアクセスしたかったので少し困りました。

調べてみたところ、HSTSを無効にするオプションがありましたので覚えとしてまとめておきます。

起こったこと

サーバー設定の確認のため、wgetでこのブログのサーバーにアクセスしました。

今回は非SSLでつないだときの動きを見たかったので、http://~から始まるアドレスでwgetを実行しました。1回目は狙い通り、httpでアクセス → httpsにリダイレクト という動きをしてくれましたが、2回目以降はいきなりhttpsでつないでしまって、サーバーの動きが確認できなくなってしまいました。

ubuntuuser@z390:~$ wget http://astherier.com/test/
--2020-08-21 21:07:39--  http://astherier.com/test/
astherier.com (astherier.com) をDNSに問いあわせています... 153.126.182.165
astherier.com (astherier.com)|153.126.182.165|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 301 Moved Permanently
場所: https://astherier.com/test/ [続く]
--2020-08-21 21:07:39--  https://astherier.com/test/
astherier.com (astherier.com)|153.126.182.165|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 404 Not Found
2020-08-21 21:07:39 エラー 404: Not Found。

ubuntuuser@z390:~$ wget http://astherier.com/test/
URL transformed to HTTPS due to an HSTS policy
--2020-08-21 21:07:40--  https://astherier.com/test/
astherier.com (astherier.com) をDNSに問いあわせています... 153.126.182.165
astherier.com (astherier.com)|153.126.182.165|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 404 Not Found
2020-08-21 21:07:40 エラー 404: Not Found。

これは、サーバー側で設定しているHSTSレスポンスに従った動きになります。

HSTSとは

HSTS(HTTP Strict Transport Security)とは、サーバーから返すHTTPレスポンスヘッダーに「次回からSSL/TLS接続してくれ」という情報をつけてブラウザに連絡する仕組みです。これを受け取ったブラウザは、HSTSの情報を取っておき、次回以降そのサイトに接続しようとしたとき必ずSSLで接続します。

wgetもHSTSレスポンスヘッダーに従って動作します。なので、前述のような「初回はhttpで接続、2回目以降はhttpsで接続」という動きをしました。

wgetでHSTSを一時的に無効にする

一時的に無効にするのは簡単で、–no-hstsオプションをつけるだけです。上の続きで実行しても、HSTS情報を無視してhttp(非SSL)で接続してくれます。

ubuntuuser@z390:~$ wget http://astherier.com/test/ --no-hsts
--2020-08-21 21:11:35--  http://astherier.com/test/
astherier.com (astherier.com) をDNSに問いあわせています... 153.126.182.165
astherier.com (astherier.com)|153.126.182.165|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 301 Moved Permanently
場所: https://astherier.com/test/ [続く]
--2020-08-21 21:11:35--  https://astherier.com/test/
astherier.com (astherier.com)|153.126.182.165|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 404 Not Found
2020-08-21 21:11:35 エラー 404: Not Found。

HSTSの情報は~/.wget-hstsにあります

wgetは、HSTSレスポンスヘッダーを受け取ったら、その情報を~/.wget-hstsに保存します。

なので、今までのHSTS情報をすべて消したいなら、このファイルを削除すればOKです。また、あるサイトだけHSTSの情報を消したいなら、このファイルの該当行を削除して保存すればOKです。

ubuntuuser@z390:~$ cat ~/.wget-hsts
# HSTS 1.0 Known Hosts database for GNU Wget.
# Edit at your own risk.
# <hostname>    <port>  <incl. subdomains>      <created>       <max-age>
astherier.com   0       0       1598011660      63072000