WordPress HTTPS、SSL、TLS –Webサイト管理者向けのガイド

公開: 2021-02-01

Webサイトにアクセスすると、ブラウザ(クライアントとも呼ばれます)がHTTP要求をWebサーバーに送信します。 WebサーバーがHTTP応答を送信すると、ブラウザはページを画面にレンダリングできます。 ただし、HTTPトラフィックには問題があります。 平文プロトコルです。 これにより、スヌーピングや干渉の影響を受けやすくなります。

攻撃者があなたと同じネットワーク上にいる場合、攻撃者はあなたのHTTPトラフィックを傍受して読み取ることができます。 また、サーバーへの要求と、サーバーからの応答の両方を変更する場合もあります。 これは、中間者(MitM)攻撃として知られています。 これは、ホテルのロビーや公共スペースなどの公共Wi-Fiで簡単に発生する可能性があります。

そのため、WebサイトはHTTPSを使用する必要があります。これにより、トラフィックが傍受されることはありません。 この記事では、HTTPS、SSL、およびTLSとは何かについて説明します。 また、HTTPSで動作するようにWordPressWebサイトを構成する方法についても説明します。

目次

  • SSLとTLSとは何ですか?
  • HTTPSとは何ですか?
    • HTTPSはどのように機能しますか?
      • TLSハンドシェイク
      • 公開鍵と秘密鍵(キーペア)
  • WordPress Webサイトで本当にHTTPSが必要ですか?
    • HTTPS TLS証明書(別名SSL証明書)の取得
    • 共有および管理されたWordPressホスティングでのHTTPS
  • WordPressHTTPSの構成
    • Webサーバーの構成
    • WordPressのURLをHTTPSに設定する
    • WordPressダッシュボードでのTLSの適用(ボーナスのヒント)
  • HTTP Strict Transport Security(HSTS)の追加
    • WebサーバーでのHSTSの構成
    • TLS暗号
    • 私のWordPressはHTTPSで動作しますが、安全ですか?

SSLとTLSとは何ですか?

インターネットが成長し始めると、トラフィックを盗聴したり変更したりすることなく、クライアントとサーバー間で情報を安全に転送するメカニズムが必要であることが明らかになりました。SSLまたはSecure SocketLayerに入ります。 SSLはインターネットセキュリティプロトコルであり、この問題を解決するために1995年にNetscapeによって最初に開発されました。

より具体的には、SSLは次のことを達成するために着手しました。

  • 暗号化—トラフィックを暗号化して、盗聴によって許可されていないサードパーティによって傍受されないようにします。
  • 認証—クライアントが話しているサーバーが、実際に彼らが言っているサーバーであることを確認するために、
  • 整合性—クライアントとサーバー間で送信されるデータが途中で他の誰かによって変更されないようにするため。

ただし、時間の経過とともに、セキュリティ研究者はSSLのセキュリティ問題をいくつか特定しました。 したがって、SSLはTLS(Transport Layer Securityプロトコル)に取って代わられました。 SSLとTLSの内部的な違いは大幅ですが、TLSの目的はほぼ同じです。

注: TLSを参照するためにSSLが使用されていることがよくあります。 SSLはレガシープロトコルであり、安全に使用できなくなりました。 ただし、その人気のために、多くの人が依然としてSSLを頭字語として使用していますが、それらはTLSを意味します。

HTTPSとは何ですか?

HTTPS、またはハイパーテキスト転送プロトコルセキュアは、HTTPプロトコルのセキュアバージョンです。 HTTPSは、以前使用されていたSecure Socket Layer(SSL)よりも改善されたより安全なプロトコルであるTransport Layer Security(TLS)に依存しています。 TLSは、HTTPS要求と応答に暗号化、認証、および整合性を提供します。

HTTPSは、TLSトンネルを通過するHTTP(プロトコルのプレーンテキストバージョン)の要求と応答と考えることができます。 これの専門用語はカプセル化です。 TLSは、HTTPだけでなく、他のプロトコルをカプセル化するために使用される可能性があることに注意してください。

