End-to-End CloudFlare SSL暗号化を設定する方法

SSLを任意のウェブサイトに設定することは挑戦です。サイトの訪問者、ブラウザ、および検索エンジンは、適切にセキュアソケットレイヤー(SSL)で保護されたウェブサイトを評価します。以前は、このプロセスにはSSL証明書の購入、インストール、および構成が含まれていました。しかし、Cloudflare SSLを使用すれば、わずか数回のクリックでSSLの構成プロセスを完了できます!

この記事では、Cloudflareを使用してサイトをSSL暗号化で構成する方法を学びます。つまり、エンドツーエンドの暗号化されたSSL接続に進んでいきましょう!

前提条件

このチュートリアルに従うには、以下のいくつかの前提条件が必要です:

  • A Cloudflare account with an existing website and domain pointed to the Cloudflare nameservers.
  • NGINXがインストールおよび構成されたUbuntu Linuxサーバー。 このチュートリアルではLinuxとNGINXを使用していますが、同じ一般的なプロセスはIISまたはApacheにも適用できます。

Cloudflare Universal SSLの設定: これは始まりに過ぎません

複数の方法で、Cloudflareを使用してSSLを構成することができます。しばしば、最も迅速な方法はUniversal SSLを選択することです。なぜなら、Universal SSLでは、SSL証明書を見つけて購入する代わりに、Cloudflareが証明書を提供し、その証明書を通じて送信されるすべてのトラフィックがそれを使用するからです。

Universal SSLを有効にした後、Cloudflareは訪問者と検索エンジンの両方に有効なSSL証明書を提示します。Cloudflareはまた、サーバーまたはウェブサイトをその証明書を使用するように構成することを必要としません。素晴らしいですね!

1. ウェブブラウザを起動し、Cloudflareダッシュボードにログインします。

2. 下のアカウントドメインリストからサイトに移動します。

Choose the site to change options for.

3. 今、SSL/TLSをクリックして、サイトの暗号化オプションを表示します。

The SSL/TLS Encryption mode page

4. Flexibleオプションを選択して、Universal SSLを有効にします。選択したら、変更が直ちに有効になります。これで、ブラウザとCloudflare間でサイトが暗号化されました!

Enabling Universal SSL on Cloudflare

完全なエンドツーエンドSSL暗号化の構成

Universal SSLはサイトをセキュリティで保護するための優れたオプションですが、サーバーとCloudflare間のトラフィックは保護されません。幸いなことに、Cloudflareからサーバーへのトラフィックを暗号化する2つの暗号化モード、FullとFull(strict)の暗号化があります。それぞれに異なる認証のインストール要件があります。

  • Full – サーバーに証明書が必要ですが、これは自己署名証明書でもかまいません。
  • Full (strict) – インストールされたサーバーサイド証明書は有効な証明書でなければなりません。

これらの暗号化の違いとそれらの設定方法について説明しましょう。

セルフサイン証明書を使用した完全なSSL/TLS暗号化の設定

ユニバーサルSSLとは異なり、完全なSSL/TLS暗号化では、ウェブサーバーがSSL証明書を正しく提供してトラフィックをCloudflareに対して暗号化する必要があります。これを達成する方法はいくつかありますが、このチュートリアルではLinuxサーバーとNGINXを使用した手順を示します。

セルフサイン証明書の生成

Cloudflareとオリジンサーバー間の接続を暗号化するには、SSL証明書が必要です。完全なSSL/TLS暗号化モードでは証明書が完全に信頼されている必要はないため、すぐに実行できるセルフサイン証明書を使用できます。

1. Linuxウェブサーバーにセキュアシェル(SSH)で接続します。

2. 標準のUbuntu SSLディレクトリ(/etc/ssl)に移動するには、以下のコマンドを実行します。cd /etc/ssl

cd /etc/ssl
Navigating to the /etc/ssl directory

3. 次に、サイトの公開鍵と秘密鍵を両方生成します。これには以下のopensslコマンドを実行します。

