TLSを実装してみたい
OGSP Seismometerの話なんですが、高速化のために、OGSP Server Nodeに対してはUDPで送信していきます。このとき、暗号化は何もありません。傍聴されてしまった場合、トークンなどが流出して信頼性のある通信を維持できなくなる可能性があります。
ハンドシェイクってこんなもんかな
Client Server
| -- randomA,signing_way-----> |
| <--- signed(randomA),cert -- |
| -- client_pubkey,randomB --> |
| <--- server_pubkey,sig(randomB) |
ECDHで共通鍵生成 ECDHで共通鍵生成
|<========= 共通鍵で暗号化された通信 ========>|
- クライアント→サーバー (Client Hello) ランダムな値と要求する暗号化の方法を送信する。
- クライアント←サーバー (Server Hello) 受け取ったランダムな値を、サーバー側の秘密鍵で署名して返す。同時に証明書も送信する。
- クライアント→サーバー クライアントの公開鍵と別のランダムな値を送信する。
- クライアント←サーバー サーバーの公開鍵と、ランダムな値を秘密鍵で署名したものを返す。
- 双方 ECDHで共通鍵を生成
- 暗号化した通信をする!