HTTPS/SSL - 通信を守る基本中の基本

これは何?

HTTPS(Hypertext Transfer Protocol Secure)は、HTTPにSSL/TLSによる暗号化を追加したプロトコルです。ウェブサイトとブラウザの間の通信を暗号化し、第三者による盗聴や改ざんを防ぎます。

HTTPSの仕組みは以下の通りです:

  1. TLSハンドシェイク: ブラウザとサーバーが暗号化方式を協議
  2. 証明書の検証: サーバーがSSL証明書を提示し、ブラウザが認証局(CA)の署名を検証
  3. 鍵交換: 共通鍵暗号の鍵を安全に交換
  4. 暗号化通信: 以降の通信はすべて暗号化される

ブラウザのアドレスバーに鍵マークが表示されれば、HTTPS通信が確立されています。逆に「保護されていない通信」と表示される場合、HTTPで通信しており、盗聴リスクがあります。

なぜ重要なのか

HTTPでウェブサイトを運用すると、以下のリスクがあります:

1. パスワード・個人情報の盗聴

HTTPは平文で通信するため、ネットワーク上の第三者がすべての内容を読めます:

  • ログインフォームのユーザー名・パスワード
  • クレジットカード番号
  • 個人情報(氏名、住所、電話番号)
  • セッションCookie(乗っ取りに悪用可能)

特に公衆Wi-Fiでは、攻撃者が容易に盗聴できます。

2. 中間者攻撃(Man-in-the-Middle)

攻撃者がネットワーク経路に侵入し、通信内容を改ざんできます:

  • マルウェアの注入
  • フィッシングサイトへのリダイレクト
  • 広告の挿入
  • ダウンロードファイルの置き換え

3. SEO・信頼性への影響

  • Google検索ランキング: 2014年以降、HTTPSはランキング要因の一つ。HTTPサイトは順位が下がる
  • ブラウザの警告: Chrome、Firefox、Safariは、HTTPサイトに「保護されていない通信」警告を表示
  • ユーザーの信頼: 鍵マークがないと、ユーザーは個人情報を入力したがらない

4. HTTP/2・HTTP/3が使えない

HTTP/2やHTTP/3は、HTTPSが前提です。これらのプロトコルは高速化技術(多重化、ヘッダー圧縮)を提供しますが、HTTPサイトでは利用できません。

攻撃の仕組み

Firesheep攻撃(2010年)

2010年にリリースされたFirefoxアドオン「Firesheep」は、公衆Wi-Fiでの盗聴攻撃を誰でも実行できるようにしました:

  1. 攻撃者がカフェなどの公衆Wi-Fiに接続
  2. Firesheepを起動し、同じネットワークのHTTP通信を監視
  3. ログイン済みユーザーのセッションCookieを盗む
  4. そのCookieを使って、ユーザーのアカウントに不正ログイン

当時、Facebook、Twitter、AmazonなどはHTTPでCookieを送信していたため、簡単に乗っ取られました。この事件を契機に、主要サイトはHTTPSに移行しました。

SSLストリッピング攻撃

攻撃者が中間者となり、HTTPSをHTTPに降格させる攻撃です:

  1. ユーザーがhttp://bank.comにアクセス(HTTPリンクをクリック)
  2. 本来はhttps://bank.comにリダイレクトされるべき
  3. 攻撃者が中間でリダイレクトを遮断し、HTTPのままユーザーに返す
  4. ユーザーはHTTPでログイン情報を送信し、攻撃者に盗聴される

対策として、後述のHSTS(HTTP Strict Transport Security)が有効です。

実際の被害事例

Lenovo Superfish事件(2015年)

PC製造大手のLenovoが、プリインストールした広告ソフト「Superfish」により、すべてのHTTPS通信を中間者攻撃していました。Superfishは自己署名証明書をインストールし、暗号化通信を復号して広告を挿入していました。同じ証明書がすべてのPCに入っていたため、攻撃者がこれを抽出すれば、Lenovoユーザーの通信を盗聴できる状態でした。

中国のGreat Cannon(2015年)

中国政府が運用する検閲システム「Great Firewall」の攻撃機能「Great Cannon」が、HTTPトラフィックにJavaScriptを注入し、GitHubへのDDoS攻撃を実行しました。HTTPサイトの訪問者が、知らないうちに攻撃の踏み台にされました。

公衆Wi-Fiでのパスワード盗聴

2018年、欧州の空港Wi-Fiで、HTTPサイトのログイン情報が大量に盗まれる事件がありました。攻撃者は正規のWi-Fiアクセスポイントを模倣(Evil Twin攻撃)し、接続した利用者のHTTP通信を盗聴しました。

Nyambushでの検出内容

