今日勉強する内容
こんにちは!最近急に寒いですね。朝かぐ空気の匂いが冷たくて、頭が叩き起こされる感覚で毎日目を覚ましてます。
さて、本日も本日とて、Internetの勉強をします。2つ目のトピック、What is HTTPの深掘りですね。
前回記事はこちら。
2つ目のトピックリンクをクリックしたら、こんな感じで紹介がありました。
大体要約すると、HTTPは、ブラウザとサーバー間の通信を定義するステートレスなプロトコルで、リクエストとレスポンスで動作すること。HTTPSやHTTP/2などの進化形があり、セキュリティやパフォーマンスの向上に寄与している。みたいなことが書かれています。
Freeでこれ読んだら?って記事が4つもあって、それぞれのメモを残すのは大変なので、3,4個目の、
- How HTTPS Works
- HTTP/3 is Now a Standard: Why Use it and Hot to Get Started
を読んでいこうと思います。
How HTTPS Works
なんか変な猫みたいなのがお迎えしてくれます、なんだこれ笑
やけにコミカライズだなと思ったら漫画でした。
なぜHTTPSは必要なのか
Compugterとか、Browserbirdとかいるのおもろい笑
翻訳もあって、結構スピーディーに読めるので、直接読むのがいいと思います!最初はなぜHTTPSのSが大事なのかという話、プライバシー、完全性、認証が、実生活においても大事だよね?みたいな話でした。非IT圏の人からみてもわかりやすそう。
鍵
2つ目のページでは鍵についてです。
これを実装するために暗号化技術が必要であり、ここでは2つの暗号アルゴリズムを説明しています。そう、最も有名と言っても過言ではない、共通鍵暗号アルゴと公開鍵暗号アルゴ。
書いてある通り、使う鍵は1つ。
メッセージの暗号化に1つの鍵を利用し、その1つの鍵を持っている人であれば誰でも複合できるというもの。問題は想像に容易いですね。共通かぎは共有するのが難しいというもの。
次は公開鍵暗号アルゴについてです。
共通鍵との違いはカギが2つあること。1つが公開鍵でもう一つが秘密鍵ですね。考え方を整理すると、暗号化には公開鍵を、そして復号ににペアとなる秘密鍵が必要になります。暗号化に必要な公開鍵は、送信先が発行しているものを利用します。そうすることで、2つの鍵を持っている人だけがメッセージを開けることができる仕組みなんですよね。賢いですよねぇ。
相手が公開している鍵で鍵をかけることで、そのついとなる秘密鍵を持っている相手だけが解錠できる仕組み。これを物理的で実現するのは難しいですが、情報を使って暗号化しようとすると簡単にできますな。
読んでて思ったけど、このサイトのFooterかわいい。笑
次はハンドシェイクです。これも大事。
ハンドシェイク
ハンドシェイクは握手のことですね。要は、接続するサーバー同士が安全かどうかを互いに同意するという目的でハンドシェイクが必要になります。
個人的に、ここの漫画は抽象化されすぎてわかりにくかったのでハンドシェイクだけ別サイトから引用します。
SSL(Secure Sockets Layer)は、HTTPのために開発された本来のセキュリティプロトコルです。SSLは少し前にTLS(Transport Layer Security)にとって代わられ、SSLハンドシェイクは現在ではTLSハンドシェイクと呼ばれています(「SSL」という名称も依然広く使用されていますが)。
ほーん。SSL→TSLの時代の流れがあったと。
TLSハンドシェイクは、ユーザーがHTTPSでWebサイトに来て、ブラウザーがそのサイトのオリジンサーバー(配信元サーバー)に問い合わせ始めた時に行われます。TLSハンドシェイクは、その他の何らかの通信でHTTPSが使われる時(API呼び出し、DNS over HTTPSクエリなど)にも起こります。
Client HelloとかServer Helloって言ってたのもちゃんと説明されている。
ハンドシェイクの流れを文章で引用するとこちらです。
1. 「Client Hello」メッセージ:クライアントがサーバーに「Hello」というメッセージを送信することによってハンドシェイクを開始します。このメッセージには、クライアントがサポートするTLSのバージョン、対応する暗号スイート、「クライアントランダム」というランダムなバイト文字列が含まれています。
2. 「Server Hello」メッセージ:Client Helloメッセージへの返答として、サーバーがメッセージを送ります。このメッセージには、サーバーのSSL証明書、選んだ暗号スイート、サーバーが生成した別のバイト文字列「サーバーランダム」が含まれています。
3. 認証:クライアントはサーバーのSSL証明書を発行元の認証局に確認します。これにより、サーバーが自称する本人に間違いなく、クライアントはそのドメインの実際の所有者とやりとりしていることが確認されます。
4. プレマスタシークレット:クライアントは、「プレマスタシークレット」と呼ばれるもう1つのランダムなバイト文字列を送信します。プレマスタシークレットはパブリック鍵で暗号化されており、復号化は秘密鍵を使うサーバーしか行えません。(クライアントはサーバーのSSL証明書からパブリック鍵(公開鍵)を入手します。)
5. 使用される秘密鍵:サーバーはプレマスタシークレットを解読します。
6. セッション鍵の生成:クライアントとサーバーは共にクライアントランダムとサーバーランダム、プレマスターシークレットからセッション鍵を生成します。双方とも同じ結果になるはずです。
7. クライアントの準備完了:クライアントは、セッション鍵で暗号化された「finished(完了)」のメッセージを送信します。
8. サーバーの準備完了:サーバーは、セッション鍵で暗号化された「finished(完了)」のメッセージを送信します。
9. セキュアな対称暗号化の実現:ハンドシェイクが完了し、セッション鍵を使用して通信が続行されます。
HTTPS、SSL、TLSの違い
Sは保護されたって意味ですよね。これはわかる。
HTTPが、ブラウザとウェブサーバーが通信し、情報を交換するのに使われるプロトコルであって、それがSSL/TLSで暗号化されているとHTTPSと呼ばれるらしい。
じゃあSSL/TLSで暗号化されるとは?なぜ一緒にされる?
SSL:Secure Socket Layer
TSL:Transport Layer Security
SSLプロトコルは、Netscape社が開発したけど、セキュリティ問題だらけでプロトコルの管理をIETFに委ねたらしい。んで、20世紀の終わりにTLS 1.0をIETFがリリース。
この辺は流れがそうなんだくらいの理解で止めておきます。
ここがわかれば良いっぽい。そしてSSLは90年代半ばには廃止されていると。
認証局の話も、漫画として面白かった。って感じでした。詳しい仕組みを知るには別の記事を参照するほうが良さそうですが。
とっかかりとしては分かりやすい漫画でした!