ブラウザのナビゲーションバーでURLの先頭(HTTPSで始まる)を確認するか、緑色の錠前を使用して、HTTPSを使用しているWebサイトを見つけることができます。 HTTPでWebサイトを閲覧している場合、ブラウザはそのWebサイトを安全ではないとマークします。

安全ではないとマークされたHTTPWebサイト

HTTPSはどのように機能しますか?

HTTPSを使用してWebページを要求すると、ブラウザとWebサーバーはTLSハンドシェイクと呼ばれるプロセスを開始します。 TLSハンドシェイクは、クライアントとサーバーが通信するかどうか、および通信する方法を決定するための方法です。 TLSハンドシェイクの過程で、クライアントとサーバーは次のことを行います。

  • 使用するTLSプロトコルのバージョンを決定します(TLS 1.0、1.2、1.3…)、
  • どの暗号スイート(安全な通信を確立するために使用される暗号化アルゴリズムのセット)を使用するかについて合意し、
  • サーバーのIDを認証し、
  • 安全に通信するために、ハンドシェイクの完了後に使用する暗号化キーを生成します。

TLSハンドシェイク

TLSハンドシェイク中に、サーバーはクライアントに証明書を送信して、クライアントがサーバーを認証できることを確認できるようにします。 証明書はパスポートに似ています。認証局(CA)と呼ばれる信頼できる中央機関によって発行され、ブラウザに証明される可能性のあるWebサイトのIDを独自に確立します。

公開鍵と秘密鍵(キーペア)

Webサーバーがクライアントに送信するTLS証明書(SSL証明書と呼ばれることが多い)には、公開鍵が含まれています。 公開鍵は、キーペアと呼ばれる2つの特別なの1つです。 キーペアは2つのキーで構成されます。 公開鍵秘密鍵公開鍵はクライアントと共有されますが、秘密鍵はサーバー上で秘密にされ、開示されることはありません。 キーペアは一緒に鍛造されています。

公開鍵と秘密鍵のペアは特に興味深い関係にあります。サーバーの秘密鍵を知らなくても(これは秘密であり、サーバーだけが知っている必要があります)、クライアントはサーバーの公開鍵を使用してデータを暗号化できます。サーバーはその秘密鍵を使用して復号化できます。 。

これが紛らわしいと思われる場合は、「サーバー」が「ブラウザ」に南京錠で保護された開いたスーツケース(公開鍵)を送信したかのように考えてください。スーツケースに何かを入れて南京錠をロックすると、「サーバー」だけが南京錠の鍵(秘密鍵)は中身を見ることができます。

WordPress Webサイトで本当にHTTPSが必要ですか?

はい。 Webサイトが提供しているトラフィックの種類(個人情報(PII)、カード所有者データ、猫の写真など)に関係なく、HTTPSを介してWebサイトを提供するべきではない理由はまったくありません。

まず第一に、HTTPハッカーでWebサイトを実行すると、WordPressのパスワードとクレデンシャルを簡単に盗み、Webサイトにハッキングする可能性があります。 彼らは自由に利用できるツールを使用してこれらすべてを行うことができます。

セキュリティ上の利点と優れたユーザーエクスペリエンスを除けば、いくつかのパフォーマンス上の利点を提供する新しいHTTP / 2プロトコルは、Webブラウザー内でTLSなしでは使用できません。 さらに、HTTPSには検索エンジン最適化(SEO)の利点もあり、Googleの検索ランキングアルゴリズムの一部です。

HTTPS TLS証明書(別名SSL証明書)の取得

HTTPSを設定するには、すべてを自分で設定する場合はTLS証明書が必要になります。 数十の有料TLS証明書が表示されますが、Let'sEncryptと呼ばれる非営利の認証局から無料のTLS証明書を取得できます。 Let's Encryptから無料で取得する証明書と、有料の証明書にはまったく違いはありません。

共有および管理されたWordPressホスティングでのHTTPS

