序章

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を保護する方法

前提条件

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

sudo権限を持つroot以外のユーザーを利用できるようにする必要があります。 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 :これは、新しい証明書と新しいキーを同時に生成することを指定します。 前の手順で証明書に署名するために必要なキーを作成しなかったため、証明書と一緒に作成する必要があります。 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の一般名(例: サーバーFQDNまたはあなたの名前)[]: your_domain.comメールアドレス[]: admin  @あなたの _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;
    }

}