HTTP/HTTPS/SSL/TLS
SSL/TLS ってなんだろう?| SSL/TLS-総合解説サイト
まとめ
- HTTP は Web で使われる通信プロトコルである。
- HTTPS は Web で使われる通信プロトコルで、SSL/TLS によって安全性が高められている。だから現代の Web は HTTP ではなく HTTPS が主流である。
- SSL/TLS(または SSL)は暗号化プロトコルのことで、このキーワードは 2024 年現在では一般的に TLS のことを指すことが多い。
- HTTPS に対応させるには SSL/TLS に対応させれば良い。このためにはサーバー管理者の秘密鍵(
*.key)とサーバー証明書、中間証明書、ルート証明書(*.crtor*.pemor*.cer)をサーバーにインストールする必要がある。 - サーバー証明書、中間証明書、ルート証明書は認証局からもらう。これらはサーバー管理者が自身の秘密鍵を生成し、秘密鍵から証明書署名要求ファイルを生成し、認証局へ渡すことで入手できる。
HTTP と HTTPS
HTTP は Web で使われる通信プロトコルである。HTTP はサーバーとクライアント間を平文で通信する。
HTTPS も Web で使われる通信プロトコルである。HTTPS はサーバーとクライアント間を SSL もしくは TLS で暗号化して通信する。
現在では HTTPS 通信が標準であり、HTTP 通信は推奨されていない。現代的な Web ブラウザは HTTP 通信を行う際は保護されていないものとして警告を表示する。
SSL/TLS
SSL(Secure Sockets Layer)と TLS(Transport Layer Security)は暗号化プロトコルである。
この暗号化プロトコルによりサーバーとクライアント間の通信は暗号化され、以下の悪行から守られるらしい。
- 情報(例: 個人情報、クレジットカード番号)の盗聴
- 改ざん(SSL/TLS は改ざんをチェックする)
- なりすまし・フィッシング(ユーザーがサーバーの身元を確認できる)
SSL はセキュリティの脆弱性が発見されている。このため SSL の後継として TLS が開発された。現在は TLS が主流であり、HTTPS 通信は主に TLS が用いられている。
こういった背景から、一般には SSL、SSL/TLS、TLS/SSL といった表現がなされるが、これらは 実際には TLS のことを指している場合があるので注意が必要である。
SSL/TLS がやっていること
共通鍵暗号方式
公開鍵暗号方式
証明書を使った証明
オレオレ証明書を openssl で作る(詳細版) - ろば電子が詰まつてゐる
登場人物は主にサーバー管理者と認証局(CA、Certification Authority、CA 局)の二名である。
サーバー管理者
サーバー管理者はサーバーを運営する人で、つまり自分のことである。
認証局(中間認証局)
認証局はサーバー管理者の公開鍵の正当性を保証する第三者である。クライアントからしたらサーバーが怪しいかもしれないところを、認証局がこのサーバーは偽物じゃないですよと保証するのである。
ただ認証局が偽物かもしれない。そこで認証局自体が本物であることを、より上位の認証局がルート証明書や中間証明書で証明する。
ルート認証局
ルート認証局は一番偉い認証局である。ルート認証局はルート証明書を使って自分の正当性を自分で証明する。また他の認証局に証明書を発行する。
認証局はルート認証局が一番偉く、その下に認証局がいて、さらにその下に認証局がいて、という階層構造をなすことで信頼性を高めている。
SSL 証明書作成とインストールの流れ
- サーバー管理者が秘密鍵(
server.key)を作成する。 - サーバー管理者が秘密鍵から証明書署名要求ファイル(
server.csr)を作成する。(厳密には証明書署名要求ファイルの生成は秘密鍵から暗黙的に生まれる公開鍵をつかって行われる) - サーバー管理者は証明書署名要求ファイルを認証局に送付する。
- 認証局は認証局の秘密鍵で証明書要求ファイルに署名しサーバー証明書(
server.crt)を作成する。 - 認証局はサーバー証明書、ルート証明書、中間証明書をサーバー管理者へ渡す。
- サーバー管理者はサーバー証明書、ルート証明書、中間証明書を受け取り、サーバーにインストールする。
証明書署名要求ファイル(server.csr)は一時的に必要なもの。サーバー運営で最終的に使うのは秘密鍵(server.key)とサーバー証明書(server.crt)。
証明書発行は有料のものもあれば無料のものもある。無料のものは信頼度が低いらしい。
| 名前(カッコ内は表記揺れ) | 説明 | ファイル名の例 |
|---|---|---|
| 秘密鍵 | クライアントから受けた暗号化データを複合するのに使うファイル。 | server.key |
| 証明書要求ファイル(CSR) | 認証局にサーバー証明書を作成してもらうのに必要なファイル。 | server.csr |
| サーバー証明書(SSL/TLS 証明書、SSL サーバー証明書) | 認証局がサーバーの身元を保証するファイル。 | server.crt(*.pem、*.cer) |
| 中間証明書(中間 CA 証明書) | 認証局の身元を保証するファイル。 | intermediate.crt(*.pem、*.cer) |
| ルート証明書 | ルート認証局の身元を保証するファイル。 | root.crt(*.pem、*.cer) |
自己署名証明書(オレオレ証明書)
認証局から証明書をもらうのではなく、サーバー管理者が自分で証明書をつくったとき、その証明書を自己署名証明書、または俗にオレオレ証明書という。