Upgrade to Pro — share decks privately, control downloads, hide ads and more …

その「s」を付けるために 〜はてなブログHTTPS化の軌跡〜 / Rejectcon 2018

papix
September 29, 2018

その「s」を付けるために 〜はてなブログHTTPS化の軌跡〜 / Rejectcon 2018

papix

September 29, 2018
Tweet

More Decks by papix

Other Decks in Technology

Transcript

  1. papix 株式会社はてな アプリケーションエンジニア (2017年2月~) ブログMediaチーム サービスリード 「はてなブログ」をつくっています アカウント類 はてな: id:papix

    Twitter: @__papix__ GitHub: papix CPAN: PAPIX ブログ: https://papix.hatena(blog.(com|jp)|diary.jp)/ 趣味はPerlと, (交通機関を利用した)旅行 去年JGC修行(JAL)を完遂しました(年間53搭乗/40,573km) 来年はいよいよSFC修行(ANA)をします
  2. はてなブログとHTTPS化 ~ここまでの流れ~ 2017年9月25日 ... 告知 http://staff.hatenablog.com/entry/2017/09/25/143000 2017年11月20日 ... 管理画面HTTPS化完了 (第1フェイズ)

    http://staff.hatenablog.com/entry/2017/11/20/175000 2018年2月22日 ... はてな提供ドメインブログのHTTPS化完了 (第2 フェイズ) http://staff.hatenablog.com/entry/2018/02/22/150000 2018年6月13日 ... 独自ドメインブログのHTTPS化完了 (第3フェイ ズ) http://staff.hatenablog.com/entry/2018/06/13/160000
  3. 今日話すこと 第1部: 激闘! Mixed Contents!! 第1フェイズ~第2フェイズの出来事 主にMixed Contents対応を中心に... 第2部: 組み上げろ!

    証明書自動発行システム!! 第3フェイズの出来事 Let's Encryptを活用した証明書取得の仕組みについて
  4. なぜHTTPS化が必要か より安全にはてなブログを活用して頂くため 「はてなブログMedia」という企業向けの展開も行っているため セキュリティ強化は重要 HTTPSが前提となる技術スタックの登場 Progressive Web Apps, Service Worker...

    HTTPS化推進の波 様々な企業/団体がWebサイトのHTTPS化を推進している Let's Encryptもその流れの中で登場してきた Chromeでは, HTTPの場合に警告が出るようになっている
  5. UGCサービス UGC = User Generated Content サービスの利用者がコンテンツを生み出すサービス ブログの場合, サービスの利用者(はてなブロガー)が記事という コンテンツを"生み出す"

    はてなブログはUGCプラットフォームとして"自由度"が高い HTMLで自由にブログをデザイン出来る, ブログの記事の中に も自由にHTMLを記述出来る
  6. Mixed Contentsを回避するには? しかし, 単純に http://... を https://... に置換するだけでは いけない 当然ながら,

    そのコンテンツがHTTPSで配信されていなければ 意味がない! 従って... 機械的に/自動的に解決するのは難しい(埋め込むことが出来る コンテンツの種類が増えれば増えるほど) コンテンツごとに作戦を建てて, 丁寧に取り組んでいく必要が ある
  7. 方針 まずは, はてなブログが公式に提供する機能で埋め込んだコンテン ツによって, Mixed Contentsが発生しない状態を目指す(Mixed Contents対策) 写真(Fotolife/Google Photo), はてなブログで書いた過去記事,

    他のはてなブログの記事の引用, Amazon, 楽天, YouTube, Twitter, Instagram, はてなブックマーク, ニコニコ動画, pixiv, iTunes, Evernote, ぐるなび/食べログ, Gist, Flickr, 絵, ミイル... 他にも, ユーザーが入力したはてな記法によって展開され, 埋め 込まれるコンテンツも存在する
  8. 開発環境のHTTPS化 まずは開発者の環境もHTTPS化しておきたい 出来れば手元でもHTTPSで確認したい 開発環境はHTTPで本番環境はHTTPSだと, 意図せぬMixed Contentsを埋め込んでしまうかもしれない... 今回は, Docker + Nginx

    + いわゆるオレオレ証明書で解決 ちょうどHTTPS化の作業が始まる前に, 開発環境のDocker化 を推進していた アプリケーションの前にNginxのコンテナを立てて, 開発環境 もHTTP/HTTPSの両方に対応
  9. 余談: Let's Encryptへの貢献 Let's Encryptは, Internet Security Research Group(ISRG)という非 営利団体によって運営されている

    このような仕組みを無料で提供するISRGに経緯を評し, 寄付も 実施した http://developer.hatenastaff.com/entry/2018/06/04/14 0000 毎年, 継続して寄付の活動を続けていきます
  10. 証明書取得の技術選定 AWS Certificate Manager はてなブログはAWSで構築されているので, AWSのフルマネー ジドサービスで対応出来ないか検討 AWS Certificate Managerで取得した証明書は,

    ELBに紐 づけて利用することが出来る 結果としては, 今回のオーダー(数万単位のブログ)では用途に適 さないことが判明し, 断念
  11. 証明書取得の技術選定 自前実装 こうなってくると, 自前で仕組みを作るしかなさそうという結 論に至る 証明書の取得だけでなく, 更新(Let's Encryptの証明書は3 ヶ月で有効期限が切れる)も考慮しないとけない Step

    Functionsを軸に, LambdaやDynamoDBなど, AWSのフ ルマネージドサービスをフル活用して実装することを計画 Lambdaで動かすコードは, 公式に対応されたGo言語を活用す ることに決定 チームメイトの言語習熟度や, 社内においてMackerelなど でGoが使われていることも後押しとなった
  12. 証明書配信の技術選定 AWS Certificate Managerが利用出来れば取得だけでなく配信も担 えたが, これは断念 SAN Subject Alternative Names,

    1つの証明書で複数のドメインを 紐付ける仕組み Let's EncryptでSANを使う場合, ACME challenge(証明書発行 のための認証)は, 現時点ではdns‑01のみが利用可能 dns‑01の認証ではDNSの設定が必要であり, はてなブログ ではドメインのDNS設定は各ユーザーに委ねなければな らないので, 自動化が困難 また, そもそもとしてLet's EncryptのSANでは, 1つの証明書あ たり100ドメインまでしか含めることができない 結果としては, 証明書配信についても自前実装することを決意
  13. 実装 第3フェイズは, 2つのフェイズに分けて作業を進めた 第3フェイズα ... 証明書の取得/配信の仕組みを作る 第3フェイズβ ... 構築した証明書の取得/配信の仕組みと, 既存

    のはてなブログを繋ぎこむ 前述の通り, プロトタイプ実装の成果もあって, 第3フェイズαについ ては見積もりどおり終わった 第3フェイズβについては, 予定よりも少し伸びてしまった とはいえ, 第3フェイズ開始前の予定から大きく後ろに伸びるこ とはなかった
  14. まとめ ほぼ1年をかけて, はてなブログのHTTPS化を成し遂げることができ た これほどの規模で, 長期間のプロジェクトに携わったことはな かったので, 良い経験になった 第3フェイズの中で, Go言語やAWSの各種フルマネージドサービス

    といった, 新しい知見を得ることができて良かった また, それぞれのフェイズでサービスダウンやデータロストと いった大規模な障害なくリリースを終えることが出来たのも自 信になった 様々な条件がある中で, それらを満たしつつ, サービスをHTTPSする 良い実装が作れたと思う