独自ドメインサイトのSSL化(HTTPS化)【Letsencrypt,Ubuntu,Nginx】

この記事では、独自ドメインサイトのSSL化(HTTPS化)と、Letsencrypt証明書更新の自動化の方法について紹介します。

設定を行う環境はUbuntu,Nginxで、Letsencryptのサーバー証明書を利用する方法となります。

 

また、当記事で紹介するNginxのエントリーファイルは、他記事で紹介しているwordpressの環境構築をベースとしています。

 

詳しくはこちらの記事を参考にしてください。

関連記事

2020年4月にUbuntu 20.04 LTSがリリースされました。 LTS版でもあるため、導入しやすく今後wordpressの環境構築用のサーバーとしての利用も増えそうです。 今回は、[…]

【wordpressの環境構築】Ubuntu20.04,Nginx,PHP7.4,MariaDB

 

また、実際の動作確認には、予め独自ドメインを取得しておく必要があります。


◆動作検証環境

・ローカル環境:mac Catalina

・さくらVPSサーバー:メモリ 512M, ストレージ:SSD 25GB, CPU:1コア
・OS:Ubuntu 20.04 LTS(Focal Fossa) amd64
・Nginx:1.18.0
・mysql Ver 15.1 Distrib 10.3.22-MariaDB
・PHP:7.4.11
・wordpress:5.5.1

 

スポンサードリンク

LetsencryptのインストールとSSL/TLS サーバ証明書の取得

 

独自ドメインでサイトのSSL化(HTTPS化)するリモートサーバーで作業します。

letsencryptをインストール

 

SSL/TLS サーバ証明書の取得
letsencryptがport80を使用するので、一旦nginxを停止する。

 

証明書を取得

 

nginxエントリーファイルの設定

wordpress.conf はそれぞれの環境に合わせて変更します。

すでに、エントリーファイルがある場合はそちらを指定。

これから作成する場合は、任意にファイル名を指定

 

 

すでにエントリーファイルのリンクを貼っている場合は、既存のファイルを削除

 

作成したエントリーファイルにリンクを新しいサイトに貼る

 

Nginxを再起動

 

ブラウザを立ち上げて、https でのアクセス、http アクセス、www 付きアドレスからのアクセス時のリダイレクトを確認する。

 

Letsencrypt証明書更新の自動化

 

Letsencryptでの証明書取得は無料で行なえますが、3ヶ月ごとに更新をする必要があります。

そのためcrontabによる更新の自動化を行います。

 

crontabの編集

 

下記のような表示が出たら、お好みのエディターの形式を選択。

 

ファイル内に下記の内容を追加
*この場合は、毎月1日5時にnginxの停止、letsencrypt証明書の更新、nginnxの開始を行う

 

nginxの最起動

 

 

Letsencrypt証明書更新の自動化がうまくいっていない時の対応

 

Letsencryptからの警告メール

 

自動更新の設定を行っても、何だかの理由で更新がうまく行われていない場合(サーバーの移転等を行った場合に起こりやすい)、Let’s Encryptより警告のメールが届きます。

タイトルは

Let’s Encrypt certificate expiration notice for domain “sample.com”

となり、

証明書の期限が切れる19日前、10日前に届きます。

 

10日前に届く場合は以下のような内容となります。

Hello,

Your certificate (or certificates) for the names listed below will expire in 10 days (on 08 Jun 21 17:04 +0000). Please make sure to renew your certificate before then, or visitors to your web site will encounter errors.

We recommend renewing certificates automatically when they have a third of their total lifetime left. For Let’s Encrypt’s current 90-day certificates, that means renewing 30 days before expiration. See https://letsencrypt.org/docs/integration-guide/ for details.

sample.com

For any questions or support, please visit: https://community.letsencrypt.org/ Unfortunately, we can’t provide support by email.

For details about when we send these emails, please visit: https://letsencrypt.org/docs/expiration-emails/ In particular, note that this reminder email is still sent if you’ve obtained a slightly different certificate by adding or removing names. If you’ve replaced this certificate with a newer one that covers more or fewer names than the list above, you may be able to ignore this message.

以下省略

 

スポンサードリンク

更新期限の確認

以下のコマンドを実行します

sudo certbot certificates

 

期限が切れる日時(Expiry Date:)が表示されるので確認します。

 

期限更新不具合の対応

上記の確認作業で、警告メールのとおり期限が19日前や、10日前となっている場合は、自動更新がうまく行われていないため対策が必要です。

 

手動で更新ができるか確認

現在が設定で更新ができる状態か確認できるコマンドがあるので、まずはテストをしてこちらを実行します。

$ sudo certbot renew --dry-run

 

以下のように表示されれば更新が可能な状態となっていますので、$ sudo certbot renew を行い更新します。

 

エラーの表示が出る場合は、対応を行います。

エラーログは、/var/log/letsencrypt/letsencrypt.log に残ります。

 

今回のエラー内容は以下のとおりです。

 

an unexpected error: The requested apache plugin does not appear to be installed. Skipping.

こちらに対応するために、まずはNginxのアップデートをためしてみます。

$ sudo apt-get update

 

テスト更新を試して、エラーが続くようであれば、プラグインをインストールします。

 

テスト更新を試して、エラーが続くようであれば、Firewallの設定を確認します。

$ sudo ufw status

以下のようにNginxの権限がない場合は、

 

以下のコマンドを実行します。

$ sudo ufw allow 'Nginx Full'

 

テスト更新を試して、エラーが続くようであれば、Nginxのプラグインの設定を行います。

$ sudo certbot --nginx -d sample.com -d www.sample.com

 

すでに証明証がある場合は以下の表示になるのでExpandを指定します。

 

その後に以下の表示となるので、

リダイレクトの設定方法を選択します。

 

更新が完了すると以下の表示となります。

 

念の為、もう一度$ sudo certbot renew --dry-run を行い、その後$ sudo certbot renew で手動更新を行います。

 


以上、独自ドメインサイトのSSL化(HTTPS化)と、Letsencrypt証明書更新の自動化の方法について紹介しました。