このコマンドはいくつかのことを達成します:

  • -x509パラメータで提供されるX.509証明書を要求します。
  • NGINXによって参照されると、-nodesパラメータを使用してNGINXが起動時に証明書を読み取ることができます。
  • 証明書の有効期間を指定します。
  • 新しい公開鍵と秘密鍵を、2048ビットのRSA暗号化(`rsa:2048`)を使用して、-newkeyを介して作成します。
  • 秘密鍵を/etc/ssl/private/nginx-selfsigned.key-keyoutパラメーターを使用して保存します。
  • 公開鍵を/etc/ssl/certs/nginx-selfsigned.crt-outパラメーターを使用して保存します。
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt

もしopensslCan't load /root/.rnd into RNGという無害なエラーを返した場合は、/etc/ssl/openssl.cnf#RANDFILE = $ENV::HOME/.rnd行をコメントアウトする必要があります。すべての最新バージョンのopensslはランダムエントロピーデータにシステム/dev/urandomデバイスを使用し、特定のファイルをシードとして必要としません。

4. コマンドを正常に実行した後、opensslがいくつかの情報を求めます。このチュートリアルで提供されたすべての値を以下に示します。

  • 国名: US
  • 州または州の名前: イリノイ
  • 地域名: ブルーミントン
  • 組織名: テスト会社, LLC
  • 組織単位名: <空白>
  • 共通名: test.adamlistek.me
  • 電子メールアドレス: [email protected]
Generating a self-signed certificate

