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

幅広い環境でSSL対応するために知っておくべきこと

mashijp
February 07, 2020

 幅広い環境でSSL対応するために知っておくべきこと

- SSL関連の障害がなぜ起きてしまうのか?
- 何で対応端末が変わるのか
- 何をすれば障害を防げるのか?
- SSL対応するためにどういう体制を組んでいたらいいのか?

おことわり: 社内向け勉強会のスライドを再編集したものです。社外向けに割愛した結果、ちぐはぐになっている部分があります。

mashijp

February 07, 2020
Tweet

More Decks by mashijp

Other Decks in Technology

Transcript

  1. 何が対応端末を左右するのか
 • 技術的な話 ◦ 証明書の種類 (RSA/ECDSA) ◦ TLSのバージョン Cipher Suite

    (暗号通信のやり方) ◦ SNI • 人間的な話 ◦ ルート証明書 (証明書の調達先) ググったら出てくる
  2. TLSのネゴシエーション概要
 TLS(SSL)のネゴシエーション で、通信先の認証と暗号通信 のやり方の決定が行われる Client Server サーバ証明書, TLS Version, Cipher

    Suite 決定 接続開始要求 TLS Version, 対応Cipher Suites 一覧 暗号鍵交換 交換した鍵で暗号通信 (例: HTTP) (共通鍵暗号... AESなど) ネゴシエーション TLS HTTP IP, TCP
  3. https://www.google.com/ にアクセスするときの例
 クライアント(ブラウザ)から見ると… 1. www.google.com をDNS解決する 2. (1) の IPアドレスに対し

    TLSネゴシエーション要求 3. サーバからSSLサーバ証明書が送られてくる a. “*.google.com” を名乗るサーバ証明書が来る 4. 接続しようとしているのは www.google.com で証明書と一致 しているので OK
  4. SNI拡張
 • 接続要求時にホスト名を送信する 拡張仕様 • サーバはホスト名がわかるので適 切な証明書を送ることができる IPアドレスを節約できる サーバ 証明書1

    *.aaa.example 証明書2 *.bbb.example クライアント 接続要求 + ホスト名 ホスト名に あった証 明書を送 る ただし拡張のため対応していない環境があることに注意 (例: Android 2.3未満, 旧バージョンのScala Play WSなど) 意外と対応していないクライアントは多い
  5. TLSバージョン
 • TLS1.0, 1.1 はオワコンにさせようという動きがある • が、気にせず TLS1.0〜1.2 をサポートしていたら良い ◦

    中間者により低いバージョンを使わせる攻撃を回避する拡張がある (TLS_FALLBACK_SCSV) ◦ 極めて秘匿性の高い情報をやり取りする場合は別途検討 • TLS1.2 only にすると Android 4.xの一部等がサポート外に なる可能性がある ◦ あくまで 1.0, 1.1 は deprecated な扱いで運用する
  6. Cipher Suite を決める上で注意すること
 • 低セキュリティなものしか対応していないパターン ◦ 古い環境など ◦ 例: Windows

    XP IE8, Java7, ... • 高セキュリティなものしか対応していないパターン ◦ 意識が高い環境など ◦ 例: Apple ATS (iOS)
  7. 高セキュリティなものしか対応していないケース
 • Apple は秘匿性の高いCipher Suiteでしか通信させないよう にしている (ATS: App Transfer Security)

    ◦ ECDHE という鍵交換方式のサポートを必須としている • 「低セキュリティなものを追加してはいけない」というわけでは ない https://developer.apple.com/jp/security/
  8. Cipher Suite の選定基準
 • Cipher Suite はサーバ側で優先度を決められる • サーバ負荷の問題ない範囲で、高セキュリティなものを優先 度高く設定

    • 脆弱と言われているアルゴリズムは外す ◦ 時代によって変わる… • 広いデバイスに対応するなら、たくさん設定する
  9. 結局何を設定したらいいの?
 
 • Google で採用している Cipher Suite を基準にする • Google

    はかなり広い環境に対応するような Cipher Suite を 設定している • よく考えると広い環境に対応しないといけないのは大体 Google が悪い気がするし一番 Google が困ってる ◦ Android のあらゆるバージョンが世の中にはびこっているため
  10. RSA/ECDSA証明書
 • デジタル署名を実現するアルゴリズムが違う ◦ 環境によっては ECDSA のほうがサーバ負荷が少なかったりする • RSAに対応していない環境はない (たぶん)

    • ECDSAを選択するならそれなりの覚悟で選ぶ ◦ RSA証明書も同時に調達し、2つ設定するなどの対応が必要 ◦ 周りは誰も助けてくれません • 詳しくないなら絶対に RSA を選択する
  11. SSL証明書の構造 (信頼チェーン)
 GlobalSign Root CA GlobalSign Organization Validation CA サーバ証明書

    署名 この組み合わせをクライアント(ブラ ウザ等)に送信する 署名 ブラウザは GlobalSign Root CA を信 頼している ので サーバ証明書を信用す る
  12. 環境によってプリインストール内容は異なる
 ルート証明書をプリインストールするかしないかはそれぞれのOS/ ブラウザベンダーが独自のポリシーで判断している ルート証明書の例 Windows 10 macOS 10.13 Android 4.x

    Android 5.x Baltimore CyberTrust Root ◦ ◦ ◦ ◦ Cybertrust Global Root ◦ ☓ ◦ ◦ DigiCert Global Root CA ◦ ◦ ◦ ◦ Security Communication RootCA1 ◦ ◦ ◦ ◦ GlobalSign Root CA1 ◦ ◦ ◦ ◦ GlobalSign Root CA5 ◦ ◦ ☓ ◦
  13. ルート証明書は当たり前のように変わる
 なぜ? • 計算能力の向上や暗号技術の進化 ◦ 例) SHA-1 の危殆化、SHA-256 への移行 ◦

    例) RSA 1024bit の危殆化 ◦ 例) ECDSA の導入 • ルート認証局が信頼できなくなった • 鍵の危殆化防止 • 業界内でのいざこざ ルート証明書は長期に渡り入れ替わっていくことを前提としている。 永久に利用できるルート証明書は存在しない。
  14. ルート証明書のインストール状況
 親切なところはリストを公開している • List of available trusted root certificates in

    iOS 13, iPadOS 13, macOS 10.15, watchOS 6, and tvOS 13 - Apple Support : https://support.apple.com/en-us/HT210770 • Microsoft : https://ccadb-public.secure.force.com/microsoft/IncludedCACertificateReportForMSFT • EZwebブラウザに搭載されているルート証明書 https://www.au.com/ezfactory/web/
  15. A社の証明書
 サーバ証明書 中間: A社の中間証明書 ルート: A社のルート証明書 サーバ証明書 サーバ証明書 A 社の管理

    自社でルート証明書および秘密鍵を保持 しており、自社でサーバ証明書を発行する
  16. B社の証明書
 サーバ証明書 中間: B社の中間証明書 ルート: C社の証明書 サーバ証明書 サーバ証明書 C社 (他社)

    の管理 B社の管理 B社は自身で中間証明書と秘密鍵を持っており、 自身のシステムで証明書を発行できる。 ただしルート証明書はC社が持っている
  17. Google社の証明書
 サーバ証明書 中間: GTS CA 1O1 ルート: GlobalSign Root CA

    (R2) サーバ証明書 サーバ証明書 Google 社の管理 (Google Trust Services) 自社でルート証明書および秘密鍵を保持しており、自社でサーバ証明書を発行する GlobalSign社からルート証明書を買収しサービス開始を実現 Google、自社向けのルート認証局「 Google Trust Services」を開設 -INTERNET Watch : https://internet.watch.impress.co.jp/docs/news/1041198.html
  18. SSLの「正しい設定」とは
 • 正しく設定しているか ◦ 中間証明書を設定しているかどうか ◦ 脆弱性がある設定になっていないか • 非対応端末が発生していないか ◦

    ルート証明書をサポートしているか ▪ 必要に応じてクロスルート証明書を設定しているか ◦ TLS Version, Cipher Suiteをサポートしているか → 1端末で動作確認をしても意味がない
  19. どうしてこうなったか
 環境 ルート対応 自動解決 (推測) 表示結果 macOS Chrome No Yes

    → NG macOS Firefox Yes No → NG Windows Chrome Yes Yes → OK Windows Firefox Yes No → NG ルート Windows/Firefoxのみ対応ルート サーバ サーバ証明書 中間 中間証明書 ルート 全環境サポートルート 署名 署名 署名 (クロスルート)
  20. SSL Labs
 • 網羅的に確認可能 ◦ 脆弱性 ◦ 動作環境 • セキュリティレベルを「レー

    ティング」という形でわかりや すく提供 ◦ 時代にあわせてレーティングが 変わる
  21. なんのためにSSL化するのか
 • 機密性のある情報をやりとりするため? ◦ 漏れたときのリスクは? • ブラウザ/業界の圧力に対応するため? ◦ httpsでないと使えない拡張が増えてきたから? •

    ユーザーイメージのため? ◦ まだhttpsでないと笑われるから? 総合的に考えてちょうどいい塩梅を探す (面倒ならGoogleをパクろう)
  22. SSLLabs / testssl.sh の注意点
 • ルート証明書の確認は「最新環境」でしかなされない ◦ “Trusted: Apple” となっていても古い環境で信頼されていないケース

    も (例: https://good.r1demo.pki.goog/ ) • 逆にいうと 1個でも Not OK がある場合、ヤバい ルート証明書をサポートしているかは 対応したい環境で個別に確認するしかない
  23. Appendix: 中間証明書の存在理由 (2)
 
 ルート証明書 有効期限: 〜20年 中間証明書 有効期限: 〜10年

    サーバ証明書 有効期限: 〜2年 署名 署名 サーバ証明書の利用者が管理 ルート証明書の 秘密鍵 中間証明書の 秘密鍵 サーバ証明書の 秘密鍵 オフラインで保管する 極めて厳重に管理 (インターネットに接続した環境に置かない ) 証明書発行事業者のシステム内に管理 Web上でSSL証明書を発行できるようにする
  24. Appendix: サーバ負荷 (1)
 チップの特性によって負荷傾向が大きく異なるため一概に言えない • 例: あるCPUでは性能は RSA < ECDSA

    となった • 例: ハードウェアロードバランサに高性能RSA処理チップを搭 載しているため、性能は RSA > ECDSA となった 試験をしない限り明確なことは言えない