序章

TLS 、つまりトランスポート層セキュリティ、およびその前身である SSL は、セキュアソケットレイヤーの略で、通常のトラフィックを保護された暗号化ラッパーでラップするために使用されるWebプロトコルです。

このテクノロジーを使用すると、サーバーは、メッセージが外部の第三者によって傍受されて読み取られることを心配することなく、サーバーとクライアントの間でトラフィックを安全に送信できます。 証明書システムは、ユーザーが接続しているサイトのIDを確認するのにも役立ちます。

このガイドでは、Ubuntu14.04サーバー上のNginxWebサーバーで使用するための自己署名SSL証明書を設定する方法を示します。 自己署名証明書は、Webブラウザの信頼できる認証局の1つによって署名されていないため、ユーザーのサーバーのIDを検証しませんが、Webクライアントとの通信を暗号化できます。

注:自己署名証明書の代わりにLet’sEncryptの使用を検討することをお勧めします。 Let’s Encryptは、ほとんどのWebブラウザで信頼されている無料のSSL/TLS証明書を発行する新しい認証局です。 チュートリアルをチェックして開始してください: Ubuntu14.04でLet’sEncryptを使用してNginxを保護する方法

前提条件

このガイドを開始するには、サーバーにいくつかの基本的な設定を行う必要があります。

root以外のユーザーが利用可能である必要があります。 sudo 特権。 Ubuntu 14.04 初期サーバー設定の手順1〜4に従って、このようなユーザーアカウントを設定する方法を学ぶことができます。

その後、NginxWebサーバーもインストールする必要があります。 LEMP(Linux、Nginx、MySQL、PHP)スタック全体をサーバーにインストールする場合は、 Ubuntu14.04でのLEMPのセットアップに関するガイドに従ってください。

Nginx Webサーバーが必要な場合は、代わりに次のように入力できます。

sudo apt-get update
sudo apt-get install nginx

ステップ1—SSL証明書を作成する

まず、すべてのSSL情報を保持するために使用されるディレクトリを作成することから始めます。 これは、Nginx構成ディレクトリの下に作成する必要があります。

sudo mkdir /etc/nginx/ssl

ファイルを配置する場所ができたので、次のように入力して、SSLキーと証明書ファイルを一度に作成できます。

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt

一連の質問があります。 それを説明する前に、発行しているコマンドで何が起こっているかを見てみましょう。

  • openssl :これは、OpenSSL証明書、キー、およびその他のファイルを作成および管理するための基本的なコマンドラインツールです。
  • req :このサブコマンドは、X.509証明書署名要求(CSR)管理を使用することを指定します。 「X.509」は、SSLおよびTLSが鍵および証明書の管理のために準拠している公開鍵インフラストラクチャ標準です。 新しいX.509証明書を作成したいので、このサブコマンドを使用しています。
  • -x509 :これは、通常行われるように証明書署名要求を生成するのではなく、自己署名証明書を作成することをユーティリティに通知することにより、前のサブコマンドをさらに変更します。
  • -nodes :これは、パスフレーズで証明書を保護するオプションをスキップするようにOpenSSLに指示します。 サーバーの起動時に、ユーザーの介入なしにNginxがファイルを読み取れるようにする必要があります。 パスフレーズは、再起動するたびに入力する必要があるため、これが発生するのを防ぎます。
  • -365日:このオプションは、証明書が有効であると見なされる期間を設定します。 ここで1年間設定しました。
  • -newkey rsa:2048 :これは、新しい証明書と新しいキーを同時に生成することを指定します。 前の手順で証明書に署名するために必要なキーを作成しなかったため、証明書と一緒に作成する必要があります。 The rsa:2048 部分は、2048ビット長のRSAキーを作成するように指示します。
  • -keyout :この行は、作成している生成された秘密鍵ファイルを配置する場所をOpenSSLに指示します。
  • -out :これはOpenSSLに作成する証明書を配置する場所を指示します。

上で述べたように、これらのオプションはキーファイルと証明書の両方を作成します。 情報を証明書に正しく埋め込むために、サーバーについていくつか質問があります。

プロンプトに適切に記入します。 最も重要な行は、 Common Name (e.g. server FQDN or YOUR name). サーバーに関連付けるドメイン名を入力する必要があります。 ドメイン名がない場合は、代わりにパブリックIPアドレスを入力できます。