マネージドまたは共有ホスティングソリューションの場合、ホスティングプロバイダーはHTTPSの追加料金を請求する場合としない場合があります。その場合は、証明書にお金を払う前に、Let'sEncrypt証明書を使用できるかどうかカスタマーサポートに問い合わせてください。代わりにサービス。 Let's Encryptコミュニティフォーラムも、役立つ可能性のある優れたリソースです。

WordPress HTTPSの構成(WordPressサイト全体にTLSを適用する)

設定に応じて、WordPressWebサイト全体にTLSを適用する方法がいくつかあります。 ほとんどの場合、すべてのHTTPトラフィックをHTTPSにリダイレクトするようにWebサーバーを構成します(MozillaのSSL構成ジェネレーターを参照してください)。

また、HTTPSでリッスンするようにWordPressを構成する必要があります。 これは、Really SimpleSSLやWPforceSSLなどのプラグインを使用して行うことができます。 この例では、追加のプラグインを使用せずにこれを行う方法を説明します。

Webサーバーの構成

注意喚起

  • Webサーバー構成をコピー/貼り付けするときは注意し、Webサーバーのドキュメントを参照して、構成が何をしているのかを正確に把握してください。
  • %{HTTP_HOST}(Apache HTTP Server)または$ http_host(Nginx)のいずれかを使用して、オンラインで多くの例を見つけることができます。これらは両方とも、WebサイトをHTTPホストヘッダー攻撃の影響を受けやすくする可能性があります。代わりに、次のように構成にホスト名を入力します。下。

Nginxを使用している場合は、以下を構成できます。

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

または、Apache HTTPサーバーを使用している場合は、以下を構成できます。

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{HTTPS} off
  RewriteRule ^(.*)$ https://www.example.com%{REQUEST_URI} [L,R=301]
<IfModule>

WordPressのURLをHTTPSに設定する

WebサーバーでHTTPSを有効にしたら、WordPressも設定する必要があります。 理論的には、これを手動で行うことができます。WordPressの一般設定でWordPressアドレスとサイトアドレスを変更するだけです。 また、すべてのWebサイトリンクをHTTPからHTTPSに変更するには、データベースで検索と置換を行う必要があります。

[スクリーンショット]

したがって、おそらくプラグインを使用してWordPressWebサイトをHTTPSに切り替える方がはるかに簡単です。 Really Simple SSLのような人気のあるプラグインを使用して、プロセスを進めることができます。

WordPressダッシュボードでTLSを適用する

TLSは、使用されている場合にのみ役立ちます。 そのため、WordPressサイトがTLSをサポートするだけでなく、それを強制することを確認する必要があります。 WordPressダッシュボードには常にHTTPS経由でアクセスする必要があるため、WordPressには特別な構成オプションFORCE_SSL_ADMINが含まれています。これはwp-config.phpでtrueに設定できます。

define('FORCE_SSL_ADMIN', true);

注意喚起

  • Webサイトのセットアップと構成によっては(具体的には、リバースプロキシを使用している場合)、これにより、WordPressダッシュボードへのリクエストが無限のリダイレクトループに入る可能性があります。 これを修正する方法の詳細については、WordPressのドキュメントを参照し、本番環境にロールアウトする前に、ステージング環境で変更を常にテストしてください。
  • さらに、FORCE_SSL_ADMINをtrueに設定する前に、TLSがすでに構成され、正しく機能していることを確認してください。

ボーナスヒント1:HTTP Strict Transport Security(HSTS)の追加

すべてのトラフィックをHTTPSにリダイレクトすることは素晴らしい動きですが、残念ながら、攻撃者はまだいくつかのトリックを持っている可能性があります。 SSLストリップと呼ばれる攻撃により、攻撃者はブラウザをだまして、安全なHTTPSではなくHTTPでサイトを閲覧し、ハードワークを完全に無効にすることができます。

SSLストリップ攻撃の(非常に技術的な)詳細については、以下のMoxieMarlinspikeによる講演をご覧ください。