Nyambushは、以下の項目をチェックします:

  1. HTTPS対応: サイトがHTTPSで応答するか
  2. HTTPからのリダイレクト: http://へのアクセスがhttps://に自動転送されるか
  3. 証明書の有効性:
    • 有効期限切れでないか
    • 証明書のドメインが一致するか
    • 信頼できるCAが発行したか
  4. TLSバージョン: 古いSSL 3.0やTLS 1.0/1.1を使っていないか(脆弱性あり)
  5. 暗号スイート: 脆弱な暗号化方式(DES、RC4など)を使っていないか

スキャン結果では、HTTPSが未設定の場合、Let's Encryptによる無料証明書の取得方法を案内します。

対策方法

1. SSL証明書の取得

Let's Encryptで無料証明書を取得

Let's Encryptは、無料でSSL証明書を発行する認証局です。certbotツールを使えば、簡単に取得・自動更新できます。

# Ubuntu/Debianの場合
sudo apt-get update
sudo apt-get install certbot python3-certbot-nginx

# Nginx用の証明書を取得・設定
sudo certbot --nginx -d example.com -d www.example.com

# 自動更新のテスト
sudo certbot renew --dry-run

Certbotは自動的に以下を行います:

  • 証明書の取得
  • Nginxの設定を書き換えてHTTPSを有効化
  • HTTPからHTTPSへのリダイレクト設定
  • 90日ごとの自動更新

有料証明書の選択肢

Let's Encryptで十分な場合が多いですが、以下のような場合は有料証明書も検討します:

  • EV証明書: ブラウザのアドレスバーに組織名を表示(銀行、EC大手など)
  • ワイルドカード証明書: *.example.comで全サブドメインをカバー(Let's Encryptも対応)
  • サポート重視: 24時間サポートが必要な企業向け

主要なCA:DigiCert、GlobalSign、Sectigo(旧Comodo)

2. Webサーバーの設定

Nginxの場合

server {
    listen 80;
    server_name example.com www.example.com;

    # HTTPからHTTPSへリダイレクト
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name example.com www.example.com;

    # SSL証明書
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    # 推奨されるSSL設定
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers off;

    # OCSP Stapling(証明書の検証を高速化)
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;

    location / {
        root /var/www/html;
        index index.html;
    }
}

Apacheの場合

<VirtualHost *:80>
    ServerName example.com
    Redirect permanent / https://example.com/
</VirtualHost>

<VirtualHost *:443>
    ServerName example.com

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem

    # 推奨されるSSL設定
    SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
    SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256
    SSLHonorCipherOrder off

    DocumentRoot /var/www/html
</VirtualHost>

3. クラウドホスティングの場合

Cloudflareの無料SSL

Cloudflareを使えば、DNSを切り替えるだけで自動的にHTTPSが有効になります:

  1. Cloudflareにアカウント登録
  2. ドメインを追加し、ネームサーバーをCloudflareに変更
  3. SSL/TLS設定で「Full (Strict)」を選択
  4. 「Always Use HTTPS」を有効化

Vercel、Netlifyなどのホスティング

Next.js、Gatsby、StaticサイトをVercelやNetlifyでホスティングする場合、HTTPSは自動で有効化されます。設定不要です。

4. 混合コンテンツの解消

HTTPSページ内でHTTPリソース(画像、CSS、JavaScriptなど)を読み込むと、ブラウザが警告を表示します:

<!-- ❌ 悪い例: HTTP画像 -->
<img src="http://example.com/image.jpg">

<!-- ✅ 良い例: HTTPS画像 -->
<img src="https://example.com/image.jpg">

<!-- ✅ より良い例: プロトコル相対URL -->
<img src="//example.com/image.jpg">

すべてのリソースをHTTPSに変更し、混合コンテンツを解消してください。

5. SSL Labs テスト

設定後は、SSL Labs(https://www.ssllabs.com/ssltest/)でサーバーの安全性をテストします。A+評価を目指しましょう。

まとめ

HTTPSは、現代のウェブサイトにとって必須のセキュリティ対策です。Let's Encryptにより、無料で簡単に導入できるようになりました。HTTPのままサイトを運用することは、ユーザーの個人情報を危険にさらすだけでなく、SEOでも不利になります。

導入は意外と簡単で、certbotを使えば数分で完了します。クラウドホスティングを使っている場合は、さらに簡単です。今すぐHTTPSに移行し、安全で信頼されるウェブサイトを構築しましょう。Nyambushの無料スキャンで、あなたのサイトのHTTPS設定を確認してみてください。

この記事をシェア:Xでポスト

あなたのドメインは安全ですか?

Nyambushで今すぐ無料スキャンして、セキュリティリスクをチェックしましょう。