質問: SSL_new( ctx ); SSL_set_fd( ssl, s ); SSL_use_certificate_file( ssl, "public.key", SSL_FILETYPE_PEM ); SSL_use_PrivateKey_file( ssl, "private.key", SSL_FILETYPE_PEM ); // SSL_accept(ssl); char msg[64]; SSL_read( ssl, msg, sizeof(msg) ); // SSL_shutdown(ssl); SSL_free(ssl); SSL_CTX_free(ctx); ``` iso参照モデルの各層には入らない、「その間」などという表現は正しいのでしょうか?? **もしかして、正確にはSSLとTLSは層が違うかも?? → だからSSL/TLSはあやふや?** と思いましたが・・・ 分かる方、教えてください。 > > [追記] > > > maisumakunさんとikedasさんの回答を参考に追記します。 お2人とも「ISO参照モデルが現在主流のTCP/IPのモデルとは厳密には対応していない」ということをおっしゃっております。 では、SSL/TSLは、「TCP/IPの現在のモデル」ではアプリケーション層、トランスポート層、またはその間、 となりそうですが、どうでしょう? こちらも「正確にはどの層とも言えない」のでしょうか??
回答: 実は、**インターネットはOSIの7階層モデルに準拠していません**。RFC 1122で定義しているのは、次のような4層モデルです。 * アプリケーション層 (いろいろなサービスのプロトコル)。 * トランスポート層 (TCP、UDPなど)。 * インターネット層 (IP、ICMP、IPv6など)。 * リンク層 (ARP、PPPなど)。 OSIで言うと、「アプリケーション層」はだいたいセッション層から上 (5-7層) に、「インターネット層」はネットワーク層 (第3層) に、「リンク層」はデータリンク層 (第2層) に対応しているという意見もあります (他にも諸説あります)。物理層 (第1層) にあたるものは、「リンク層」に含まれていると言う人もいますし、インターネットでは物理層は特に定義されていないと言う人もいます。しかしこういった議論は純粋に理論上の考察にすぎず、**本当は、インターネットとOSI参照モデルは関係ない**というのが正しいです。 ウィキペディアの「TCP/IP参照モデル」の記事では、次のようにまとめています。 > > これまでIETFはインターネット・プロトコル・スタックを RFC 1122 で定義された4層から変更した事はない。IETFは7層からなるOSI参照モデルに従うような試みはせず、また標準化過程 (Standards Track) にあるプロトコル仕様やその他の構造上の文書をOSI参照モデルに対して参照する事もしない。 > > > HTTPも、DHCP、DNSなども、インターネットでは全部「アプリケーション層」に含まれます。SSL/TLSもアプリケーション層にありますが、その中でHTTPなどの他のプロトコルよりは下の層に位置しています。OSIほど層が細かく区別されてはいません。 ですから、質問の正解は「層」でしょう。それ以外の答えはすべて不正解だと思います。 ただ、多くの教科書などでは、インターネットのプロトコルをOSIの7階層に対応づけて説明しようとしますね。厳密さを求めた結果としてそうなっているのでしょうが、あくまでも参考程度に見ておけばいいです。 コメントのご指摘を受けて、あらためてRFCを読み直してみました。 ※なお、以下で「アプリケーション層」「トランスポート層」という用語は、OSIモデルの意味ではなくインターネットでの意味で使われています。 > > (...) The protocol is composed of two layers: the TLS Record Protocol and the TLS Handshake Protocol. At the lowest level, layered on top of some reliable transport protocol (e.g., TCP [TCP]), is the TLS Record Protocol. (...) > > (...) > > The TLS Record Protocol is used for encapsulation of various higher-level protocols. One such encapsulated 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. (...) > > > -- RFC 5246: The Transport Layer Security (TLS) Protocol Version 1.2. §1. Introduction. > > > (試訳) > > (...) このプロトコル〔TLS 1.2〕は二つの層から成る。TLSレコード・プロトコルとTLSハンドシェーク・プロトコルである。最下部は、何らかの適切なトランスポート〔層〕プロトコル (例えばTCP/IP) の上の層である、TLSレコード・プロトコルである。(...) > > (...) > > TLSレコード・プロトコルは、様々な上位レベルのプロトコルをカプセル化する。そのようなプロトコルの一つ、TLSハンドシェーク・プロトコルは、アプリケーション〔層〕プロトコルがデータの最初のバイトを送信または受信をする前に、サーバとクライアントが互いを認証できるように、また暗号化アルゴリズムと暗号鍵の折衝をできるようにする。(...) > > > つまり、上から * アプリケーション層 * TLSハンドシェーク・プロトコル * TLSレコード・プロトコル * トランスポート層 というふうに重なっています。そして、TLSレコード・プロトコルは「適切なトランスポート〔層〕プロトコル (例えばTCP/IP) の上の層」だと言っているので、**TLSは最上位のアプリケーション層に属する**ように思います。 あるいは、**アプリケーション層にもトランスポート層にも属さない**かです。TLSの次のバージョンであるTLS 1.3のドラフトでは、「何らかの適切なトランスポート〔層〕プロトコル (例えばTCP/IP) の上の層」といった表現がなくなっています。一方で、「TLSはアプリケーション〔層〕プロトコルとは独立している」(TLS is application protocol independent) という表現は1.2のまま残っています (draft-ietf-tls-tls13-18)。つまり、もともと他のプロトコルから独立しているので、どちらに属するかを考えても意味がない、ということなのかもしれません。 長くてすみません。