Stack OverflowがデフォルトでHTTPSに

StackOverflowのアーキテクチャリードであるNick Craver氏はブログでStackOverflowがHTTPSへ移行したことを発表した。多くのドメインのサポート、URLの移行、ユーザーが作成したコンテンツ、厳しい性能要件を満たすことなど、移行には技術的な課題があった。

この移行は全体で4年かかった。しかし氏は、この移行は常に最優先であり続けたわけではない、と言う。例えば、StackOverflowにはお金に関わる情報はない。また、クレジットカード支払いもない。サイト上の情報は安全にするほど価値あるわけではない。氏によれば、StackOverflowは安全性よりも性能を常に優先してきた。

私たちを駆動する第一の要因は性能です。サイトのセキュリティではありません。セキュリティを確保したいとは思います。しかし、私たちの状況ではセキュリティだけでは、ネットワーク全体をHTTPSにするのに時間を投資することを正当化するには不十分なのです。

氏の説明によれば、HTTPSへの移行の動機はHTTP/2の普及とその性能のメリットだ。HTTP/2にはリクエスト/レスポンスの多重化サーバプッシュ, ヘッダ圧縮ストリーム優先度オリジンへのコネクションが少ないなど、性能上の利点がある。ブラウザがHTTPでのHTTP/2をサポートしないため、HTTPSはセキュリティ要件であると同時に性能要件にもなった。

StackOverflowは数百のドメインとサブドメインがある。サイトのメインの証明書はStackOverflowの全てのプライマリのドメインとワイルドカードを含むようになった。これによって、ブラウザが複数のドメインに一つのコネクションでアクセスできるようになり性能上の利点が生まれた。これは証明書とIPが一致した場合に実現するHTTP/2の仕組みだ。

移行しなければならないドメインもあった。例えば、"meta"ドメインは"meta.*.stackexchange.com"から"*.meta.stackexchange.com"へ移行した。氏によれば、これはワイルドカードをドメインの左端に寄せる必要があったからだ。また、このようにして一つのワイルドカードにした方がメンテナンスしやすい。

また、注意する必要があるクッキーについてはトップレベルのドメインから引き継ぐようにした。それらのクッキーにアクセスするべきではないドメインは移動した。例えば、SendGridは、現在"stackoverflow.email"で稼働している。

また、氏はユーザーが作成したHTTPのコンテンツが大量にあることを示した。質問の画像や、ユーザーのプロファイル、Youtubeの動画などだ。移行のために、まずは、新しいコンテンツはHTTPSになるように強制した。これによって、古いコンテンツだけがHTTPになった。次に既存のコンテンツの移動だ。コンテンツの大多数は単純に見つかりリプレイスできた。よくわからないコンテンツがあったら、HTTPSに変換し、それでうまくいかなかったらリンクに置き換えた。

JavascriptにもHTTPを前提にしているコードや、異なる"meta"ドメインを前提としているコードがあった。氏は、これらのコードを逐一調べ、"<site>.Url(‘/path’)"という呼び出しに変えたと説明した。こうすることで機能フラグを有効にすれば、いつでもHTTPSに動的に切り替えられるようにしたのだ。

また、Googleからの流入を失わないことがとても重要だった。トラフィックの大半がGoogleからの流入であり、そこから利益が生まれているからだ。Googleの要求ははっきりしたものだった(HTTPからHTTPSは301。そして、canonicalリンクを更新する)が、チームは細心の注意を払う必要があった。

移行の最終パートはウェブソケットだ。全てをセキュアなウェブソケットに変えた。機能的ににはそのままで性能を落とさないようにする必要があった。氏によれば、同時に50万のウェブソケットのコネクションが張られることもある。

このブログはとても長文だが、読む価値はあるだろう。