Nginx(Ubuntu)で「Let’s Encrypt」無料SSL証明書を設定する方法
プライバシーのヒントに関する多くの記事を読んできたなら、「HTTPS everywhere」拡張機能をインストールするように勧められることがあるでしょう。この拡張機能は、可能な限り自動的にウェブサイトのHTTPS版にリダイレクトします。しかし、悪いことに、HTTPS everywhere拡張機能は、訪問しているウェブサイトがSSLを実装している場合にのみ機能します。実際、多くのウェブマスターにとって、その実装は難しく(お金がかかる)タスクです。幸運なことに、Let’s Encryptの運動により、ウェブマスターが自分のサイトにSSL証明書を追加するのが容易になりました。
過去(および現在)、SSL証明書を設定するには、まずサーバー上でプライベートキーを生成し、その後証明書発行機関からSSL証明書を購入(これには高額な費用がかかることがあります)し、最後にそれをサーバーに設定する必要があります。このプロセスには多くの技術的要素が関与しており、正しく行わなければSSL証明書は無効になってしまいます。しかし、Let’s Encryptプロジェクトを利用すれば、コストなしで簡単にSSL証明書を自サイトに追加できます。Mozilla、Akamai、Cisco、EFF、およびGoogleなどの大手企業が後ろ盾となっており、ほとんどのブラウザとオペレーティングシステムでサポートされています。
このチュートリアルでは、NginxサーバーにLet’s Encrypt SSL証明書を設定する手順を説明します。このチュートリアルではUbuntu 14.04サーバーを使用し、稼働中のNginx Ubuntuサーバーを前提としています。指示はUbuntu 16.04サーバーでは異なる場合があります。
Let’s Encryptのインストール
まず、Let’s Encryptをインストールするために、gitを使用してそのgitリポジトリからクローンする必要があります。次のコマンドでgitをインストールします:
sudo apt-get install gitインストールが完了したら、Let’s Encryptのリポジトリをクローンします:
sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt環境の設定
SSL証明書のインストールと設定を進める前に、ウェブルートディレクトリ内の.well-knownフォルダーにアクセスできるようにすることが重要です。デフォルトでは、ファイル名の前に「.」が付くすべてのファイルとフォルダーは隠されており、一般にはアクセスできません。しかし、このケースでは、Let’s Encryptが検証用の特別なファイルを保存するために.well-knownフォルダーへのアクセスを公に許可する必要があります。
Nginxサイトの設定フォルダーに移動し(カスタム設定ファイルがある場合はそれを開き)、またはデフォルトを使用します:
cd /etc/nginx/sites-available
sudo nano defaultサーバーブロック内に次の行を追加します:
location ~ /\.well-known {
allow all;
}設定ファイルを保存(Ctrl + O)し、閉じます(Ctrl + x)。
Nginx設定をテストします:
sudo nginx -tすべての設定が正常であれば、設定をリロードします:
sudo service nginx reloadSSL証明書の生成
Nginxの設定が完了したら、次はSSL証明書をインストールします。
Let’s Encryptフォルダーに移動します:
cd /opt/letsencrypt次のコマンドを実行して証明書を生成します:
./letsencrypt-auto certonly -a webroot --webroot-path=/usr/share/nginx/html -d example.comここで変更すべき箇所がいくつかあります:
webroot-pathをあなたのサイトのドキュメントルートパスに変更します。デフォルトは「/usr/share/nginx/html」ですが、あなたの設定によって異なるかもしれません。- 「example.com」を自分のドメイン名に変更します。「example.com」と「www.example.com」は異なるドメインであるため、複数のドメインをサポートするSSL証明書が必要な場合は、コマンドの末尾に
-d example1.comを追加します。たとえば、「example.com」、「www.example.com」、「example1.com」、「www.example1.com」のドメインにSSL証明書を設定するには、次のコマンドを使用します:
./letsencrypt-auto certonly -a webroot --webroot-path=/usr/share/nginx/html -d example.com -d www.example.com -d example1.com -d www.example1.com最初の実行時、スクリプトはシステムに多くのPythonファイルをインストールします。完了すると、証明書生成プロセスが始まります。最初にあなたのメールアドレスを尋ねられます:

次に、Let’s Encryptのウェブサイトで利用規約を読まされます。「同意する」を選択します。

次のメッセージが表示される場合:
重要な通知:
- おめでとうございます!あなたの証明書とチェーンは
/etc/letsencrypt/live/example.com/fullchain.pem に保存されています。あなたの証明書は
2016-10-02に期限切れになります。今後この証明書の新しいまたは変更要素を取得するには、
letsencrypt-autoを再度実行するだけです。
*すべて*の証明書を非対話的に更新するには、「letsencrypt-auto renew」と実行してください。
- Certbotを気に入ってくださった場合は、次の方法で私たちの活動を支援してください:
ISRG / Let's Encryptへの寄付: https://letsencrypt.org/donate
EFFへの寄付: https://eff.org/donate-leそれはあなたがサイトのためにSSL証明書を正常に生成したことを意味します。代わりにエラーメッセージが表示された場合は、そのエラーを修正して再試行してください。
サイト用SSL証明書の有効化
SSL証明書を生成したら、サイト用にそれを有効化する時です。
Nginx設定フォルダーに戻り、サイトの設定ファイルを開きます:
cd /etc/nginx/sites-available
sudo nano default新しいサーバーブロックを作成し、そのブロック内に次の設定を追加します:
server {
server_name example.com www.example.com;
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
}ファイルを保存して閉じます。
注:上記はNginx設定ブロックの簡略版です。ブロックに独自のカスタム設定を追加することをお勧めします。
最後に、設定をテストします:
sudo nginx -tすべてが正常であれば、Nginxをリロードします:
sudo service nginx reloadこれで、サイトのためにSSL証明書を正常に設定できました。URLの「https」版を読み込んで確認できます。
Let’s Encrypt SSL証明書の自動更新
ほとんどの商業用SSL証明書が最小1年間有効であるのに対し、Let’s EncryptのSSL証明書はわずか3ヶ月間有効です。この期間が過ぎると、引き続き使用するためには更新が必要です。Let’s Encryptには、証明書を簡単に更新できるrenewオプションがあります。以下の手順では、SSL証明書を自動更新するためのcronジョブを設定する方法を示します。
サーバー内で、crontabを開きます:
sudo crontab -e次の行を追加します:
00 0 * * 1 /opt/letsencrypt/letsencrypt-auto renew >> /var/log/le-renew.log
05 0 * * 1 /etc/init.d/nginx reload上記の行は、毎週月曜日の午前12時にSSL証明書の有効期限をチェックし、期限が近い場合は更新します。また、更新された証明書が使用されるように(午前12時05分に)Nginxをリロードします。
crontabを保存して閉じます。
結論
小規模なウェブサイトを運営しており、サイトにSSLを追加することに関心があるなら、Let’s Encryptはサイトの信頼性を追加するための良い選択です。設定は(比較的)簡単で、費用もかからないため(ビールのように無料)、利用しない理由はありません。ただし、組織認証(OV)や拡張認証(EV)SSL証明書が必要な企業にとっては、Let’s Encryptが提供するのはドメイン認証(DV)証明書(最も基本的な種類のSSL証明書)のみであるため、商業用SSL証明書が適しているでしょう。