Secure Sockets Layer(SSL)は、Webサーバーにとって必須のものとなりました。なぜでしょうか?セキュリティが注目されるようになり、すべての企業がWebサーバーでコンテンツを安全に提供しなければならないという現実に直面しているからです。
そのためにはSSLを使用する必要があります。もしNGINXをお使いの場合は幸運です。このプロセスは(少し複雑ではありますが)かなり可能です。
NGINX を実行している Ubuntu Server 18.04 で SSL を有効にする手順を詳しく説明します。ここでは自己署名証明書を使用しますが、公式の証明機関 (CA) が発行した証明書の方がはるかに優れています。実際、自己署名証明書はテスト目的のみに使用してください。
参照: 災害復旧と事業継続計画 (Tech Pro Research)
必要なもの
これを実現するには、Ubuntu Server 18.04 上で NGINX を実行し、自己署名証明書を用意しておく必要があります。Ubuntu と NGINX は既に起動済みであることを前提としています。自己署名証明書の作成手順を順に説明します。
自己署名証明書
最初のステップは、自己署名証明書を生成することです。これを行うには、サーバーにログインし、次のコマンドを実行します。
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt
いくつかの質問(国名、州、地域など)が表示されます。最も重要なのはCommon Name(共通名)です。この質問には、サーバーのIPアドレス(図A)を入力してください。
図A
コマンドが完了すると、必要なファイルが/etc/sslディレクトリに追加され、使用できるようになります。
NGINXの設定
次に、NGINX で SSL を使用するように設定する必要があります。まず、次のコマンドで新しい設定スニペットファイルを作成します。
sudo nano /etc/nginx/snippets/self-signed.conf
その新しいファイルに次の内容を追加します。
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
そのファイルを保存して閉じます。
次に、新しく生成したSSLキーと証明書を指定する2つ目の設定スニペットを作成します。これを行うには、次のコマンドを実行します。
sudo nano /etc/nginx/snippets/ssl-params.conf
その新しいファイルに次の内容を追加します。
ssl_protocols TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
ssl_ecdh_curve secp384r1; # Requires nginx >= 1.1.0
ssl_session_timeout 10m;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off; # Requires nginx >= 1.5.9
# ssl_stapling on; # Requires nginx >= 1.3.7
# ssl_stapling_verify on; # Requires nginx => 1.3.7
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
自己署名証明書を使用しているため、SSL Stapling(SSL証明書の有効性を迅速かつ安全に確認する方法)を無効にしています。自己署名証明書を使用していない場合は、2行の前の#記号を削除してください。また、resolver行を、優先DNSサーバーに合わせて変更することもできます。ファイルを保存して閉じてください。
また、次のコマンドを使用して dhparam.pem ファイルを生成する必要があります。
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
上記のコマンドには多少時間がかかります。
次のステップは、SSLを使用することをNGINXに認識させる設定です。sites-availableにexample.comのサーバーブロックがあると仮定します。以下のコマンドでそのサーバーブロックを開きます。
sudo nano /etc/nginx/sites-available/example.com
そのファイルを編集して、次の内容を反映させます。
server {
listen 443 ssl;
listen [::]:443 ssl;
include snippets/self-signed.conf;
include snippets/ssl-params.conf;
サーバー名 example.com www.example.com;
ルート /var/www/example.com/html;
インデックス index.html index.htm index.nginx-debian.html;
}
その下に、次のように新しいサーバー ブロックを追加します (HTTPS リダイレクトを実行するため)。
server {
listen 80;
listen [::]:80;
サーバー名 example.com www.example.com;
302 を返します https://$server_name$request_uri;
}
最後に、次のコマンドを使用して、sites-available から sites-enabled にリンクする必要があります。
ln -s /etc/nginx/sites-available/www.example.com /etc/nginx/sites-enabled/
プロフィールを確認する
ufw を使用すると、次のコマンドで新しい SSL 対応プロファイルを確認できます。
sudo ufw app list
これにより、NGINX HTTPS が有効になっていることが明確に示されます (図 B )。
図B
次のコマンドで NGINX を再起動します。
sudo systemctl restart nginx
これで、ブラウザで https://SERVER_IP (SERVER_IP はサーバーの IP アドレス) にアクセスして、証明書のセキュリティに関する警告が表示されるはずです (自己署名証明書を使用しているため) (図 C )。
図C
おめでとうございます。NGINX で SSL が動作するようになりました。データセンターの Web サーバーのセキュリティが強化されました。
TechRepublic Academy の以下のリソースを活用して Linux エキスパートになりましょう。