TLSを実装してみたい

OGSP Seismometerの話なんですが、高速化のために、OGSP Server Nodeに対してはUDPで送信していきます。このとき、暗号化は何もありません。傍聴されてしまった場合、トークンなどが流出して信頼性のある通信を維持できなくなる可能性があります。

ハンドシェイクってこんなもんかな

Client                                Server
  |      -- randomA,signing_way----->     |
  |      <--- signed(randomA),cert --     |
  |      -- client_pubkey,randomB -->     |
  |      <--- server_pubkey,sig(randomB)  |
ECDHで共通鍵生成                  ECDHで共通鍵生成
  |<========= 共通鍵で暗号化された通信 ========>|
  1. クライアント→サーバー (Client Hello) ランダムな値と要求する暗号化の方法を送信する。
  2. クライアント←サーバー (Server Hello) 受け取ったランダムな値を、サーバー側の秘密鍵で署名して返す。同時に証明書も送信する。
  3. クライアント→サーバー クライアントの公開鍵と別のランダムな値を送信する。
  4. クライアント←サーバー サーバーの公開鍵と、ランダムな値を秘密鍵で署名したものを返す。
  5. 双方 ECDHで共通鍵を生成
  6. 暗号化した通信をする!