フリーキーズ | 独学プログラミング

SSL/TLSでHTTPS通信を暗号化する仕組みを初心者向けに解説

リンドくん

リンドくん

先生、よくWebサイトのURLが「https://」で始まってるのを見るんですけど、これって何が違うんですか?

たなべ

たなべ

「https」の「s」は「Secure(安全)の頭文字」なんだ。
つまり、通信が暗号化されて安全に情報をやり取りできるってことなんだよ。

リンドくん

リンドくん

暗号化...ですか?なんだか難しそうです。

たなべ

たなべ

大丈夫!実は身近な例で考えるとわかりやすいんだよ。
たとえば、手紙を封筒に入れて送るのとハガキで送るのとでは、どっちが安全だと思う?

インターネットでWebサイトを閲覧したり、オンラインショッピングをしたりするとき、私たちの大切な情報がどのように守られているのか、考えたことはありますか?

SSL/TLS(エスエスエル/ティーエルエス)という技術が、インターネット上での通信を暗号化し、私たちの個人情報やクレジットカード番号などの重要なデータを守っているのです。

この記事では、ネットワークを学び始めたばかりの方でも理解できるよう、SSL/TLSによるHTTPS通信の仕組みを基礎から丁寧に解説していきます。

プログラミング学習でお悩みの方へ

HackATAは、エンジニアを目指す方のためのプログラミング学習コーチングサービスです。 経験豊富な現役エンジニアがあなたの学習をサポートします。

✓ 質問し放題

✓ β版公開中(2025年内の特別割引)

HackATAの詳細を見る

HTTPとHTTPSの違い - なぜ暗号化が必要なのか

リンドくん

リンドくん

そもそも、普通のHTTPだと何が問題なんですか?

たなべ

たなべ

HTTPは通信内容が丸見えなんだ。
たとえるなら、透明な封筒で手紙を送っているようなもの。途中で誰かに見られても気づけないんだよ。

HTTPの問題点

通常のHTTP(HyperText Transfer Protocol)通信では、以下のような深刻なセキュリティリスクが存在します。

  • 盗聴のリスク → 通信内容が暗号化されていないため、途中経路で第三者に見られる可能性がある
  • 改ざんのリスク → 通信データが書き換えられても気づけない
  • なりすましのリスク → 接続先が本物のサーバーかどうか確認できない

たとえば、カフェなどの公共Wi-Fiを使ってHTTPサイトにアクセスした場合、同じネットワークにいる悪意のある第三者が、あなたの通信内容を盗み見ることができてしまうのです。

パスワードやクレジットカード番号などの重要な情報を入力する場面では、これは非常に危険ですよね。

HTTPSが解決すること

HTTPS(HTTP Secure)は、HTTPにSSL/TLSという暗号化技術を組み合わせたものです。これにより以下が実現されます。

  • 暗号化 → 通信内容が暗号化され、第三者に読み取られない
  • 改ざん検知 → データが途中で書き換えられていないことを確認できる
  • 認証 → 接続先が本物のサーバーであることを証明できる

HTTPSを使うことで、まるで開封されていないことが確認できる封筒で手紙を送るように、安全に情報をやり取りできるようになるのです。

実際、最近のWebブラウザでは、HTTPサイトにアクセスすると「保護されていない通信」という警告が表示されることが多くなりました。
これは、HTTPSの重要性が広く認識されている証拠と言えるでしょう。

SSL/TLSとは何か - 暗号化技術の基本

リンドくん

リンドくん

SSLとTLSって、何が違うんですか?両方よく聞くんですけど...

たなべ

たなべ

実はTLSはSSLの新しいバージョンなんだ。
今では技術的にはTLSを使っているんだけど、慣習的にSSLと呼ぶことも多いんだよ。

SSL/TLSの歴史と違い

SSL(Secure Sockets Layer)は、1990年代にNetscape社が開発した暗号化プロトコルです。しかし、セキュリティ上の脆弱性が発見されたため、その後継としてTLS(Transport Layer Security)が開発されました。

現在の状況は以下の通りです。

  • SSL 2.0/3.0 → セキュリティ上の問題により使用禁止
  • TLS 1.0/1.1 → 古いバージョンとして段階的に廃止中
  • TLS 1.2 → 現在も広く使われている安全なバージョン
  • TLS 1.3 → 最新バージョンで、より高速かつ安全

つまり、現代のHTTPS通信では実際にはTLSが使われているのですが、「SSL証明書」「SSL通信」といった呼び方が今でも一般的に使われています。これは歴史的な経緯によるものなんです。

SSL/TLSが提供する3つの保護

SSL/TLSは、以下の3つの重要な機能を提供します。

機密性(Confidentiality)

通信内容を暗号化することで、第三者に内容を読み取られないようにします。たとえば、パスワードやクレジットカード番号などの機密情報を送信する際に、暗号化されていれば安心ですよね。

完全性(Integrity)

データが途中で改ざんされていないことを保証します。送信したデータと受信したデータが完全に一致していることを確認できるのです。

認証(Authentication)

