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) |
自己署名証明書(オレオレ証明書)
認証局から証明書をもらうのではなく、サーバー管理者が自分で証明書をつくったとき、その証明書を自己署名証明書、または俗にオレオレ証明書という。