このページでは、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自体は、前後の通信の状態を引き継げない