通信相手が本物であることを証明します。偽サイトにアクセスしてしまうフィッシング詐欺を防ぐために非常に重要な機能です。

これら3つの機能が組み合わさることで、インターネット上での安全な通信が実現されているのです。

公開鍵暗号方式

リンドくん

リンドくん

暗号化って言っても、どうやって暗号化するんですか?鍵みたいなものがあるんですか?

たなべ

たなべ

まさに「鍵」なんだよ!しかも2つの鍵を使う特別な方法があるんだ。
この仕組みがSSL/TLSの核心部分なんだよね。

共通鍵暗号方式と公開鍵暗号方式

暗号化には大きく分けて2つの方式があります。

共通鍵暗号方式(対称鍵暗号)

暗号化と復号化に同じ鍵を使う方式です。

  • メリット → 暗号化・復号化の処理が高速
  • デメリット → 鍵を安全に共有する方法が難しい

たとえば、金庫の鍵を1つだけ作って、それを安全に相手に渡す必要があるようなものです。インターネット上で鍵を送ると、その鍵自体が盗まれる可能性があります。

公開鍵暗号方式(非対称鍵暗号)

暗号化と復号化に異なる鍵(公開鍵と秘密鍵のペア)を使う方式です。

  • 公開鍵 → 誰でも使える鍵。暗号化に使用
  • 秘密鍵 → 本人だけが持つ鍵。復号化に使用

これは、南京錠のようなものです。南京錠(公開鍵)は誰でも使ってロックできますが、開けられるのは鍵(秘密鍵)を持っている人だけ、というイメージです。

SSL/TLSにおける鍵の使い分け

実はSSL/TLSでは、両方の暗号方式を組み合わせて使用しています。

  1. 最初の鍵交換 → 公開鍵暗号方式を使って、共通鍵を安全に交換
  2. 実際のデータ通信 → 交換した共通鍵を使って高速に暗号化通信

この方式により、セキュリティと速度の両立が実現されているのです。

公開鍵暗号は安全ですが処理が遅く、共通鍵暗号は高速ですが鍵の共有が難しい、という両者の弱点を補い合う賢い仕組みですね。

SSL/TLS証明書

リンドくん

リンドくん

でも、公開鍵が本物かどうかって、どうやって確認するんですか?偽物だったら意味ないですよね?

たなべ

たなべ

鋭い指摘だね!そこで登場するのがSSL/TLS証明書なんだ。
これは信頼できる第三者機関が発行する身分証明書のようなものなんだよ。

SSL/TLS証明書の役割

SSL/TLS証明書は、以下の情報を含むデジタル文書です。

  • Webサイトの所有者情報
  • ドメイン名
  • 公開鍵
  • 証明書の有効期限
  • 証明書を発行した認証局(CA)の情報

この証明書により、「この公開鍵は確かにこのWebサイトのものです」ということが証明されるのです。

認証局(CA)の重要性

認証局(Certificate Authority、CAと略される)は、SSL/TLS証明書を発行する信頼できる第三者機関です。

代表的な認証局には以下のようなものがあります。

  • DigiCert
  • Let's Encrypt
  • GlobalSign
  • Sectigo

認証局は、証明書を発行する前に申請者の身元確認を行います。これにより、証明書の信頼性が保証されるのです。

証明書の検証プロセス

WebブラウザがHTTPSサイトにアクセスすると、以下の手順で証明書を検証します。

  1. サーバーから証明書を受け取る
  2. 証明書が信頼できる認証局によって発行されたものか確認
  3. 証明書の有効期限が切れていないか確認
  4. 証明書のドメイン名がアクセス先と一致しているか確認

これらの検証に問題がなければ、そのサイトは「安全」と判断され、鍵マークが表示されます。逆に問題があれば、「この接続ではプライバシーが保護されません」といった警告が表示されるのです。

この仕組みにより、フィッシング詐欺サイトなどの偽サイトを見破ることができるんですね。

HTTPS通信の流れ

リンドくん

リンドくん

実際にHTTPSで通信するときって、どういう手順で進むんですか?

たなべ

たなべ

まずTLSハンドシェイクという握手のような手順を踏んでから、暗号化通信が始まるんだ。
この流れを理解すると、HTTPS通信の全体像が見えてくるよ。

TLSハンドシェイクの詳細な流れ

HTTPS通信が始まる際に行われるTLSハンドシェイクは、以下のような手順で進みます。

ステップ① ClientHello(クライアントからの挨拶)

クライアント(ブラウザ)がサーバーに接続を開始します。

  • 対応しているTLSバージョン
  • 対応している暗号化方式のリスト
  • ランダムな数値

これらの情報をサーバーに送信します。

ステップ② ServerHello(サーバーからの返答)

サーバーが以下の情報を返します。

  • 使用するTLSバージョン
  • 選択した暗号化方式
  • サーバー側のランダムな数値
  • SSL/TLS証明書
ステップ③ 証明書の検証

クライアントは受け取った証明書を検証します。信頼できる認証局が発行したものか、有効期限内か、ドメイン名が一致しているかなどを確認するのです。

