メールとWebのプロトコル

このページでは、SMTP・POP3・IMAP4によるメールの送受信と暗号化、S/MIME、HTTPのメソッドとHTTPS、WebSocket、Cookieの仕組みがわかります。

  • 一言で言うと:
    • メール、Web、住所の自動配布や名前の変換、機器の監視、ファイル転送、インターネット電話など、私たちが実際に使うサービスごとの約束ごと(プロトコル)の話
    • 試験では、プロトコル名と役割、ポート番号の組合せがよく問われる

メール(SMTP・POP3・IMAP4・S/MIME)→ Web(HTTP・HTTPS・WebSocket・Cookie)→ 住所と名前(DHCP・DNS)→ その他(SOAP・SNMP・FTP・SSH・NTP・LDAP)→ 電話(VoIP・SIP・RTP・RSVP)

覚え方の軸

  • メールは「送るのはSMTP、受け取るのはPOP3かIMAP4」
    • POP3は、メールを手元にダウンロードする。IMAP4は、メールをサーバに置いたまま見る
    • 安全にするには、後ろに「S」を付けてTLSと組み合わせる(SMTPS、POP3S、IMAPS)
    • メールの中身の暗号化と署名は、S/MIME(認証局が保証)かPGP(利用者どうしで保証)
  • HTTPは「1回ずつ、聞かれたら答える」
    • 前後の通信を覚えていないので、Cookieで状態を引き継ぐ
    • サーバから自由に送りたい(双方向)ならWebSocket、暗号化したいならHTTPS、HTTPSを強制するならHSTS

メール関連:送る、受け取る、守る(★)

① メールプロトコル

  • メールを配る仕組み:
    • メールを送信・転送するプロトコルSMTPと、メールサーバからメールを受け取るプロトコルPOP3が中心
  • SMTP配送モデル:
    • 送信ノード(SMTPクライアント)は、SMTPで自分のISP AのメールサーバのSMTPサーバプロセスに送る
    • ISP Aのメールサーバは、SMTPで、相手のISP BのメールサーバのSMTPサーバプロセスに転送する
    • ISP Bのメールサーバで、メールをいったん蓄積する
    • 受信ノード(POP3クライアント)は、POP3で、メールサーバのPOP3サーバプロセスに自分から受け取りに行く
  • 使うポート:
    • SMTPはTCP 25番、POP3はTCP 110番
  • SMTPとPOP3の例え:
    • SMTPは、ポストに入れて郵便局どうしで運ぶ仕組み
    • POP3は、郵便局の私書箱に自分で取りに行く仕組み

② メール受信プロトコル

  • POP3の問題:
    • ユーザIDとパスワードで本人を認証する
    • でも、パスワードを平文で送るので、セキュリティ上の問題がある
  • POP3S(POP3 over TLS):
    • POP3に、通信を暗号化するTLSを組み合わせたもの
    • 今は、POP3Sの利用が求められている
  • APOP:
    • 暗号化したパスワードを使うもの
    • でも、すでに脆弱性が見つかっているので、利用は推奨されていない
  • IMAP4:
    • モバイル環境を意識したメール受信プロトコル
    • サーバ側でメールを管理するので、ダウンロードせずに見るだけの(言い換えれば、選んだメールだけをダウンロードできる)プロトコル
    • ただし、メール本文やパスワードを暗号化する機能がない
  • IMAPS(IMAP over TLS):
    • IMAPにTLSを組み合わせたもの
    • 今使われているIMAPのバージョンが4なので、IMAP4Sともいう
  • POP3とIMAP4の例え:
    • POP3は、私書箱から手紙を全部持ち帰る。家のPCには残るが、スマホからは見られない
    • IMAP4は、私書箱に手紙を置いたまま、どこからでも見に行ける。PCでもスマホでも同じ状態で見られる

③ メール関連のプロトコル・規格(★)

