Blog Article
HTTPSのSSL / TLSハンドジェイクの仕組みについて
SSL/TLSハンドシェイクについて
SSL/TLSハンドシェイクは、セキュアな通信を確立するためのプロトコルであり、通信の暗号化、データの完全性、および通信相手の認証を確保するために使用されます。「盗聴」「改ざん」「なりすまし」といったWebサイトを利用するときの危険性を防止することが可能であり、主にウェブブラウザとウェブサーバー、またはクライアントとサーバー間の通信において利用されます。
HTTPSでの通信を開始するには、大きく分けて4つのフェーズのやりとりを行う必要があります。
1. 暗号化方式の決定
暗号方式は多数存在するため、クライアントとサーバーの両方が暗号化方式を決める必要があります。この段階では暗号化方式の決定の他、HTTPで利用されるSSL、TLSのバージョンや改ざん防止で利用される「メッセージダイジェスト」の方式も決定します。
クライアントハロー (ClientHello)
クライアントはサーバーに対して、SSL/TLS接続を確立するためのリクエストとして「ClientHello」メッセージを送信します。このメッセージには、クライアントがサポートするSSL/TLSバージョン、暗号アルゴリズム、およびランダムなデータが含まれます。
サーバーハロー (ServerHello)
サーバーはクライアントの「ClientHello」メッセージを受け取り、それに対して「ServerHello」メッセージを返します。このメッセージには、サーバーが選択したSSL/TLSバージョン、暗号アルゴリズム、およびランダムなデータが含まれます。
2. 通信相手の証明
このフェーズではWebブラウザが通信しているサーバーが間違っていないかをSSLサーバー証明書による確認を行います。Webサーバーが間違っていた場合、Webブラウザに警告が表示されます。
Sever Certificate
SSL/TLS通信においてサーバーの身元を確認し、通信を暗号化するためのデジタル証明書です。サーバー証明書は、信頼できる第三者である証明書機関(Certification Authority, CA)によって署名され、サーバーの公開鍵とサーバーの情報(ドメイン名や組織名など)を含んでいます。
Server Hello Done
"Server Hello Done"は、SSL/TLSプロトコルのハンドシェイクフェーズの一部で、サーバーがクライアントに対してハンドシェイクが完了したことを通知するメッセージです。
3. 鍵の交換
データ転送に利用する「鍵」を交換を行います。鍵はデータを転送時の暗号化、及び暗号化されたデータの複合時に利用されます。
Client Key Exchange(クライアント キー エクスチェンジ)
クライアントが生成した共通鍵を、サーバーの公開鍵で暗号化してサーバーに送信する。これにより、サーバーがクライアントの共通鍵を受け取ります。
4. 暗号方式の確認
暗号方式の確認作業を行います。
"Server Hello Done" メッセージが送信された後、クライアントも同様に通信の準備が整ったことを示す "Client Finished" メッセージを送信し、通信がセキュアになります。これにより、SSL/TLSハンドシェイクが完了し、セキュアな通信が確立されます。