その結果、ブラウザはHTTP Strict Transport Security(HSTS)を実装するようになりました。 HSTSは、この特定のWebサイトにHTTP経由でアクセスしてはならず、SSLストリップ攻撃を無効にすることをブラウザーに通知する単純なHTTPヘッダーに他なりません。

WebサーバーでのHSTSの構成

注意喚起

  • HTTPSに確信が持てるまで、HSTSを有効にしないでください。このHTTPヘッダーを受信した訪問者は、HTTPS経由でのみサイトを表示できます。
  • 常にmax-age属性を設定します—オプションで、HSTSを最初に展開するときに(潜在的な問題を制限するために)低い値を設定し、HSTSを使用することに自信があるときに値を大きくすることを選択できます

Nginxを使用している場合は、ポート443でリッスンしているサーバーブロック内で次のように構成できます。

# HSTS (ngx_http_headers_module is required) (63072000 seconds)
add_header Strict-Transport-Security "max-age=63072000" always;

または、Apache HTTPサーバーを使用している場合は、ポート443でリッスンしているVirtualHost内で次のように構成できます。

# HTTP Strict Transport Security (mod_headers is required) 
(63072000 seconds)
Header always set Strict-Transport-Security "max-age=63072000"

ボーナスヒント2:TLS暗号の構成

ブラウザとサーバー間のデータ転送が安全であることを保証するために、両当事者は、暗号スイートと呼ばれるもの(認証、暗号化、およびメッセージ認証コード(MAC)アルゴリズムの組み合わせ)を使用してセキュリティ設定をネゴシエートすることに同意します。 、およびデータを安全に転送するため。

残念ながら、多くのレガシー暗号にはセキュリティの脆弱性があり、もはや使用するのは特に安全ではありません。 使用する暗号を決定するのは難しい作業ですが、Mozilla SSL Configuration Generatorを使用すると、ニーズに合ったTLS暗号スイートを簡単に選択できます。 可能であれば、最新または中間のプロファイルを試してみてください。ただし、ユースケースに応じて、特にレガシーブラウザをサポートする必要がある場合、または規制やコンプライアンスの要件を満たす必要がある場合は、わずかに異なる暗号スイート構成を使用する必要があります。

Nginxを使用している場合は、次のTLS暗号を構成できます(Mozilla SSL Configuration Generator中間プロファイルに基づく)。

 # intermediate configuration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES25
6-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDH
E-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;

または、Apache HTTPサーバーを使用している場合は、次のTLS暗号を構成します(Mozilla SSL構成ジェネレーターの中間プロファイルに基づく)。

# intermediate configuration
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder off
SSLSessionTickets off

さらに技術的な洞察を得るために、SSLabsと呼ばれる無料のツールを使用してWebサイトのTLS構成スコアをテストすることもできます。

私のWordPressはHTTPSで動作しますが、安全ですか?

緑の南京錠のアイコンとブラウザのアドレスバーの横にある「安全」という言葉は、HTTPSがすべてのWebサイトのセキュリティ問題を解決する魔法の杖であるとあなたに信じさせたかもしれません。 残念ながら、そうではありません。 ブラウザバーの緑色の南京錠

HTTPSはWordPressのセキュリティのほんの一部です。訪問者は、安全な接続を介してWebサイトを閲覧できます。 ただし、WordPressファイアウォールのようにウェブサイトを保護したり、より安全にすることはできません。 HTTP上で実行されているWebサイトよりも安全であるという意味でもありません。 他のセキュリティ防御と同様に、HTTPSは問題の一部を解決するのに役立ちます。

つまり、HTTPSを実装して適用する必要はありますが、安心してセキュリティについて心配する必要がないという意味ではありません。 あなたはまだすべきです:

  • 二要素認証を追加する
  • ファイル整合性監視プラグインをインストールする
  • 強力なWordPressパスワードポリシーを適用する
  • あなたのウェブサイトで起こったすべての変更の記録としてWordPressアクティビティログを保管してください
  • 適切なファイアウォールを使用してください。