【OSI 参照モデル レイヤ5 セッション層】SSL/TLS とは

本記事は、以下の書籍を元に OSI 参照モデルレイヤ5 セッション層について説明します。

最もおすすめの書籍

有名な書籍

前者2つよりも難易度が高め

OSI 参照モデルやその他のレイヤの解説については以下の記事をご確認ください。

スポンサーリンク

セッション層とは

セッション層とは、セッション(通信の開始から終了までに行う、複数の通信を1つにまとめたもの)を管理する層です。

セッションの具体例を挙げると以下のとおりです。

セッション開始セッション中セッション終了同一性
マイページログインマイページの閲覧ログアウト同じセッション ID を持つクライアントは同じユーザーと見なす(毎回ログインしなくてよい)
暗号化通信共通鍵交換後暗号化通信共通鍵の有効期限同じ TLS セッション(同じ共通鍵を持つ)クライアントは同じユーザーと見なす(毎回共通鍵を交換しなくてよい)

セッション層と TCP/IP との対応

OSI 参照モデルのセッション層」に対応する「TCP/IP の層」は存在しません [1]。

The application layer of the Internet suite essentially combines the functions of the top two layers -- Presentation and Application -- of the OSI reference model.

[1] https://datatracker.ietf.org/doc/html/rfc1122

セッション機能は、「TCP/IP のトランスポート層 or アプリケーション層のプロトコル」もしくは「アプリケーション自体の機能」で実装されています。

セッション機能を実装する TCP/IPプロトコルの一例として、SSL/TLS プロトコルがありますが、これは以下の層にまたがっています。

モデルSSL/TLS プロトコルの対応する層層を跨ぐ処理
OSI 参照モデルトランスポート層セッション層の間 [2]TLS コネクション
TLS セッション
TCP/IPアプリケーション層トランスポート層の間 [3]TLS Handshake Protocol
TLS Record Protocol [3]

TLSは多くの場合、コネクション型のトランスポート層プロトコル(通常はTCP)とアプリケーション層の間で使われる。

[2] https://ja.wikipedia.org/wiki/Transport_Layer_Security

At the lowest level, layered on top of some reliable transport protocol (e.g., TCP [TCP]), is the TLS Record Protocol.
(中略)
the TLS Handshake Protocol, allows the server and client to authenticate each other and to negotiate an encryption algorithm and cryptographic keys before the application protocol transmits or receives its first byte of data.

[3] https://datatracker.ietf.org/doc/html/rfc5246
スポンサーリンク

SSL/TLS プロトコルとは

SSL(Secure Sockets Layer)/TLS(Transport Layer Security) プロトコルとは、主にアプリケーション層プロトコルを暗号化するために使用するプロトコルです。

なお、TLS は SSL の新しいバージョンのことです(TLS 1.0 は SSL 3.1 のことです。)

SSL/TLS とアプリケーション層のプロトコルの組み合わせ

SSLと組み合わせたプロトコルポート番号元のプロトコルポート番号
HTTPS443HTTP80
SMTPS465SMTP25
LDAPS636LDAP389
FTPS (data)989FTP (data)20
FTPS (control)990FTP (control)21
IMAPS993IMAP143
POP3S995POP3110

SSL/TLS ハンドシェイク

SSL/TLS ハンドシェイクは、アプリケーション層プロトコルが暗号化通信を開始するために、SSL/TLS コネクションを確立することです。

なお、SSL/TLS ハンドシェイクは、3way ハンドシェイクの(TCP コネクションが確立した)後に実施します。

クライアントサーバ備考
HelloRequestClientHello を要求
ClientHello以下を送信
TLSのバージョン
・乱数
・セッションID
・暗号方式
・ハッシュアルゴリズムのリスト(cipher_suites)
・圧縮方法
ServerHelloClient Hello から利用する cipher_suites 等を選ぶ
ServerCertificateサーバーの公開鍵と証明書
ServerKeyExchange鍵交換プロトコルに依存
anonymous Diffie-Hellman であれば、gx mod p (サーバーの秘密鍵で暗号した共通値)を送信
CertificateRequestClientCertificate を要求
ServerHelloDoneサーバ側からのメッセージ送信が終わった事を示す
ClientCertificateクライアントの公開鍵と証明書
ClientKeyExchange鍵交換プロトコルに依存
anonymous Diffie-Hellman であれば、gy mod p(クライアントの秘密鍵で暗号した共通値)を送信
CertificateVerifyクライアントが署名能力を持っていることを証明するために、全メッセージに対し、共有されたmaster secret で署名
ChangeCipherSpec暗号通信に移行
Finished暗号文
ChangeCipherSpec暗号通信に移行
Finished暗号文
アプリケーション層のデータ通信アプリケーション層のデータ通信暗号文
https://ja.wikipedia.org/wiki/Transport_Layer_Security
https://qiita.com/n-i-e/items/41673fd16d7bd1189a29

TLS 証明書、公開鍵、秘密鍵の詳細については、以下の記事をご覧ください。

スポンサーリンク

TLS セッションとは

SSL/TLS におけるセッションとは、複数の SSL/TLS コネクションを1つに束ねたものです。
SSL/TLS セッションが確立されている限り、別の SSL/TLS コネクションで共通鍵を使い回すことができます。

https://milestone-of-se.nesuke.com/wp-content/uploads/2019/05/connection-session-3.png.webp

上記のように1つの TLS セッションでは、複数(1つ以上)の TLS コネクションが存在します。

同じ TLS セッションであれば、別の TLS コネクションであっても、前回の共通鍵を使い回すことが可能です。

HTTP セッションとは

HTTP プロトコル自体にセッション機能は実装されていません。
HTTP におけるセッションとは、アプリケーション側でセッション ID を管理することでクライアントの状態(ログイン済みや買い物かごの情報など)を覚えておくことです。

HTTP を用いたアプリケーションでは、一般的にセッション ID として cookie を利用することでセッションを管理します。

https://milestone-of-se.nesuke.com/nw-basic/as-nw-engineer/connection-and-session/

セッション管理の詳細については、以下の記事をご覧ください。

Cookieとセッションをちゃんと理解する - Qiita
#引用/参考書籍「よくわかるPHPの教科書」「初めてのPHP5」「パーフェクトPHP」「体系的に学ぶ安全なWebアプリケーションの作り方」「PHPスーパーサンプル」「プロになるためのWe…

その他のレイヤについて

OSI 参照モデルの5層目のセッション層に関する説明は以上となります。

他のレイヤについては以下をご覧ください。

参考資料・おすすめの書籍

最もおすすめの書籍

有名な書籍

前者2つよりも難易度が高め

3 Minutes Networking
ネットワークエンジニアとして
ネットワークエンジニアに必要なネットワーク技術とCisco・Juniper・F5製品の技術解説。NWエンジニアの仕事内容や年収を紹介。ネットワークスペシャリスト、CCNA/CCNP/CCIEの情報発信。