プロトコル・規格 中身
SMTP-AUTH SMTPに利用者認証機能を加えたもの。通常のSMTP(TCP 25番)とは別のサブミッションポート(通常TCP 587番)を使って認証し、認証が成功したらメールを受け付ける
POP before SMTP POP3の認証機能を使ったもの。メールを送るときに、POP3でメールの受信を行い、認証が成功した利用者(IPアドレス)に、一定時間だけSMTP接続を許可する
SMTPS(SMTP over TLS) SMTPに、通信を暗号化するTLSを組み合わせたもの
S/MIME MIMEをさらに拡張し、メールの暗号化とデジタル署名(認証)の機能を提供する。メール本文の暗号化に共通鍵を使い、共通鍵の受渡しには認証局(CA)が保証する公開鍵を使う
PGP S/MIMEと同じく、メールの暗号化やデジタル署名の機能を提供する。S/MIMEと違い、公的な認証局を介さず、利用者が利用者を紹介し合う相互認証方式(公開鍵は第三者が保証する)。PGPをベースにRFC 4880として文書化・規格化されたものがOpenPGP
  • MIME:
    • いろいろなデータ(日本語などの2バイト文字や、画像・音声データなど)を、電子メールで扱えるように機能拡張したもの
    • 送信データは、Base64方式などでASCII文字列に変換される
  • Base64方式:
    • バイナリデータを先頭から6ビットごとに区切る
    • 各6ビットを「A〜Z、a〜z、0〜9、+、/」の64文字に対応させ、その文字コードに変換する符号方式
  • S/MIMEとハイブリッド暗号:
    • 本文は共通鍵、共通鍵の受渡しは公開鍵なので、ハイブリッド暗号方式になっている
  • S/MIMEとPGPの例え:
    • S/MIMEは、役所(認証局)が発行した身分証で本人を確かめる
    • PGPは、「この人は私の知り合いで、本物ですよ」と友だちどうしで保証し合う(信頼の輪)
  • SMTP-AUTHとPOP before SMTPの例え:
    • SMTP-AUTHは、手紙を出すたびに窓口で身分証を見せる
    • POP before SMTPは、先に私書箱を開けて(受信の認証)本人とわかったら、しばらくはその場所(IPアドレス)から手紙を出してよい

例題(Base64)

  • 問題:

    • 3バイトのデータをBase64で変換すると、何文字になるか。また、300バイトのデータは何文字になるか
  • 答え:

    • 3バイト = 24ビット。24 ÷ 6 = 4文字
    • 300バイトは、300 ÷ 3 × 4 = 400文字
  • 検算:

    • 400文字 × 6ビット = 2,400ビット = 300バイトで、元に戻る
  • わかること:

    • Base64で変換すると、データ量は約4/3倍(約1.33倍)に増える。メールに添付したファイルが少し大きくなるのはこのため
  • 補足:

    • TLSと組み合わせたプロトコルは、別のポートを使うのが一般的。SMTPSはTCP 465番、POP3SはTCP 995番、IMAPSはTCP 993番
    • 試験では、まず「SMTP 25、POP3 110、IMAP4 143、サブミッションポート 587」を押さえればよい

Web関連:Webの情報をやりとりする(★)

① HTTP

  • HTTP(Hyper Text Transfer Protocol):
    • WebサーバとWebクライアント(ブラウザ)の間で、HTMLなどのWeb情報をやりとりするためのプロトコル
    • Webクライアントが、WebサーバにHTTPリクエストを出すことで通信が始まる
    • Webサーバは、HTTPレスポンス(HTMLデータなど)を返す
  • HTTPのポート:
    • ふつうはTCP 80番
    • 80番以外も使える。例えば、Webサーバのポート番号が8080なら「http://www.example.com:8080/index.html」のように指定する
  • HTTPメソッド:
    • Webサーバに実行してもらいたい操作

HTTPでよく使われるメソッド(★)

メソッド 中身
GET 指定URLのデータを取得する
POST 指定URLにデータを送信する
PUT 指定URLへデータを保存する
DELETE 指定URLのデータを削除する
CONNECT プロキシにトンネリングを要求する
  • HTTPメッセージのフォーマット:
    • 先頭行、HTTPヘッダ、(空行)、HTTPボディの順
    • 先頭行には、リクエストならメソッド、レスポンスならステータスコードが入る
    • 例えば、ページが見つからなかったときのステータスコードは404

