LINEヤフー Tech Blog

LINEヤフー株式会社のサービスを支える、技術・開発文化を発信しています。

20万以上のSSL証明書の有効期限を見える化した話

こんにちは。LINEヤフーのSSL Admin、Inoue と Kuji です。

旧 LINE株式会社が管轄していたネットワークには 数十万もの TLS Endpoints があり、数多くの SSL/TLS 証明書(以下「証明書」)が利用されています。この記事では、そのうち約 20 万の TLS Endpoints が提供している証明書の有効期限を可視化した取り組みを紹介します。

  • この記事に書いてあること
    • 証明書の可視化を行うまでのストーリー
    • 証明書の可視化によって生じた効果
    • 今後の展望
  • この記事に書いていないこと
    • プログラムの具体的な実装

今回紹介するツール(開発したもの)

ValidCertWatch

ValidCertWatchは社内のあらゆるWeb siteの証明書情報を一目で確認できるツールです。UIはこのようなイメージで、証明書を利用しているFQDNの一覧や、FQDNに適用されている証明書の確認を行うことができます。

  • 証明書に紐付くFQDNの一覧を表示するUI
    証明書に紐付くFQDNの一覧を表示するUI
  • FQDNに対して適用されている証明書を表示するUI
    FQDNに対して適用されている証明書を表示するUI

ValidCertWatchでできること

  • 証明書の更新状況の見える化
    • 各FQDNに対して適用している証明書の情報を表示
      • ステータス(healthy: 有効期限が1カ月以上ある / expire-soon: 1カ月以内に有効期限が切れる / expired: 有効期限切れ)
      • 有効期限(Not After) / 残日数
        • ちなみに、画像にある赤い文字は毎秒カウントダウンされており期限切れの緊張感を呼び起こします
      • 発行者(Issuer)
      • などなど....
  • 証明書の利用状況のウォッチ
    • 証明書ごとの利用状況・更新率の集計・表示
      • 証明書の更新時期に、証明書の更新状況(更新率)を把握することが可能
      • どこで、どのような証明書が利用されているかを把握することが可能

なぜ開発しようと思ったのか?

証明書の利用状況を可視化する以前、私たちは証明書の発行や更新の作業にのみ注力していました。さまざまなサービスで利用されている証明書の状態、有効期限、妥当性などのチェックは行っておらず、管理は基本的にサービスの開発者に任せていました。そのため、問題が発生してから対応するというリアクティブな方法を取ることがほとんどでした。各サービスが使用する証明書は開発者が管理するのが原則ですが、期限切れになってしまえば後手の対応をするしかありません。たとえ担当者に通知をしていても、配置転換やチーム内の連携不足で年に数回はそういう問題が発生します。そのため重要な証明書の更新時期には私たちも緊張していました。

サービスの可用性につながるプロアクティブなアクションを考えた結果、TLS Endpoint が持つ証明書の状態をリアルタイムに提供することで喜ばれるのでは、というアイデアが生まれました。そのようなサービスがあれば、「どのFQDNがまだ古い証明書なのか」をすぐに把握できそうです。これまでの通知では、受信者が見過ごすだけで障害につながっていました。関連するサービスの更新状況を可視化すれば、「そっちのサービスまだだけど大丈夫?」というコミュニケーションを生み出すことができそうです。LINEといえばコミュニケーションを生み出すツールです。これは良さそう。やってみましょう!

開発してどうなったのか?

ValidCertWatchの開発によって、証明書の更新状況が一目でわかるようになり、更新率という指標を用いて開発者に更新を促すことが可能になりました。「*.example.com がもうすぐ失効するので更新してください。」よりも、「*.example.com の更新率は〇〇%です。」と伝える方が興味を持たれます。実際に社内のSlackでエゴサーチを行った結果、嬉しいことに証明書の更新率に関する投稿をいくつか発見しました。これらの投稿が多くの人の目に留まり、更新漏れを防ぐことができれば本望です。

さらに、最新の更新状況が日々確認できるようになったことで、失効日前夜や当日の精神的な負担が大きく軽減されました。失効日の前日までに証明書の更新が行われていることを確認できるようになり、私たちは安心して深い眠りにつけるようになりました。SSL Adminにとって、これが一番のメリットかもしれません。

ValidCertWatchの仕組みの紹介

システムの全体像

今回紹介するツールを含めたシステムの全体像です。

システム全体図

既存ツール "Scanner" の活用

見える化に必要な情報は、社内の TLS Endpoint すべてにアクセスしなければ得られません。それには FQDN の一覧と、そこにアクセスする何かが必要です。ネットワークスキャンを行うので、攻撃者からの不審なアクセスと勘違いさせることがないよう、セキュリティ部門に話も通しておかなければなりません。そういった仕様を満たすツールがすでに存在していたので、われわれはそこに機能を追加して迅速なリリースを目指すことにしました。

「Scanner」は証明書の期限を通知するツールです。LINE 系サービスの DNS に登録されているすべての FQDN(A/CNAMEレコード)に対して証明書の検証を行い、有効期限が近いサービスの開発者へ Slack またはメール通知を行います。われわれは Scanner を改修し、収集した情報(証明書期限、利用可能なTLSバージョン、通知結果など)を Elasticsearch に格納するようにしました。このツールは膨大な数の endpoint にリクエストを送信しますが、TLS Handshake を試みるだけで HTTP request は送信しないため、サービスの Web server log を汚さないのがいいところです。

Scannerの構成図