5. 最後に、testコマンドを使用して証明書が存在するか確認します。 testコマンドが(echo $?0を返す場合、ファイルは期待どおり存在しています。 以下のスクリーンショットで、各コマンドが0の値を返したことが確認できます。

test -f /etc/ssl/private/nginx-selfsigned.key; echo $?
 test -f /etc/ssl/certs/nginx-selfsigned.crt; echo $?
Verifying that the certificate files exist

NGINXの設定

証明書が生成され、/etc/ssl/certsおよび/etc/ssl/privateキーの場所に保存されたので、NGINXを設定して証明書を適用し、サイトのコンテンツを提供する必要があります。

NGINXのサイト設定は、通常、仮想ホストファイルに含まれるserverブロックで定義されます。以下の例では、基本的なサイト構成がtest.adamlistek.me.confファイルに保存され、メインのnginx.confファイルに含まれています。

1. まず、新しい仮想ホストファイルを作成します。名前は自由に選択できますが、この例ではtest.adamlistek.me.confとします。ディレクトリ/etc/nginx/vhosts.dの下に保存します。次に、以下の内容を仮想ホストファイルにコピーして保存します。

この例ではtest.adamlistek.meドメイン名を独自のものに置き換えてください。そして/etc/nginx/vhosts.d 場所が存在しない場合は、mkdir /etc/nginx/vhosts.dを実行してディレクトリを作成します。

server {
   # IPv4とIPv6でポート80で聴く
   listen 80;
   listen [::]:80;
 server_name test.adamlistek.me;
 # 任意のパラメータで301リダイレクトを行い、以下のSSLサーバーブロックにリダイレクトします
   return 301 https://test.adamlistek.me$request_uri;
 }
 server {
   # HTTP2を有効にしてIPv4とIPv6でポート443で聴く(SSLが必要)
   listen 443 ssl http2;
   listen [::]:443 ssl http2;
 server_name test.adamlistek.me;
 # 公開およびプライベート証明書の場所
   ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
   ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
 # 読み込むWebファイルの場所、これはデフォルトのNGINXの場所です
   root /usr/share/nginx/html;
 # ルートドメインのリクエストで提供されるデフォルトファイル
   index index.html;
 }

2. 主要なNGINX構成ファイルである/etc/nginx/nginx.confが、httpブロック内の必要なinclude行を含んでいることを確認します。この行は、ブロックの最後に配置されています。

# サーバーの設定はここに記述します
 …
 http {
     # 追加の設定はここに記述します# 仮想ホストを含める
     include /etc/nginx/vhosts.d/*.conf;
 }

3. もしsystemdを使用している場合、つまりLinux用のモダンなシステムおよびサービスマネージャーを使用している場合は、以下のコマンドでNGINXを再起動します。

service nginx restart

4. Cloudflareに戻り、自己署名証明書が機能していることを確認します。そのためには、以下に示すようにDNSレコードの「オレンジクラウド」を無効にします。プロキシステータスの下にある。 「オレンジクラウド」オプションを無効にすると、Cloudflareをバイパスしてウェブサーバーから直接リクエストを処理します。

Disabling Cloudflare proxying via Proxy Status.

5. ウェブブラウザでウェブサイトに移動して、新しく作成した自己署名証明書が返されることを確認してください。 これにより、以下に示す警告ページが表示されます。

Displaying the self-signed certificate error.

6. 最後に、CloudflareでフルTLS/SSL暗号化を有効にします。 これを行うには、以前に無効にしたDNSレコードで「オレンジクラウド」Cloudflareプロキシステータスを再度有効にします。 次に、 SSL/TLS タブに移動し、以下に表示される 完全 ラジオボタンをクリックします。

Enabling Full SSL/TLS encryption on Cloudflare.

フル(厳格)SSL/TLS暗号化のオリジン証明書を生成する

フル暗号化モードでは、Webサーバーによって提示される証明書が実際の有効な証明書チェーンを持っていることを保証しません。 その代わりに、非厳格な暗号化を選択し、Cloudflareはサーバーによって提示される任意の証明書を受け入れます。

Cloudflareは、オリジンサーバー接続を保護するための無料のTLS証明書を生成する機能を提供しています。 ただし、Cloudflareが提供するオリジン証明書を使用すると、2つの欠点があります。 1つ目は、証明書を手動で生成およびインストールする必要があることです。 2番目は、証明書がCloudflare以外のブラウザに信頼されない自己署名証明書のように見えることです。

Origin CA Create Certificate API エンドポイントを使用して証明書の生成を自動化することは可能ですが、これはこのチュートリアルの範囲外です。

1. SSL/TLS タブに移動し、以下に示すようにオリジンサーバーをクリックして、証明書の作成ボタンをクリックします。

Navigating to the Origin Server page.

2. 下記のように、デフォルトオプションは既にドメインのワイルドカード証明書を生成するように設定されています—素晴らしいですね!ですので、デフォルトオプションをそのままにし、ページの右下隅にある作成ボタンをクリックして証明書を生成してください。

A wildcard certificate, shown as *.domain.com, means that any subdomain will also be covered by this certificate including www.

Creating a Cloudflare-provided origin server certificate.

3. 新しく作成した証明書をLinuxシステムに追加するには、まずGNU nanoテキストエディタを使用してプライベートキーとパブリックキーを保存します。保存するキーが2つあるため、キーファイルを1つずつ保存する必要があります。

オリジナル証明書を生成した時点でのみプライベートキーが利用可能であるため、プライベートキーを保存することを確認してください。このキーを誤って失った場合は、証明書を取り消して新しい証明書を発行してください。

端末を開いて、次のコマンドを実行してnanoで公開鍵ファイル(nginx-test.adamlistek.me.crt)を作成して開きます。

次に、Cloudflareに戻って、下記のように表示されるコピーするオプションをクリックしてオリジン証明書キー(公開鍵)をコピーします。次に、nanoで開いた公開鍵ファイルにコピーした公開鍵を貼り付けます(Ctrl+U)。変更内容を保存します(Ctrl+O)し、nanoから終了します(Ctrl+X)。

公開鍵ファイルを保存した後、キーファイルを作成し、Cloudfareからキーをコピーしてキーファイルに保存するプロセスを同じように繰り返します。ただし、今回はプライベートキーファイル(nginx-test.adamlistek.me.key)を作成しています。

# パブリックキー、Origin Certificiateセクションの下
 nano /etc/ssl/certs/nginx-test.adamlistek.me.crt
# 同じ名前のセクションの下にあるプライベートキー
 nano /etc/ssl/private/nginx-test.adamlistek.me.key
Copying the public/private certificate key information.

4. これで、公開鍵と秘密鍵が作成されました。証明書の場所を指定するために、test.adamlistek.me.conf構成ファイルを以下の行に変更して、NGINXを指定します。

 ssl_certificate /etc/ssl/certs/nginx-test.adamlistek.me.crt;
 ssl_certificate_key /etc/ssl/private/nginx-test.adamlistek.me.key;

5. 新しい証明書を適用するには、次のコマンドでNGINXを再起動します。

service nginx restart

6. CloudflareのSSL/TLSタブに戻り、下に示すように、SSL/TLS暗号化モードを更新して、Full (strict)をクリックします。

Setting the Encryption mode to Full (strict).

LetsEncryptでFull (strict) SSL/TLS暗号化を有効にする

Cloudflareのオリジン証明書を使用する最大の欠点は、それがCloudflareだけで信頼されるということです。完全にブラウザで信頼される証明書が必要な場合、フォールバックとしてまたはさらなる制御のために、LetsEncryptは適切な証明書を生成する機能を提供します。

有効な証明書を生成するための一般的な選択肢であるLetsEncryptを使用できますが、複数のLetsEncryptクライアントが利用可能です。このチュートリアルではacme.shクライアントを示します。

すでにCloudflareを使用しているのであれば、LetsEncryptとのDNSプロビジョニングのための最良の方法の1つは、DNSオプションを使用することです。

1. まず、ターミナルを開いてcurlコマンドを使用してacme.shをインストールします。

curl https://get.acme.sh | sh
Installing the acme.sh client.

2. 次に、インストールディレクトリにあるaccount.confファイルを作成または変更して、保存されたCloudflare APIキーを追加します。これらのキーは、Cloudflareダッシュボードのプロファイル —> APIトークンセクションで見つけることができます。

特定の許可制限トークンを作成することもできますが、このチュートリアルの目的で、以下に示すようにグローバルAPIキーを適用します。

SAVED_CF_Key='cloudflareglobalapikey'
 SAVED_CF_Email='[email protected]'

3. 次のコマンドを使用して証明書を生成します。以下のコマンドでは、acme.shクライアントにCloudflare(dns_cf)を使用して証明書の所有権を確認(--dns)するよう指示し、待機時間(--dnsslep)を20秒に設定してから、証明書を発行(--issue)します。(-d) ドメイン(test.adamlistek.me)。

コマンドが完了すると、以下に、証明書、証明書キー、中間CA証明書、および完全なチェーン証明書を見つけることができる場所が表示されます。

acme.sh --issue --dns dns_cf --dnssleep 20 -d test.adamlistek.me
Generating the LetsEncrypt certificate.

4. 前述のように、NGINXサイトの構成を変更してssl_certificatessl_certificate_keyの場所を変更します。/home/userをお使いのacme.shインストールの場所に置き換えてください。

ssl_certificate /home/user/.acme.sh/test.adamlistek.me/test.adamlistek.me.csr;
 ssl_certificate_key /home/user/.acme.sh/test.adamlistek.me/test.adamlistek.me.key;

5. 次のコマンドでNGINXを再起動して新しい構成を適用します。

service nginx restart

6. 最後に、Cloudflare SSL/TLS暗号化モードを更新してSSL/TLSタブに移動し、完全(厳密)をクリックします。

Setting the Encryption mode to Full (strict).

結論

このチュートリアルでは、さまざまなCloudflareの提供するSSL/TLSオプションを使用してサイトを保護する方法を学びました。Cloudflare SSLの設定にLetsEncryptを追加することで、柔軟でユーザー管理可能なオリジン証明書のオプションが追加されます!

サイト訪問者への接続を完全に安全にするためのさまざまなオプションの知識を持つことで、Cloudflare SSLを使用してサーバーへの完全に安全な接続に進むことができますか?

Source:
https://adamtheautomator.com/cloudflare-ssl/