GETメソッドとPOSTメソッド

  • GETで情報を送れる理由:
    • GETは本来、情報を取得するときに使う
    • でも、情報を取得するのに必要な引数を送れるようにしているので、情報の送信にも使える
  • GETで情報を送る場合:
    • 情報はクエリストリングに埋め込まれる
    • 例えば「GET /mypage/progA?PID=xx HTTP/1.1」の「?」以降
  • POSTで情報を送る場合:
    • 情報はメッセージのボディに埋め込まれる
  • クエリストリングの危険:
    • クエリストリングはURLの一部(「?」以降)なので、ログとしてサーバやキャッシュに残る可能性がある
    • そこから情報が漏れるリスクがある
    • だから、パスワードなどの大事な情報はPOSTで送る
  • GETとPOSTの例え:
    • GETは、はがき。書いた内容(クエリストリング)が表から見える
    • POSTは、封書。中身(ボディ)は外から見えない

CONNECTメソッド

  • CONNECTメソッド:
    • プロキシサーバを使うHTTPS通信などでよく使われる
  • CONNECTが必要な理由:
    • プロキシサーバは、通信の中身を解釈し、それを組み立て直して中継する
    • でも、HTTPSなどの暗号化通信だと、受け取ったパケットを復号できない
    • そこで、CONNECTメソッドでトンネリングを行い、パケットをいじらずに単に中継することを頼む
  • CONNECTの例え:
    • 中身を確かめて仕分ける係に、「これは封をした荷物なので、開けずにそのまま通して」と頼む

② WebDAV

  • WebDAV:
    • Webサーバ上のファイルの管理ができるように、HTTPを拡張したプロトコル
    • ファイルの作成、変更、削除などには、これまでFTPなどが使われてきた
    • WebDAVを使えば、HTTP/HTTPSだけでファイルを管理できる
    • ファイアウォールを通すプロトコルの削減なども実現できる
  • WebDAVのポート:
    • HTTP/HTTPSで使うポート(80/443)を使う

③ HTTPS(HTTP over TLS)

  • HTTPS:
    • HTTPに、伝送データの暗号化、デジタル署名、認証機能を加えた拡張プロトコル
    • トランスポート層のプロトコルであるTLSを使うことで、IPやアプリケーションの仕組みを変えずに、安全な通信ができる
  • HTTPSのポート:
    • TCP 443番
  • HSTS(HTTP Strict Transport Security):
    • HTTPSと組み合わせて使う技術
    • HSTSを設定したWebサイトに、ブラウザがHTTPでアクセスすると、クライアントに、そのサイトへのアクセスをHTTPSで行うよう指示する
    • これで、暗号化されていないHTTP通信の経路に割り込む中間者攻撃などを防げる
    • 例えば、「うちの店には、必ず裏口ではなく正面玄関(HTTPS)から入ってください」と覚えさせる

④ WebSocket

  • WebSocket:
    • クライアントとWebサーバの間で、双方向通信をするための技術
  • WebSocketの始め方:
    • クライアントからサーバへ、HTTPのGETメソッドで「Upgrade WebSocketリクエスト」を送る
    • サーバがそれに応えて、ハンドシェイクを行うと、HTTPとは違う恒常的なコネクション(WebSocket用の通信路)ができる
    • その後は、HTTPの手順にしばられず、1つのTCPコネクションの上でデータのやりとりができる
  • WebSocketの使い道:
    • チャットアプリケーションのような、ブラウザとWebサーバの間のリアルタイム性の高い双方向通信
  • HTTPの性質:
    • HTTP/1.0では、リクエスト/レスポンスの1組ごとに、個別にTCPコネクションを確立する
    • HTTPは、クライアントの要求にサーバが応えるプル配信が基本。サーバが自分からデータを送るプッシュ配信をする仕様にはなっていない
  • HTTPとWebSocketの例え:
    • HTTPは、手紙のやりとり。こちらが出さないと返事は来ない
    • WebSocketは、電話がつながりっぱなしの状態。どちらからでも、いつでも話せる

