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

社内の全環境をhttpsにした話

Morix
October 28, 2017

 社内の全環境をhttpsにした話

Created by Shota Omori(@morix1500)
2017-10-28 Rakuten Technology Conference LT

Morix

October 28, 2017
Tweet

More Decks by Morix

Other Decks in Technology

Transcript

  1. 社内の全環境をhttpsにした話
    2017.10.28
    Rakuten Technology Conference
    @morix1500

    View Slide

  2. じこしょうかい
    ・大森翔太(@morix1500)
    ・株式会社モブキャスト
    ・インフラエンジニア
    ・技術ブログやってます!
     https://blog.haramishio.xyz/

    View Slide

  3. あじぇんだ
    ・Let's Encryptについて
    ・社内の全環境をhttpsにしたはなし

    View Slide

  4. みなさん、
    https対応してますか?

    View Slide

  5. 高まるhttps対応の波
    引用元: https://transparencyreport.google.com/https/overview?hl=ja

    View Slide

  6. httpsじゃないとサービス提供できない時代に
    ・AppleのATS(App Transport Security)
     ⇒ そもそも通信ができなくなる
    ・Chrome62からhttpページで警告が出るように
     ⇒ サイトの信頼性が下がる

    View Slide

  7. でも…
    ・証明書って金かかるじゃん?
    ・なんか発行とかだるそう
    ・うーんどうしよう

    View Slide

  8. View Slide

  9. Let's Encryptとは
    ・無料で発行できるSSL証明書
    ・httpsの普及を目的として作られた
    ・名だたるスポンサーたち
     ⇒ Mozilla/Akamai/Cisco/Chrome etc...

    View Slide

  10. Let's Encryptの特徴
    ・無料
    ・発行/更新が自動で行える
    ・証明書の有効期限は3ヶ月

    View Slide

  11. 証明書の発行の仕方(例)
    # 発行
    $ certbot certonly --webroot -w /var/www/html -d example.jp
    # 更新
    $ certbot renew

    View Slide

  12. 全開発環境の
    https対応と運用の
    自動化を行った!

    View Slide

  13. 要件
    ・開発環境なのでWebサーバーは外部からアクセス不可
    ・1プロジェクトにつき20個くらいドメインある
    ・そのプロジェクトは何個もある
    ・プロジェクトごとにネットワーク(アカウント)が分かれている

    View Slide

  14. 採用した方法(アーキテクチャ)
    Jenkins
    S3
    Route53
    EC2
    1.証明書リクエスト
    2.ワンタイムトークン登録
    3.ワンタイムトークン確認
    4.証明書発行
    5.証明書配置
    6.証明書ダウンロード

    View Slide

  15. 実装
    ・LEクライアント
     lego(https://github.com/xenolf/lego)
    ・LE認証方式
     DNS-01: 対象ドメインのサブドメインに指定の文字列をTXTレコードに登録しそれ
    で認証を行うこと

    View Slide

  16. LEの制限
    ・同一ドメインの証明書発行は1週間に20個まで!
     ・下記はすべて同一ドメイン
      example.com
      sand.example.com
      api1.sand.example.com
      api2.sand.example.com

    View Slide

  17. サブドメインがたくさんある場合は
    ・SANs(Subject Alternative Names)を使用する
     1つの証明書で複数のドメインが対応できる
     example.com.crt
      -> example.com
      -> sand.example.com
      -> api1.sand.example.com
      -> api2.sand.example.com
    1つの証明書が
    いろんなドメインで使
    いまわせる!

    View Slide

  18. この仕組みの限界ドメイン数
    ・SANsの上限は100ドメインまで
    ・週に20個まで証明書発行が可能
    ・証明書の期限が3ヶ月
    ・100 * 20 * 12(week) = 24,000ドメインまで行ける!

    View Slide

  19. この仕組みのいいところ
    ・DNS認証なのでサーバーのIP制限を気にしなくていい
    ・発行と更新が同じ仕組みなので、
     クライアントは証明書をダウンロードするだけでいい
    ・Jenkinsに発行/更新を集約しているので
     更新スケジュールをコントロールしやすい

    View Slide

  20. まとめ
    ・証明書はLet’s Encryptでさくっと作れる
    ・証明書の発行/更新は自動化できる
    ・大量のサブドメインがある場合はSANsで対応

    View Slide

  21. ワイルドカード来るってよ

    View Slide

  22. Let’s
    Start https!!

    View Slide