0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

社内プロキシに悩むしがないエンジニアがSSL/TLSをちゃんとわかるようになるために備忘を書く

Last updated at Posted at 2024-12-27

目的

  • 何となく証明書だのSSL/TLS通信だのに触れていて、ちゃんと仕組みがわかっているか怪しいので備忘としてアウトプット
  • 社内環境がプロキシとの戦いなので、必須知識かもしれない

記事の概要

  • サーバはどうやって証明書を手にするのか
  • SSL/TLS通信の信頼性担保(SSLハンドシェイク)はどのように実現するのか

内容

SSL/TLS通信の概要

  • SSL/TLSはTLSハンドシェイクによる信頼性担保、および暗号化された通信路の確保を指す
  • HTTPをSSL/TLSで暗号化したものがHTTPSで、SSL/TLSとHTTPSは厳密には異なる概念
  • サーバ(通信を受ける側)は認証局にまともだと認められた証である証明書を持っている
  • クライアント(通信を送信する側)はその証明書の内容を見て、送信先サーバがまともかどうかを検証する

サーバはどうやって証明書を手にするのか

まずサーバは秘密鍵を作る
image.png

その対となる公開鍵情報を含む証明書を認証局に作ってもらうための依頼書を作る
image.png

依頼書を認証局に送る。やがて証明書が返される
image.png

準備OK
image.png

SSL/TLS通信はどうやって確立されるのか

まずクライアントからClient Helloという通信がサーバ向けに発せられる。これにはクライアントが対応可能な通信方式を記載している。
image.png

Client Helloを元にサーバは通信方式を決定し、Server Helloで決定された通信方式を共有する。
image.png

続けてCertificateで証明書をクライアントに見せる。
image.png

クライアントはどの認証局を信じるかリストを持っていて、それを元に証明書を検証。OKだったらここでハンドシェイク成立。ハンドシェイク成立後、クライアントがランダムでセッション鍵を作る。これは後段で通信自体の暗号化で使われる。
image.png

セッション鍵をサーバの公開鍵で暗号化し、サーバに送る。
image.png

サーバは秘密鍵でセッション鍵を復号。
image.png

双方のセッション鍵を元に通信自体を暗号化できる状態になる。この状態を持って「SSL終端」。HTTPS通信などはこの暗号化された通信路で実施される(厳密にはHTTPS以外にもSSL/TLSで暗号化される)
image.png

Appendix

  • 証明書チェーン、mTLS通信、EV-SSL証明書についても気が向いたら書くかも
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?