【ネットワーク】HTTPS通信の仕組みとHTTPSの導入法

ネットワーク

はじめに

インターネット通信は基本的に「HTTP」(HyperText Transfer Protocol)を使って行われますが、これは通信内容が暗号化されていないため、セキュリティ上のリスクがあります。
特に、ユーザー情報をやり取りするサイトでは、通信内容を第三者に盗まれないようにするために、HTTPS(HyperText Transfer Protocol Secure)を導入することが推奨されています。本記事では、HTTPSの仕組みとその導入方法について解説します。

具体的には、AWSのRoute53を使ってEC2のサーバーにHTTPSを導入する方法を解説します!

HTTPSとは?—基礎知識と通信の仕組み

HTTPSは、HTTPにSSL(Secure Socket Layer)またはTLS(Transport Layer Security)と呼ばれる暗号化技術を組み合わせた通信プロトコルです。これにより、通信内容が暗号化され、第三者による盗聴や改竄を防ぐことができます。

HTTPとHTTPSの最大の違いは、通信の暗号化にあります。HTTPでは通信が平文で送信されるため、パスワードや個人情報が簡単に盗まれてしまう可能性があります。一方、HTTPSでは、通信が暗号化されるため、情報漏洩を防ぐことができます。

SSL/TLSは、クライアント(ユーザー側)とサーバー間の通信を安全に保つために、認証と暗号化を行います。これにより、通信中にデータが第三者に読み取られたり、改竄されたりすることを防ぎます。以下に、HTTPS通信の流れを3つの主要なステップに分けて解説します。

①証明書をリクエスト

クライアント(例えば、ウェブブラウザ)がHTTPSサイトにアクセスすると、サーバーはSSL/TLS証明書をクライアントに送信します。この証明書には、サーバーの公開鍵や認証局(CA)の情報が含まれています。クライアントはこの証明書が信頼できるかを確認し、問題がなければ次のステップに進みます。

②証明書を使って共通鍵を生成

証明書が確認されると、クライアントはサーバーとの通信を暗号化するための共通鍵(セッションキー)を生成します。このセッションキーは、サーバーの公開鍵を使って暗号化され、サーバーに送信されます。サーバーは自分の秘密鍵を使ってセッションキーを復号化し、クライアントとサーバーで同じ共通鍵を持つことになります。

③共通鍵でやり取り

共通鍵が確立すると、クライアントとサーバーはこの鍵を使用して、暗号化されたデータをやり取りします。セッションキーを使うことで、通信内容は暗号化され、第三者による盗聴や改ざんを防ぐことができます。

HTTPS導入の方法—SSL証明書の取得と設定

HTTPSを導入するためには、SSL証明書をサーバーにインストールする必要があります。SSL証明書にはいくつかの種類があり、それぞれ用途に応じて選択できます。

  • ドメイン認証(DV)証明書:ドメインの所有者を認証する最も基本的な証明書。低コストで取得が簡単。
  • 企業認証(OV)証明書:企業や団体の認証も含まれており、信頼性が高い。
  • EV証明書(Extended Validation):最も信頼性が高く、ウェブブラウザに企業名が表示されることが特徴。

証明書の取得には、証明書発行機関(CA)を通じて申し込み、必要な書類を提出することが必要です。例えば、AWSのRoute 53を使用してSSL証明書を管理する場合、AWS Certificate Manager (ACM)を利用することができます。

EC2のIPアドレスを固定する(Elastic IPの設定)

AWS EC2インスタンスを使用する場合、インスタンスを再起動するとパブリックIPアドレスが変更されてしまいます。そのため、まずは固定のIPアドレスを割り当てるためには、Elastic IPを使用する必要があります。

Elastic IPの設定手順

以下の手順でElastic IPを設定し、固定IPをEC2インスタンスに割り当てることができます:

  1. AWS Management Consoleにログインし、「EC2」サービスに移動します。
  2. 左側のメニューから「Elastic IPs」を選択し、「Allocate new address」をクリックします。
  3. 新しいElastic IPを割り当て、次に「Associate this address」をクリックして、対象のEC2インスタンスにElastic IPを関連付けます。

これで、再起動後もIPアドレスが変更されず、常に同じIPアドレスで接続できるようになります。

Certbotを使ったSSL証明書の取得と設定

無料でSSL証明書を取得する方法として、Certbotを利用することができます。CertbotはLet’s Encryptという認証機関(CA)から無料のSSL証明書を発行し、設定を自動化するツールです。以下は、AWS EC2インスタンスにCertbotを使ってSSL証明書を導入する手順です。

