Nginxサーバー用のSSL証明書をUbuntu 14.04で作成する方法について、以下に完全かつ包括的な記事を日本語で説明します。
はじめに
インターネット上でセキュアな通信を実現するためには、SSL(Secure Sockets Layer)証明書を使用することが不可欠です。SSL証明書は、ウェブサイトとその利用者の間で送受信されるデータを暗号化し、盗聴や改ざんから守ります。この記事では、Ubuntu 14.04でNginxサーバーを使用して、SSL証明書を作成し、HTTPS通信を有効にする方法を詳細に説明します。
必要な前提条件
- Ubuntu 14.04がインストールされたサーバー
- Nginxがインストールされていること
- サーバーにはドメイン名が設定されていること(例:
example.com) - サーバーへのrootまたはsudoユーザー権限
1. OpenSSLのインストール
SSL証明書を生成するためには、まずOpenSSLをインストールする必要があります。OpenSSLは、暗号化関連のライブラリとツールを提供するオープンソースのソフトウェアです。
ターミナルを開き、次のコマンドを実行してOpenSSLをインストールします。
bashsudo apt-get update sudo apt-get install openssl
2. プライベートキーとCSR(証明書署名要求)の作成
SSL証明書を作成するためには、まずプライベートキーとCSRを生成する必要があります。CSRは、証明書を発行する際に必要な情報を含むファイルです。プライベートキーは、後でサーバーにインストールされ、SSL通信を行う際に使用されます。
プライベートキーの作成
次のコマンドを実行して、プライベートキーを作成します。プライベートキーは、サーバーの/etc/ssl/privateディレクトリに保存します。
bashsudo openssl genpkey -algorithm RSA -out /etc/ssl/private/example.com.key -aes256
このコマンドにより、example.com.keyという名前のプライベートキーが生成されます。キーのパスフレーズを入力するよう求められるので、忘れないようにメモしておきます。
CSRの作成
次に、CSR(証明書署名要求)を作成します。このファイルには、SSL証明書を発行する際に必要な情報(会社名、ドメイン名、所在地など)が含まれます。
bashsudo openssl req -new -key /etc/ssl/private/example.com.key -out /etc/ssl/certs/example.com.csr
このコマンドを実行すると、いくつかの質問が表示されます。ここで入力する内容を説明します。
- Country Name (2 letter code): 日本の場合は
JPを入力します。 - State or Province Name (full name): 都道府県名を入力します(例:
Tokyo)。 - Locality Name (eg, city): 市区町村名を入力します(例:
Shibuya)。 - Organization Name (eg, company): 組織名を入力します(例:
Example Co.)。 - Organizational Unit Name (eg, section): 部門名を入力します(任意)。
- Common Name (eg, fully qualified domain name): SSL証明書を発行するドメイン名を入力します(例:
example.com)。 - Email Address: メールアドレスを入力します(任意)。
入力が完了すると、example.com.csrというファイルが/etc/ssl/certs/ディレクトリに作成されます。
3. SSL証明書の取得
CSRを作成した後、SSL証明書を取得するには、商用の証明書機関(CA)にCSRを送信して証明書を発行してもらうか、無料の証明書を提供するLet’s Encryptなどを使用します。ここでは、無料でSSL証明書を提供するLet’s Encryptを使った方法を説明します。
Certbotのインストール
Let’s Encryptの証明書を取得するためには、Certbotというツールをインストールします。次のコマンドを実行してインストールします。
bashsudo apt-get install python-certbot-nginx
SSL証明書の取得とインストール
Certbotを使ってSSL証明書を取得し、Nginxに自動的に設定を適用するには、次のコマンドを実行します。
bashsudo certbot --nginx -d example.com -d www.example.com
ここで、example.comを自分のドメインに置き換えてください。このコマンドを実行すると、CertbotはLet’s Encryptから無料のSSL証明書を取得し、Nginxの設定ファイルを自動で更新してHTTPSを有効にします。
証明書が正常にインストールされると、証明書の有効期限(通常は90日)や、リダイレクト設定を行うように求められます。リダイレクトの設定は、HTTPをHTTPSに強制的にリダイレクトする設定で、セキュリティを高めます。
4. Nginxの設定確認
Certbotが自動的にNginxの設定を更新しますが、設定が正しく行われたかを確認するために、Nginxの設定ファイルを手動で確認することができます。
設定ファイルは通常、/etc/nginx/sites-available/defaultにあります。このファイルを開き、以下のような設定が追加されていることを確認します。
nginxserver {
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
# その他の設定
}
また、HTTP(ポート80)のリダイレクト設定も必要です。以下のように、HTTPリクエストをHTTPSにリダイレクトする設定を追加します。
nginxserver {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
5. Nginxの再起動
設定が完了したら、Nginxを再起動して変更を反映させます。
bashsudo systemctl restart nginx
6. SSL証明書の自動更新
Let’s Encryptの証明書は90日間有効であり、期限が切れる前に自動更新する必要があります。Certbotには自動更新機能が備わっており、cronジョブを使用して自動的に証明書を更新します。
次のコマンドで自動更新が正常に機能するかを確認できます。
bashsudo certbot renew --dry-run
問題がなければ、Certbotは自動で証明書を更新します。
結論
Ubuntu 14.04上でNginxサーバーにSSL証明書をインストールし、HTTPS通信を有効にする手順を説明しました。これで、ウェブサイトのセキュリティが大幅に向上し、ユーザーとの通信が暗号化されます。また、Let’s Encryptを利用することで、無料でSSL証明書を取得できるため、コストをかけずにセキュアな通信環境を実現できます。

