QiitaをHTTPS化しました
こんにちは、 tomoasleep です。ハイカラスクエアではシャケを狩るバイトに明け暮れています。
Qiita はリリース時からユーザーの認証などに関わる一部のページを除き HTTP を使って配信してきましたが、この度全ページを HTTPS 化しました。実施の背景やユーザーの皆さんへの影響などを簡単に解説します。
なお本ブログ記事は Qiita に関してのお知らせであり、Qiita:Team はリリース時より一貫して HTTPS を使っています。
HTTPS とは
インターネットは世界中の様々なネットワークを接続して作られています。そのためインターネットには常に経路上での盗聴や通信情報の改ざんなどの脅威が存在します。
HTTPS を利用することにより、それらを防ぐことが出来るようになります。
(HTTPS に関する技術的で詳しい解説は Qiita にたくさんあるのでそちらを参照してしてみてください💁)
セキュリティ以外の HTTPS 対応の必要性
近年はセキュリティ以外の観点からも HTTPS 化の重要性が増してきています。
- Service Worker や HTTP/21 などの最新の Web 関連技術の多くは、 HTTPS を利用することを前提とするようになっています。
- Chrome の将来のバージョンでは HTTP のサイトにアクセスするだけで警告が表示されるようになります。警告が表示されるページを普通は開きません。
- Google は HTTPS に対応している Web サイトを検索ランキングで優遇する方針を発表しています。
このような背景から Qiita も HTTPS 化を行うことになりました。
HTTPS 化の影響
今回の HTTPS 化に伴い以下のような影響・仕様変更があります。
- facebook の like 数がリセットされます
- 認証が必要な画像が使えなくなります
1. facebook の like 数がリセットされます
2017-09-29 時点で Qiita ではいくつかのサービスのシェアボタンを設置していますが、それぞれ以下のような影響があります:
サービス | 影響 |
---|---|
like が 0 にリセットされます | |
はてなブックマーク | 一時的に ブックマーク数が 0 にリセットされます |
なし | |
Google plus | なし |
なし |
今回の HTTPS 化に伴い facebook の like 数が全て 0 にリセットされます。なぜリセットされてしまうかというと、 facebook やはてなブックマークが URL のスキーマを考慮する仕様となっているためです。HTTPS 化されると各ページの URL のスキーマが http から https に変更されます。そのため HTTPS 化前後で別の記事と解釈されてしまうためカウントがリセットされてしまいます。
また一時的にはてなブックマーク数も 0 にリセットされていますが、はてなブックマークに関しては、はてなさんに移行して頂く予定です。移行が完了するまでの間ブックマーク数が少なく表示されてしまいますが、ご理解のほどよろしくお願いいたします。
なお Pocket はスキーマを考慮せず、 Twitter と Google Plus はシェア数が表示されません。
2. 認証が必要な画像が使えなくなります
Qiita では記事などの一部のページにユーザーの皆さんが選んだ画像を自由に埋め込むことができます。その際、 HTTP で配信されている画像を埋め込むこともできるのですが、 HTTPS のページに HTTP の画像があると Mixed Content と呼ばれる状態となってしまいます。
Mixed Content を避けるため、ユーザーの皆さんが埋め込んだ画像を全て自社で用意したプロキシ・サーバーを経由するようにしました。そのため認証が必要な画像だった場合以下のように振る舞いが変わります:
- Before: ブラウザから直接画像にアクセスしていたため、ブラウザに認証情報を持たせておけば自分だけが見れる画像を Qiita で使うことができた
- After: プロキシが画像にアクセスできないので、認証情報を持ったブラウザでも表示することができない
また画像のサイズが非常に大きい場合、プロキシの制限に引っかかって表示できません。ご了承ください。
おわりに
QiitaのHTTPS化はひとまず完了しましたが、HSTS (HTTP Strict Transport Security)や、 CookieのSecure化、このブログのHTTPS化 など、より安全に使っていただくための課題がまだまだあります🍊
Qiitaでは今後とも、ユーザーの皆さまがより安全により安心して利用できるための施策を行っていきますのでよろしくお願いします。
- 正確には HTTP/2 は仕様として HTTPS は必要としませんが、インターネットを介した通信で用いるには HTTPS が現実的に不可欠となります。 ↩