実際に収集したデータを Kibana で可視化すると素晴らしいダッシュボードが完成しました。1カ月後に大量の申請が来る、といったことが一目でわかるダッシュボードです。公開できるのは一部ですが、このような情報を取得しています。

あるエリアのTLS endpoint scan 解析結果
あるエリアのTLS endpoint scan 解析結果
あるサービスの証明書期限の分布
あるサービスの証明書期限の分布
あるサービスで発生しているTLS Handshake エラーの内訳
あるサービスで発生しているTLS Handshake エラーの内訳

Web serverの設定ミスなども検出しており、開発者にとっても有用なデータであることをわれわれは確信しました。SSL Adminにとっては、過去の特定時点の状態を振り返ることができるようになったことも収穫でした。これは証明書に関するサポートや、「この時点でこの問題は気づけたね」といった改善プロセスに役立っています。PoC は大成功でした。

さっそくこのデータを公開しようとしましたが、課題がありました。

データを公開できない!

Scanner はもともと Viewer を持たないサービスだったため、PoCとしてデータを可視化するにあたり Elasticsearch + Kibana を利用しました。しかし、社内 Platform の制限により Kibana を公開できない課題がありました。Kibana の検索は少しコツが必要なので、たとえ公開できたとしても宝の持ち腐れになる可能性があります。そこで、誰もが簡単に検索を行えるツール「ValidCertWatch」を公開し、データを広く活用してもらうことを計画しました。

ValidCertWatch

Scannerで収集した情報を、幅広い方々に手軽に活用してもらうために「ValidCertWatch」を開発しました。

このツールは、Elasticsearch にある FQDN と証明書の情報を見やすい Web サイトとして提供します。同じ証明書を使う FQDN の一覧や、FQDN が利用中の証明書を簡単に把握できます。さらに、有効期限が切れそうな FQDN には証明書の更新方法を案内します。証明書の購買管理システムとも連携し、「新しい証明書は買われていますが、まだサーバに適用されていません」といったガイドも表示できるようにしました。これにより問い合わせ件数の削減が期待でき、開発者と SSL Admin 私たち双方の工数削減にも貢献しています。

ValidCertWatchの構成図

ValidCertWatch の活用

これらのツールを開発したことにより、いくつかの副次的効果も生まれました。

  • 誤った証明書を適用している FQDN が検知できる
    • 証明書の検証エラーを通知し、是正を促す
      • e.g.
        • 想定している証明書 とは異なる FQDN でも到達できる hostname mismatch エラー
        • 中間証明書を設置していない unable to get local issuer certificate エラー
        • 証明書が壊れていたり、 protocol の設定が不適切なエラー
  • すべての TLS Endpoint のルート、中間、リーフ証明書を把握できる
    • CA が誤った証明書を発行することは避けられないリスク
    • ある中間証明書に問題が見つかった場合でも、ValidCertWatch を使えば即座に影響ある FQDN のリストを Web で提供できる
    • たとえば秘密鍵の漏えいがあった場合、即座に影響がある FQDN を特定可能
  • 長期間放置されている DNS レコード / Server のお掃除
    • 証明書が更新されず放置されている Server の開発者に対して、何度も証明書有効期限切れの通知が飛ぶ
    • 不必要な DNS レコード / Server を消してもらうきっかけになっている
  • 営業時間外 (土日祝や夜間帯) に期限が切れる証明書を把握可能になった
    • 営業時間外に証明書が失効する FQDN に対し、事前に注意を促せる
    • 初動の遅れを防止し、原因調査をすぐ終わらせられる

終わりとこれから

ValidCertWatch は証明書期限の可視化を目的として開発されましたが、いざ使ってみると多数のリスクを防ぎ、問題発生時の初動を早めることがわかりました。CA が不適切な証明書を発行する、秘密鍵が漏洩するなどの致命的な事象が発生した時に、影響を受ける FQDN を即座に特定できるようになりました。また、 ValidCertWatch はエンジニア間のコミュニケーションをさらに加速させることもわかりました。あそこのサービスがまだ更新していないから声をかけておこう、といった会話を見かけるとほっこりします。

ここで紹介した ValidCertWatch と Scanner はLINE系サービスの FQDN に対応していますが、ヤフー系サービスの FQDN には未対応です。もとヤフー株式会社側だったメンバーに協力してもらい、LINEヤフー全社への適用を目指して開発を進めています。伸びしろしかありません。

ちなみに、このツールはとくに誰かから指示を受けて開発したわけではありません。私たち自身が必要だと感じ、ユーザーにも喜ばれると信じて開発しました。証明書に関係する話だと、以前に「SSL証明書の購買を自動化した話」という記事も書いていますので、よろしければこちらもご覧ください。こういった挑戦に寛容な文化は弊社の強みですね。今後もこの文化を大切にしながら新しい挑戦を続けていきたいと思います。

そして最後に。私たちと共に働いていただける仲間を現在募集しています。この記事をお読みになり、私たちの業務に興味をお持ちいただけた方は、ぜひ下記の採用情報をご覧ください!

バックエンドエンジニア / インフラ管理基盤|LINEヤフー株式会社

ではでは。Happy TLS, Happy Life!

Name:Inoue Naoya

Description:主にLINE系サービスで使われているインフラ(サーバ)周りの面倒をみています。最近トレーニングジムに通い始めました。取り戻せ、健康的な体を!

Name:Kuji Yasunori

Description:LINEとヤフーの証明書周りを統合するプロジェクトを立ち上げてリードしてます。ルービックキューブで15秒を切るのが夢です。