ステップ1:EC2インスタンスにCertbotをインストール

まず、EC2インスタンスにCertbotをインストールします。EC2がUbuntuの場合、以下のコマンドでインストールします。

sudo apt update
sudo apt install certbot python3-certbot-apache -y

ステップ2:Route 53のDNS設定を確認

Certbotを使用するには、ドメインのDNS設定で、ウェブサーバーが外部からアクセスできることを確認する必要があります。以下に、AWS Route 53でのDNS設定手順を詳しく説明します。

1. Route 53にドメインを追加

まず、AWS Route 53でドメインの管理を行います。AWS Management Consoleにログインし、Route 53に移動します。

次に、Hosted zonesを選択し、「Create hosted zone」をクリックして、ドメイン名を入力します。これにより、Route 53でDNS設定を管理するためのゾーンが作成されます。

2. ドメインのAレコードを設定

ドメインのAレコードを、EC2インスタンスのパブリックIPアドレスに紐づけます。Route 53のHosted zoneで、「Create Record Set」を選択し、以下のように設定します:

  • Name:空欄(もしくは「www」など、サブドメインを設定する場合はその名前)
  • Type:A – IPv4 address
  • Value:EC2インスタンスのパブリックIPアドレス
  • TTL:デフォルト(300秒など)

設定が完了したら、「Create」をクリックしてレコードを保存します。

3. CNAMEレコードを設定(必要に応じて)

サブドメイン(例:www)を設定する場合は、CNAMEレコードを追加します。これにより、「www.yourdomain.com」などが「yourdomain.com」へリダイレクトされます。

ステップ3:CertbotでSSL証明書を取得

次に、Certbotを使用してSSL証明書を取得します。以下のコマンドを実行します。

sudo certbot --apache -d yourdomain.com -d www.yourdomain.com

このコマンドを実行すると、Certbotが自動的にSSL証明書を取得し、Apacheの設定を更新してHTTPSを有効にします。途中で、メールアドレスや利用規約に同意するよう求められます。

ステップ4:証明書の自動更新設定

Let’s Encryptの証明書は90日ごとに期限が切れるため、自動更新を設定しておくと便利です。以下のコマンドを実行して、証明書の更新が定期的に行われるように設定します。

sudo certbot renew --dry-run

これで自動更新が正常に動作することを確認できます。

4. ApacheやNginxの設定

SSL証明書を取得した後、ウェブサーバー(ApacheまたはNginx)の設定を行い、HTTPS通信を適切に処理する必要があります。

Apacheの設定

ApacheでHTTPSを有効にするためには、まずSSLモジュールを有効にし、SSL設定を行います。

sudo a2enmod ssl
sudo systemctl restart apache2

次に、SSL設定ファイルを編集して、証明書を指定します。通常、設定ファイルは「/etc/apache2/sites-available/default-ssl.conf」にあります。以下のように証明書を指定します:

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/yourdomain.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/yourdomain.com/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/yourdomain.com/chain.pem

設定後、Apacheを再起動します:

sudo systemctl restart apache2

Nginxの設定

Nginxの場合、SSL設定を有効にするために、設定ファイルを編集します。通常は「/etc/nginx/sites-available/default」に設定されており、以下のようにSSL証明書のパスを指定します:

server {
    listen 443 ssl;
    server_name yourdomain.com;

    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/yourdomain.com/chain.pem;

    # その他の設定(例えば、ファイルの保存場所やリダイレクト設定など)
    root /var/www/html;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
}

設定が完了したら、Nginxを再起動します:

sudo systemctl restart nginx

HTTPS導入後の効果と注意点

HTTPSを導入することにより、通信が暗号化されるため、以下のような利点があります:

  • セキュリティの向上:ユーザーの個人情報やログイン情報を保護します。
  • SEO効果:Googleなどの検索エンジンはHTTPSサイトを優先的に評価するため、SEOに有利です。
  • 信頼性の向上:ユーザーはHTTPSサイトであることを視覚的に確認できるため、信頼性が向上します。

まとめ

HTTPSの導入は、ウェブサイト運営者としてセキュリティを強化するために欠かせないステップです。通信内容が暗号化されることにより、ユーザーの個人情報を保護し、SEOにも好影響を与えます。SSL証明書を使ってHTTPSを設定する方法は、Certbotを使用すれば無料で簡単に導入できます。さらに、ApacheやNginxの設定も重要なポイントです。これらを適切に行うことで、安全で信頼性の高いウェブサイトを構築することができます。

参考文献

コメント

Verified by MonsterInsights
タイトルとURLをコピーしました