リンドくん
先生、よくWebサイトのURLが「https://」で始まってるのを見るんですけど、これって何が違うんですか?
たなべ
「https」の「s」は「Secure(安全)の頭文字」なんだ。
つまり、通信が暗号化されて安全に情報をやり取りできるってことなんだよ。
リンドくん
暗号化...ですか?なんだか難しそうです。
たなべ
大丈夫!実は身近な例で考えるとわかりやすいんだよ。
たとえば、手紙を封筒に入れて送るのとハガキで送るのとでは、どっちが安全だと思う?
インターネットでWebサイトを閲覧したり、オンラインショッピングをしたりするとき、私たちの大切な情報がどのように守られているのか、考えたことはありますか?
SSL/TLS(エスエスエル/ティーエルエス)という技術が、インターネット上での通信を暗号化し、私たちの個人情報やクレジットカード番号などの重要なデータを守っているのです。
この記事では、ネットワークを学び始めたばかりの方でも理解できるよう、SSL/TLSによるHTTPS通信の仕組みを基礎から丁寧に解説していきます。
HackATAは、エンジニアを目指す方のためのプログラミング学習コーチングサービスです。 経験豊富な現役エンジニアがあなたの学習をサポートします。
✓ 質問し放題
✓ β版公開中(2025年内の特別割引)
リンドくん
そもそも、普通のHTTPだと何が問題なんですか?
たなべ
HTTPは通信内容が丸見えなんだ。
たとえるなら、透明な封筒で手紙を送っているようなもの。途中で誰かに見られても気づけないんだよ。
通常のHTTP(HyperText Transfer Protocol)通信では、以下のような深刻なセキュリティリスクが存在します。
たとえば、カフェなどの公共Wi-Fiを使ってHTTPサイトにアクセスした場合、同じネットワークにいる悪意のある第三者が、あなたの通信内容を盗み見ることができてしまうのです。
パスワードやクレジットカード番号などの重要な情報を入力する場面では、これは非常に危険ですよね。
HTTPS(HTTP Secure)は、HTTPにSSL/TLSという暗号化技術を組み合わせたものです。これにより以下が実現されます。
HTTPSを使うことで、まるで開封されていないことが確認できる封筒で手紙を送るように、安全に情報をやり取りできるようになるのです。
実際、最近のWebブラウザでは、HTTPサイトにアクセスすると「保護されていない通信」という警告が表示されることが多くなりました。
これは、HTTPSの重要性が広く認識されている証拠と言えるでしょう。
リンドくん
SSLとTLSって、何が違うんですか?両方よく聞くんですけど...
たなべ
実はTLSはSSLの新しいバージョンなんだ。
今では技術的にはTLSを使っているんだけど、慣習的にSSLと呼ぶことも多いんだよ。
SSL(Secure Sockets Layer)は、1990年代にNetscape社が開発した暗号化プロトコルです。しかし、セキュリティ上の脆弱性が発見されたため、その後継としてTLS(Transport Layer Security)が開発されました。
現在の状況は以下の通りです。
つまり、現代のHTTPS通信では実際にはTLSが使われているのですが、「SSL証明書」「SSL通信」といった呼び方が今でも一般的に使われています。これは歴史的な経緯によるものなんです。
SSL/TLSは、以下の3つの重要な機能を提供します。
通信内容を暗号化することで、第三者に内容を読み取られないようにします。たとえば、パスワードやクレジットカード番号などの機密情報を送信する際に、暗号化されていれば安心ですよね。
データが途中で改ざんされていないことを保証します。送信したデータと受信したデータが完全に一致していることを確認できるのです。
通信相手が本物であることを証明します。偽サイトにアクセスしてしまうフィッシング詐欺を防ぐために非常に重要な機能です。
これら3つの機能が組み合わさることで、インターネット上での安全な通信が実現されているのです。
リンドくん
暗号化って言っても、どうやって暗号化するんですか?鍵みたいなものがあるんですか?
たなべ
まさに「鍵」なんだよ!しかも2つの鍵を使う特別な方法があるんだ。
この仕組みがSSL/TLSの核心部分なんだよね。
暗号化には大きく分けて2つの方式があります。
暗号化と復号化に同じ鍵を使う方式です。
たとえば、金庫の鍵を1つだけ作って、それを安全に相手に渡す必要があるようなものです。インターネット上で鍵を送ると、その鍵自体が盗まれる可能性があります。
暗号化と復号化に異なる鍵(公開鍵と秘密鍵のペア)を使う方式です。
これは、南京錠のようなものです。南京錠(公開鍵)は誰でも使ってロックできますが、開けられるのは鍵(秘密鍵)を持っている人だけ、というイメージです。
実はSSL/TLSでは、両方の暗号方式を組み合わせて使用しています。
この方式により、セキュリティと速度の両立が実現されているのです。
公開鍵暗号は安全ですが処理が遅く、共通鍵暗号は高速ですが鍵の共有が難しい、という両者の弱点を補い合う賢い仕組みですね。
リンドくん
でも、公開鍵が本物かどうかって、どうやって確認するんですか?偽物だったら意味ないですよね?
たなべ
鋭い指摘だね!そこで登場するのがSSL/TLS証明書なんだ。
これは信頼できる第三者機関が発行する身分証明書のようなものなんだよ。
SSL/TLS証明書は、以下の情報を含むデジタル文書です。
この証明書により、「この公開鍵は確かにこのWebサイトのものです」ということが証明されるのです。
認証局(Certificate Authority、CAと略される)は、SSL/TLS証明書を発行する信頼できる第三者機関です。
代表的な認証局には以下のようなものがあります。
認証局は、証明書を発行する前に申請者の身元確認を行います。これにより、証明書の信頼性が保証されるのです。
WebブラウザがHTTPSサイトにアクセスすると、以下の手順で証明書を検証します。
これらの検証に問題がなければ、そのサイトは「安全」と判断され、鍵マークが表示されます。逆に問題があれば、「この接続ではプライバシーが保護されません」といった警告が表示されるのです。
この仕組みにより、フィッシング詐欺サイトなどの偽サイトを見破ることができるんですね。
リンドくん
実際にHTTPSで通信するときって、どういう手順で進むんですか?
たなべ
まずTLSハンドシェイクという握手のような手順を踏んでから、暗号化通信が始まるんだ。
この流れを理解すると、HTTPS通信の全体像が見えてくるよ。
HTTPS通信が始まる際に行われるTLSハンドシェイクは、以下のような手順で進みます。
ステップ① ClientHello(クライアントからの挨拶)クライアント(ブラウザ)がサーバーに接続を開始します。
これらの情報をサーバーに送信します。
ステップ② ServerHello(サーバーからの返答)サーバーが以下の情報を返します。
クライアントは受け取った証明書を検証します。信頼できる認証局が発行したものか、有効期限内か、ドメイン名が一致しているかなどを確認するのです。
ステップ④ 鍵の交換クライアントは、サーバーの公開鍵(証明書に含まれる)を使って、共通鍵を生成するための情報を暗号化してサーバーに送信します。
サーバーは自身の秘密鍵でこれを復号化し、同じ共通鍵を生成します。
ステップ5: ハンドシェイク完了
両者が同じ共通鍵を持つことを確認し、ハンドシェイクが完了します。
ハンドシェイク完了後は、共通鍵を使った高速な暗号化通信が行われます。
この時点で、以下のことが実現されています。
これにより、安全で高速な通信が可能になるのです。
初回のハンドシェイクは少し時間がかかりますが、一度確立されれば、その後の通信は非常にスムーズに進みます。これがHTTPS通信の優れた点なんですね。
リンドくん
将来、自分でWebサイトを作るときには、どうやってHTTPSに対応すればいいんですか?
たなべ
良い質問だね!開発者として知っておくべき実装のポイントがいくつかあるんだ。
最近では比較的簡単にHTTPS化できるようになってきているよ。
WebサイトをHTTPSに対応させるには、まず証明書を取得する必要があります。
無料の証明書 - Let's Encrypt
個人サイトや小規模サイトなら、Let's Encryptという無料の証明書が非常に便利です。
有料の証明書
企業サイトやECサイトなどでは、有料の証明書が選ばれることも多いです。
証明書を取得したら、Webサーバー(ApacheやNginxなど)に設定します。
Nginxの設定例
このように、証明書のパスと使用するプロトコルを指定することで、HTTPS通信が有効になります。
HTTPSに対応したら、HTTPでアクセスされた場合は自動的にHTTPSにリダイレクトするのがベストプラクティスです。
これにより、ユーザーが「http://」でアクセスしても、自動的に「https://」に転送されます。
HTTPS通信をより安全にするために、以下のようなセキュリティヘッダーを設定することも重要です。
HSTSは、ブラウザに「このサイトは常にHTTPSでアクセスすべき」と記憶させる仕組みで、セキュリティをさらに強化できます。
開発者として、これらの設定を理解しておくことは非常に重要です。自分でWebサイトを構築する際には、必ずHTTPSに対応するようにしましょう。
リンドくん
HTTPS通信の仕組みがよくわかりました!思ったより複雑なんですね。
たなべ
そうだね。でもこの複雑な仕組みのおかげで、私たちは安心してインターネットを使えるんだ。
今ではHTTPSは特別なものではなく、Web通信の標準になっているんだよ。
この記事では、SSL/TLSによるHTTPS通信の仕組みについて、基礎から詳しく解説してきました。重要なポイントを改めて確認しておきましょう。
SSL/TLSの仕組みを理解することは、単にHTTPSを使えるようになるだけではありません。
暗号化、認証、通信プロトコルといった、ネットワークセキュリティの基本概念を学ぶことにつながります。
これらの知識は、将来的にWebアプリケーション開発やインフラ構築に携わる際に、必ず役立つはずです。
セキュリティを意識した設計ができる技術者は、今後ますます重要になっていくでしょう。
インターネットの安全性を支える技術を理解し、それを実践できる技術者を目指して、一緒に成長していきましょう!