なかなか楽にならないSSL/TLS証明書の話

 なかなか楽にならないSSL/TLS証明書の話

73c174b34dafaea64f2824eb008a6559?s=128

Tatsuro Shibamura

October 26, 2018
Tweet

Transcript

  1. なかなか楽にならない 証明書の話 @shibayan NoOps Meetup Tokyo #2 SSL/TLS

  2. はじめに • @shibayan • https://shibayan.jp/ • Microsoft MVP for Azure

    • 最近はプロ無職
  3. No "Uncomfortable" Ops • SSL/TLS 証明書の管理、凄くしんどくないですか? • 特殊な知識は必要ないので、割と誰でもできる • 12

    ヵ月に 1 回ぐらいの作業 • 認証局からのメールで期限を思い出したり • スパムフォルダに入ったりして気が付かないことも • 非常に重要で、簡単な作業なのに、自動化があまりされてない • と感じています、個人的には
  4. 証明書発行の流れ (DV) • 認証局に作成した CSR を投げる • ドメインの所有を確認する • Whois

    に登録されているメールアドレスにリンク送信 • 指定されたファイルをサーバーに置く • DNS で指定されたレコードを追加 • 証明書が発行される • 中間証明書と一緒にサーバーに配置したり、PFX にしたり
  5. 自動化されない理由 • 地味に自動化が難しい手順ばかり • CSR の作成、ドメイン所有の確認、証明書と秘密鍵の配置 • 証明書の期限は大体 12 ヵ月

    • 手動でも何とかなってしまう雰囲気が出ている • そもそも認証局が自動化前提の作りになっていない
  6. 更新を忘れてしまうと • 当然ながら SSL/TLS 通信は上手くいかない • 証明書の検証に失敗するのでブラウザが警告画面を表示 • ブラウザ以外の通信でも同様 •

    最近は常時 SSL や HSTS の流れによって致命傷に • http から https へのリダイレクトは一般的 • HSTS を使ってると有効期間内は強制的に https になってしまう
  7. 更新に失敗した例 • Windows Azure、11時間にわたる全世界的なストレージ障害。 原因はSSL証明書の失効 • https://www.publickey1.jp/blog/13/windows_azure11ssl.html • 致命的な問題に発展するのに、なかなか楽にならない

  8. 楽にしようとする動き • クラウドベンダーが認証局を持つ • AWS Certificate Manager • 外部の認証局とパートナーシップを結んでいる •

    Azure Key Vault / App Service Certificate • Let’s Encrypt を利用している / ACME プロトコルの導入 • GCP の Managed SSL など数多くの例
  9. AWS Certificate Manager • ELB / ALB / CloudFront /

    API Gateway で使える • パブリック向けの場合 • ワイルドカード証明書も発行できる • 自動的に証明書の更新を行ってくれる • ドメインが利用中かつ SSL/TLS で外部からアクセス可能な場合 • 無料で使える!
  10. Azure Key Vault • DigiCert と GlobalSign と連携している • 予めサインアップしてアカウント情報を追加しておく

    • 事前に指定したポリシーに従って更新してくれる • 自己署名証明書の発行も出来る • 使いどころは微妙… • 恐らく有料 • 試す気にすらならない…
  11. App Service Certificate は特殊 • GoDaddy と連携している (なぜ…) • Azure

    Portal から購入出来る • 証明書と秘密鍵は Key Vault に格納される • 自動で更新もしてくれる (自動で課金される) • もちろん有料 • 1 ドメイン $69.99 / ワイルドカード $299.99
  12. Let’s Encrypt • ACME プロトコルに基づいた自動での証明書発行 • 公式の certbot を使って管理可能 •

    v2 からはワイルドカードでの発行も出来る • HTTP か DNS を利用してドメイン所有の確認 • 最近のパブリッククラウドでは Managed DNS は当たり前の機能 • 無料で使える!
  13. ACME プロトコルについて • 認証局が証明書発行に必要な機能を定義している • REST ベースのシンプルな API • クライアントも世の中にはたくさんあるので簡単

    • 対象のドメイン全てに対して HTTP か DNS で確認される • 特殊なファイル、もしくは TXT レコードを書き込む
  14. certbot が使えるケース • nginx や Apache を直接公開している場合に使える • Let’s Encrypt

    公式クライアントなので安心 • 各クラウドベンダーの Managed DNS 対応 (ただし Azure 除く) • 基本は Linux のみサポート • Windows 向け PR も上がっているようだが…
  15. 余談 : キーの管理について • 最近のパブリッククラウドではキー管理 / HSM は以下略 • HSM

    = Hardware Security Module • AWS は KMS / CloudHSM • GCP は Cloud KMS / Cloud HSM • Azure は Key Vault
  16. 所感 • AWS Certificate Manager が突出して便利 • EC2 に付けれないけど、普通は LB

    / CF 挟むでしょう • Let’s Encrypt 周りを面倒見てくれる Managed SSL 良さ • ワイルドカードのサポートが入れば嬉しい • Azure は無料で使える SSL 証明書がない • 何でだ… • しかも GoDaddy でも結構高い
  17. Azure と Let’s Encrypt の歴史

  18. 我慢できず自分で作った人たち • Web Apps 専用 • https://github.com/sjkp/letsencrypt-siteextension • App Service

    向け • https://github.com/shibayan/azure-appservice-letsencrypt • Key Vault 向け • https://github.com/shibayan/azure-keyvault-letsencrypt
  19. まとめ • SSL/TLS 証明書の管理は自動化出来る • DV 証明書の場合に限る、OV / EV は難しそうではある

    • AWS なら ACM、GCP なら Managed SSL を使う • 大体は LB にアタッチできれば問題ないでしょう • Azure はお金を払うか、コミュニティ作成の Issuer を使う • Let’s Encrypt に最大限の感謝を
  20. おまけ : Key Vault は割と便利 • SSL/TLS 証明書に特化した機能あり • Azure

    の各サービスは Key Vault に格納されたキーを使える • 今のところは App Service / Application Gateway / Front Door • ひっそりと CSR 作成機能もある • 認証局から貰った証明書をマージして完成形に出来る • キーは安全に格納したまま発行できる