Cookie(クッキー)

  • Cookie:
    • Webサーバがクライアントの中に情報を保存しておく(Webサーバとクライアントの間の状態を管理する)ための仕組み
  • Cookieが必要な理由:
    • HTTPは、1回限りの通信をする仕様なので、前後の通信から情報を引き継げない
    • そこで開発されたのがCookie
  • Cookieの仕組み:
    • Webサーバが、保存しておきたい情報を作り、HTTPヘッダを使ってクライアントに送る
    • クライアントは、これをテキストファイルの形で保存し、必要に応じてサーバに送る
  • Cookieの例え:
    • お店の会員カード。店員は客の顔を覚えていないが、カードを見せてもらえば「前回の続き」がわかる。ショッピングサイトのカートの中身やログイン状態が保たれるのはこのため
  • セキュリティとのつながり:
    • Cookieは、シングルサインオン(Cookie型)にも使われる

混同しやすいペア

  • SMTP / POP3
    • SMTPは、メールを送信・転送する(TCP 25)
    • POP3は、メールサーバからメールを受け取る(TCP 110)
  • POP3 / IMAP4
    • POP3は、メールを手元にダウンロードする
    • IMAP4は、サーバ側でメールを管理し、選んだメールだけダウンロードできる
  • POP3S / IMAPS / SMTPS
    • いずれも、TLSを組み合わせて通信を暗号化したもの(受信/受信/送信)
  • APOP / POP3S
    • APOPは、パスワードを暗号化するが、脆弱性があり推奨されない
    • POP3Sは、TLSで通信全体を暗号化する(今はこちらが求められる)
  • SMTP-AUTH / POP before SMTP
    • SMTP-AUTHは、サブミッションポート(TCP 587)で利用者を認証してからメールを受け付ける
    • POP before SMTPは、先にPOP3で認証が成功したIPアドレスに、一定時間だけSMTPを許可する
  • MIME / S/MIME
    • MIMEは、日本語や画像などをメールで扱えるようにする拡張(Base64で変換)
    • S/MIMEは、MIMEにメールの暗号化とデジタル署名の機能を加えたもの
  • S/MIME / PGP
    • S/MIMEは、認証局(CA)が公開鍵を保証する
    • PGPは、公的な認証局を介さず、利用者どうしが紹介し合う相互認証方式(規格化したものがOpenPGP)
  • GET / POST
    • GETは、データの取得。情報を送るとクエリストリング(URLの「?」以降)に入り、ログに残るおそれがある
    • POSTは、データの送信。情報はメッセージのボディに入る
  • PUT / DELETE
    • PUTは、指定URLへデータを保存する
    • DELETEは、指定URLのデータを削除する
  • CONNECTメソッド / その他のメソッド
    • CONNECTは、プロキシに、中身をいじらず中継(トンネリング)するよう頼む(HTTPS用)
    • その他は、Webサーバにデータの取得・送信・保存・削除を頼む
  • HTTP / HTTPS
    • HTTPは、暗号化なし(TCP 80)
    • HTTPSは、TLSで暗号化、デジタル署名、認証を加えたもの(TCP 443)
  • HTTPS / HSTS
    • HTTPSは、暗号化した通信そのもの
    • HSTSは、HTTPでアクセスしてきたブラウザに、HTTPSを使うよう指示する仕組み
  • HTTP / WebSocket
    • HTTPは、プル配信が基本。リクエストとレスポンスの1組ずつ
    • WebSocketは、1つのTCPコネクションで双方向のリアルタイム通信ができる
  • プル配信 / プッシュ配信
    • プル配信は、クライアントの要求にサーバが応える
    • プッシュ配信は、サーバが自分からクライアントに送る
  • WebDAV / FTP
    • WebDAVは、HTTPを拡張して、HTTP/HTTPSだけでWebサーバ上のファイルを管理する
    • FTPは、ファイル転送専用のプロトコル(TCP 20、21)
  • Cookie / セッション(状態)
    • Cookieは、Webサーバがクライアントに情報を保存させる仕組み
    • HTTP自体は、前後の通信の状態を引き継げない

← 07 ネットワークの目次に戻る

タイトルとURLをコピーしました