何かの文学作品みたいなタイトルですが以下のような流れ
クライアント側がリクエストを送ると最初にサーバー側で一番安全なプロトコルと暗号スイートそれぞれ決める。(だいぶ前ですがこちらで export というかなり脆弱性に問題が有る暗号スイートを指定してクライアント側、サーバー側でその暗号スイートを使って相手のサーバーに侵入するといった攻撃があったようななかったような)
その後サーバーからSSL証明書と公開鍵とルート証明書と中間証明書を渡してクライアントに渡しデータをやり取りするための共通鍵を添付し、かつ中間証明書やらと参照して信頼できるか確認。サーバーへと返すその際に添付した共通鍵は暗号化されその暗号化されたデータを受け取ったサーバーは秘密鍵で復号してもとの共通鍵になったところでクライアントと通信する。
ルート証明書 ┗クロスルート証明書 ┗中間CA証明書 ┗サーバ証明書
以下の形になる。
クライアント側は上から順に確認して最終的にサーバー証明書を受け取って共通鍵を生成してサーバーに送り途中で暗号化されてサーバーに届きサーバーは秘密鍵で復号という流れ。
openssl s_client -connect とかコマンドを叩くと
depth=3 C = IE, O = Baltimore, OU = CyberTrust, CN = Baltimore CyberTrust Root verify return:1 depth=2 O = "Cybertrust, Inc", CN = Cybertrust Global Root verify return:1 depth=1 C = JP, O = "Cybertrust Japan Co., Ltd.", CN = Cybertrust Japan EV CA G2 verify return:1 depth=0 jurisdictionC = JP, serialNumber = 000000000000, businessCategory = Private Organization, C = JP, ST = Tokyo, L = hogeeeeee, O = "hogeeeeeeeeee", CN = hogeeeeeee verify return:1 --- Certificate chain 0 s:/jurisdictionC=JP/serialNumber=000000000/businessCategory=Private Organization/C=JP/ST=Tokyo/L=hogeeee/O=hogeeee Co.,Ltd/CN=hogeeeeeee i:/C=JP/O=Cybertrust Japan Co., Ltd./CN=Cybertrust Japan EV CA G2 1 s:/C=JP/O=Cybertrust Japan Co., Ltd./CN=Cybertrust Japan EV CA G2 i:/O=Cybertrust, Inc/CN=Cybertrust Global Root 2 s:/O=Cybertrust, Inc/CN=Cybertrust Global Root i:/C=IE/O=Baltimore/OU=CyberTrust/CN=Baltimore CyberTrust Root --- Server certificate -----BEGIN CERTIFICATE-----
みたいな形で出力されるが depth は階層でそれぞれの証明書の情報がのっている クライアント側はおそらく depth3 depth2 depth1 depth0 と言うかたちでどんどん情報を取得していく
そのあとの Certificate chain は 証明書の情報 s がその証明書そのもの情報 i が受け渡し先?
Server certificate は サーバー証明書
つまり
depth3 は ルート証明書
depth2 は中間証明書
depth1 はクロスルート証明書
depth0 はサーバー証明書
だと思います。