ステップ④ 鍵の交換

クライアントは、サーバーの公開鍵(証明書に含まれる)を使って、共通鍵を生成するための情報を暗号化してサーバーに送信します。

サーバーは自身の秘密鍵でこれを復号化し、同じ共通鍵を生成します。

ステップ5: ハンドシェイク完了

両者が同じ共通鍵を持つことを確認し、ハンドシェイクが完了します。

暗号化通信の開始

ハンドシェイク完了後は、共通鍵を使った高速な暗号化通信が行われます。

この時点で、以下のことが実現されています。

  • クライアントとサーバーだけが知る共通鍵が確立
  • 通信内容はすべて暗号化される
  • データの改ざんを検知できる仕組みが動作

これにより、安全で高速な通信が可能になるのです。

初回のハンドシェイクは少し時間がかかりますが、一度確立されれば、その後の通信は非常にスムーズに進みます。これがHTTPS通信の優れた点なんですね。

SSL/TLSの実装と設定 - 開発者が知っておくべきこと

リンドくん

リンドくん

将来、自分でWebサイトを作るときには、どうやってHTTPSに対応すればいいんですか?

たなべ

たなべ

良い質問だね!開発者として知っておくべき実装のポイントがいくつかあるんだ。
最近では比較的簡単にHTTPS化できるようになってきているよ。

SSL/TLS証明書の取得方法

WebサイトをHTTPSに対応させるには、まず証明書を取得する必要があります。

無料の証明書 - Let's Encrypt

個人サイトや小規模サイトなら、Let's Encryptという無料の証明書が非常に便利です。

  • 完全無料
  • 自動更新が可能
  • ドメイン認証(DV)証明書
  • 多くのホスティングサービスで簡単に設定可能

有料の証明書

企業サイトやECサイトなどでは、有料の証明書が選ばれることも多いです。

  • OV証明書(組織認証) → 組織の実在性も証明
  • EV証明書(拡張認証) → 最も信頼性の高い証明書

Webサーバーでの設定

証明書を取得したら、Webサーバー(ApacheやNginxなど)に設定します。

Nginxの設定例

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /path/to/certificate.crt;
    ssl_certificate_key /path/to/private.key;

    # セキュリティ設定
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
}

このように、証明書のパスと使用するプロトコルを指定することで、HTTPS通信が有効になります。

HTTPからHTTPSへのリダイレクト

HTTPSに対応したら、HTTPでアクセスされた場合は自動的にHTTPSにリダイレクトするのがベストプラクティスです。

server {
    listen 80;
    server_name example.com;
    return 301 https://$server_name$request_uri;
}

これにより、ユーザーが「http://」でアクセスしても、自動的に「https://」に転送されます。

セキュリティヘッダーの設定

HTTPS通信をより安全にするために、以下のようなセキュリティヘッダーを設定することも重要です。

# HSTS(HTTP Strict Transport Security)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

# その他のセキュリティヘッダー
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;

HSTSは、ブラウザに「このサイトは常にHTTPSでアクセスすべき」と記憶させる仕組みで、セキュリティをさらに強化できます。

開発者として、これらの設定を理解しておくことは非常に重要です。自分でWebサイトを構築する際には、必ずHTTPSに対応するようにしましょう。

まとめ

リンドくん

リンドくん

HTTPS通信の仕組みがよくわかりました!思ったより複雑なんですね。

たなべ

たなべ

そうだね。でもこの複雑な仕組みのおかげで、私たちは安心してインターネットを使えるんだ。
今ではHTTPSは特別なものではなく、Web通信の標準になっているんだよ。

この記事では、SSL/TLSによるHTTPS通信の仕組みについて、基礎から詳しく解説してきました。重要なポイントを改めて確認しておきましょう。

  • HTTPSの必要性 → 通常のHTTP通信では盗聴や改ざんのリスクがあり、SSL/TLSによる暗号化が不可欠です。
  • 公開鍵暗号方式 → 公開鍵と秘密鍵のペアを使った暗号化により、安全に鍵交換ができます。実際の通信では、公開鍵暗号と共通鍵暗号を組み合わせて使用します。
  • SSL/TLS証明書 → 信頼できる認証局が発行する証明書により、サーバーの身元が保証され、フィッシング詐欺を防げます。
  • TLSハンドシェイク → クライアントとサーバー間で安全に鍵を交換し、暗号化通信を確立する仕組みです。

SSL/TLSの仕組みを理解することは、単にHTTPSを使えるようになるだけではありません。
暗号化、認証、通信プロトコルといった、ネットワークセキュリティの基本概念を学ぶことにつながります。

これらの知識は、将来的にWebアプリケーション開発やインフラ構築に携わる際に、必ず役立つはずです。
セキュリティを意識した設計ができる技術者は、今後ますます重要になっていくでしょう。

インターネットの安全性を支える技術を理解し、それを実践できる技術者を目指して、一緒に成長していきましょう!

この記事をシェア

関連するコンテンツ