とあるWebサービスを使っていたら急にエラーになりました。バグったかなと思って、一度ログアウトして再ログインしようとすると、ブラウザがエラーになります。「危険な通信が発生するからアクセスするな・・云々」と表示されています。
うちは自前のルーターでLAN(ネットワーク)を構築しているのですが、その中のどのPCからアクセスしても同様です。ブラウザを変えても同様にダメです。
試しにスマホをWi-Fiから切り離して4G通信にして、エラーになったWebサービスにアクセスしてみます。こちらは普通に使えます。。。という事はうちのLAN環境に問題がある確率maxです。
もう一度エラー画面を良く見てみると、暗号化通信に使うSSL/TLSの証明書のエラーが出ています。「アクセスする予定のサーバとは別のサーバの証明書が来ましたよ、だから危険!」ということです。ははぁ、なるほど。。。
何が起きているか素人なりに説明してみましょう。
インターネット上の機械同士が通信するためには、住所みたいなものが必要で、それにはIPアドレスという数字が使われます。今あなたがアクセスしているこのWebサーバにも、皆さんのPCやスマホにもIPアドレスが割り当てられています。しかし数字の羅列は人間には覚えにくいです。「当社のホームページは “192.168.0.1”です」とかより「当社のホームページは”example.com”です」と言いたいじゃないですか。この”example.com”をホスト名と呼びます。
しかし機械同士の通信にはIPアドレスを用いますので、ホスト名をIPアドレスに変換する仕組みが必要です。それがDNSです。インターネット上ではWebサーバだけじゃなくて、DNSサーバさんも影でこっそり(いや猛烈に)働いているのです。
あなたがブラウザに”example.com”と打ち込んでエイヤーっとやると、あなたのPCはお抱えのDNSサーバさんに「おーい”example.com”のIPアドレス教えてくれやー」と聞きに行きます。聞かれたDNSサーバは更に上位のDNSサーバに聞きに行きます。そのうち”example.com”のIPアドレスを知っているDNSサーバさんから「それは”192.168.0.1″でっせー」と答えが返ってきます。お抱えDNSサーバさんから答えを聞いたあなたのPCは、ようやく”example.com”のWebサイトを閲覧しにいくための通信を始めます。
お抱えDNSサーバさんは、ちょっと健気でありまして「もう一度同じこと聞かれるかもしれないから、しばらく答えを覚えておいたろ」と”example.com”のIPアドレスを一定期間キャッシュとして保持します。
うちのお抱えDNSサーバは、ルータさんがやっています。うちの環境のPCから、エラーが起きたWebサーバのIPアドレスを検索すると「XXX.XXX.XXX.XXX」(Xは数字)と返ってきます。しかし、4G接続のスマホから同じことをやると「YYY.YYY.YYY.YYY」と全く別の結果が返ってきます。
つまりホスト名は一緒でも、うちのLAN環境からアクセスすると全く関係の無いサーバにアクセスしに行ってしまうのです。そりゃ証明書エラーも出るわけです。
お抱えDNSサーバのキャッシュがおかしいという事が解ったので、これを忘れさせる必要があります。どうするか? そう、ルータの再起動です。論よりリブート。
はい、無事にアクセスできるようになりました。
しかし、なぜキャッシュがおかしくなったのでしょう。当該Webサービス側にはトラブル情報は出ていないですし、Twitterを見ても障害報告している人はいません。うちのルーターのバグなのか、はたまた外部からの攻撃を食らったのかは定かではありません。ただ、うちのルーターさんはマンションのネットワークに接続されていて、そこはプライベートIPアドレスで構成されているので、インターネットから直接入ってくることはできないんですよね。。。
色々な可能性はあってモヤモヤしますし、SSL/TLSの仕組みとか、証明書とは何ぞやとかも書きたかったけど、とりあえずここまで。
おしまい。