プロンプト全体は次のようになります。

国名(2文字のコード)[AU]:米国の州または州の名前(フルネーム)[一部の州]:ニューヨークの地域名(例:市)[]:ニューヨーク市の組織名(例:会社)[インターネットWidgits Pty Ltd]: Bouncy Castles、Inc.組織単位名(例:セクション)[]: Ministry of Water Slidesの一般名(例: server FQDN or YOUR name) []:your_domain.com Email Address []:admin@your_domain.com 

作成した両方のファイルがに配置されます /etc/nginx/ssl ディレクトリ。

ステップ2—SSLを使用するようにNginxを構成する

Nginx構成ディレクトリの下にキーファイルと証明書ファイルを作成しました。 次に、サーバーブロックファイルを調整してこれらを利用するようにNginx構成を変更する必要があります。 この記事でNginxサーバーブロックについて詳しく知ることができます。

Nginxバージョン0.7.14以降(Ubuntu 14.04にはバージョン1.4.6が付属)は、通常のHTTPトラフィックと同じサーバーブロック内でSSLを有効にできます。 これにより、同じサイトへのアクセスをより簡潔に構成できます。

サーバーブロックは次のようになります。

サーバー{リッスン80default_server; リッスン[::]:80 default_server ipv6only = on;
    root /usr/share/nginx/html;
    index index.html index.htm;

    server_name your_domain.com;

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

}

通常のHTTP接続を許可しながら、この同じサーバーブロックでSSLを機能させるために必要なのは、次の行を追加することだけです。

サーバー{リッスン80default_server; リッスン[::]:80 default_server ipv6only = on;
    <span class="highlight">listen 443 ssl;</span>

    root /usr/share/nginx/html;
    index index.html index.htm;

    server_name <span class="highlight">your_domain.com</span>;
    <span class="highlight">ssl_certificate /etc/nginx/ssl/nginx.crt;</span>
    <span class="highlight">ssl_certificate_key /etc/nginx/ssl/nginx.key;</span>

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

}

終了したら、ファイルを保存して閉じます。

今、あなたがしなければならないのはあなたの新しい設定を使用するためにNginxを再起動することです:

sudo service nginx restart

これにより、サイト構成が再ロードされ、HTTPとHTTPS(SSL)の両方の要求に応答できるようになります。

ステップ3—セットアップをテストする

これでサイトにSSL機能が追加されますが、テストして確認する必要があります。

まず、通常のHTTPを使用してサイトにアクセスできることを確認するためにテストしてみましょう。 Webブラウザーで、サーバーのドメイン名またはIPアドレスに移動します。

http :// server_domain_or_IP

通常のWebサイトが表示されます。 私の例では、デフォルトのNginxページを提供しているだけです。

このページが表示された場合でも、サーバーはHTTPリクエストを正しく処理しています。

これで、サーバーがSSLを使用して通信できるかどうかを確認できます。 これを行うには、 https の代わりにプロトコル http プロトコル。

https :// server_domain_or_IP

Webブラウザに次のような警告が表示される可能性があります。

これは予想されます。 これは、ブラウザが信頼するように構成されている認証局によって署名されていないため、接続しようとしているサーバーのIDを確認できないことを示しています。 自己署名証明書を作成したので、これは完全に理にかなっています。

「続行」、「続行」、または同様のオプションが利用可能な場合はクリックします。 あなたはあなたのサイトを再び見るはずです:

ブラウザに、アドレスバーに取り消し線が引かれた「https」または壊れたまたは取り消し線が引かれた「ロック」アイコンが表示される場合があります。 ロックアイコンをクリックすると、接続に関する詳細情報が表示されます。

ご覧のとおり、問題は、サーバーが信頼するように構成されている認証局によって署名されていないため、ブラウザーがサーバーのIDを確認できないことだけです。 中央のセクションは、接続が暗号化されていることを示していますが、その目標を達成しました。

結論

HTTPリクエストとSSLリクエストの両方を処理するようにNginxサーバーを構成しました。 これにより、クライアントと安全に通信し、外部の関係者がトラフィックを読み取れないようにすることができます。

公開WebサイトにSSLを使用することを計画している場合は、各訪問者に恐ろしい警告が表示されないように、信頼できる認証局からSSL証明書を購入する必要があります。

ジャスティン・エリングウッド