Alibaba Cloud サーバーでの Let’s Encrypt 証明書のインストールと更新

Let’s Encrypt は、無料で自動化されたオープンな証明書発行機関(CA)であり、無料のSSL/TLS証明書を提供することでインターネット全体のセキュリティを向上させることを目的としています。この記事では、Alibaba Cloud サーバーで Let’s Encrypt 証明書をインストールし、Certbot ツールを使用して証明書の自動更新を実現する方法について詳しく説明します。

インストール前の準備

Let’s Encrypt 証明書のインストールを開始する前に、サーバーに Nginx がインストールされており、ドメインがサーバーの IP アドレスに解決されていることを確認してください。サーバーが Alibaba Cloud Linux システムを使用している場合、以下のコマンドを使用して Nginx をインストールできます:

Terminal window
1
sudo yum install nginx -y
2
sudo systemctl start nginx
3
sudo systemctl enable nginx

Certbot のインストール

Certbot は、Let’s Encrypt から証明書を取得しインストールするための自動化されたクライアントツールです。yum コマンドを使用して Certbot および関連するコンポーネントをインストールする必要があります。

  1. EPEL リポジトリを追加:
Terminal window
1
sudo yum install epel-release -y
2
3
# 上記のコマンドがエラーを返す場合、epel-aliyuncs-release をアンインストールして再度インストールしてください
4
sudo yum remove epel-aliyuncs-release -y
5
sudo yum install epel-release -y
  1. Certbot と Nginx プラグインをインストール:
Terminal window
1
sudo yum install certbot python3-certbot-nginx -y

証明書の取得とインストール

Certbot をインストールした後、以下のコマンドを使用してすべてのサブドメインに対して証明書を発行できます。example.com をあなたの実際のドメインに置き換えてください:

Terminal window
1
sudo certbot certonly --manual --preferred-challenges dns -d *.example.com -d example.com

このコマンドは一連の質問を行い、DNS サーバーに追加する必要がある TXT レコードを生成します。以下の図のようになります: txtdns

Alibaba Cloud DNS 解析で現在のドメインを見つけ、TXT レコードを追加します。以下の図のように、上記のレコード値を記録します: addtxtdns

DNS TXT レコードが正しいかどうかを確認し、正しければ端末に戻って Enter キーを押します。以下の図のようにします: txtdnscheck

Certbot が完了すると、証明書とキーのファイルは通常 /etc/letsencrypt/live/yourdomain/ ディレクトリに保存されます。

新しい SSL 証明書を使用するために Nginx 設定ファイルを編集します。通常は /etc/nginx/conf.d/ ディレクトリにあります。

Terminal window
1
sudo vim /etc/nginx/conf.d/www.conf

以下のコードを追加し、yourdomain をあなた自身のドメインに置き換えてください:

Terminal window
1
server {
2
listen 80;
3
server_name yourdomain.com *.yourdomain.com;
4
5
# HTTPS へのリダイレクト
6
return 301 https://$host$request_uri;
7
}
8
9
server {
10
listen 443 ssl;
11
server_name yourdomain.com *.yourdomain.com;
12
13
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
14
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
15
16
ssl_protocols TLSv1.2 TLSv1.3;
17
ssl_ciphers HIGH:!aNULL:!MD5;
18
19
# その他の Nginx 設定(ルートディレクトリ、インデックスファイルなど)
20
root /var/www/html;
21
index index.html;
22
23
location / {
24
try_files $uri $uri/ =404;
25
}
26
}

以下のコマンドを使用して Nginx を再読み込みします:

Terminal window
1
sudo systemctl reload nginx

自動更新の設定

Let’s Encrypt 証明書の有効期限は 90 日間です。そのため、証明書が常に有効であることを確認するために自動更新を設定する必要があります。Certbot は、期限切れが近い証明書を自動的にチェックして更新する cron ジョブを提供しています。

以下のコマンドを使用して証明書の更新をテストします:

Terminal window
1
sudo certbot renew --dry-run

エラーが発生する場合があります。これは、Certbot が DNS を介してドメイン証明書を申請しているため、更新時に DNS レコードを更新する必要があるためです。そのため、直接 certbot renew を使用して更新するとエラーになります。certbot-dns-aliyun スクリプトを使用して Alibaba Cloud API を自動的に呼び出し、証明書の自動申請および更新を実現できます。

Aliyun CLI ツールのインストール:

Terminal window
1
wget https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tgz
2
tar xzvf aliyun-cli-linux-latest-amd64.tgz
3
sudo cp aliyun /usr/local/bin
4
rm -rf aliyun

ユーザーの設定

https://ram.console.aliyun.com/ にログインし、ユーザーを追加して OpenAPI アクセス権限を有効にし、AliyunDNSFullAccess の権限を付与します。完了後、AccessKeyID と AccessKeySecret を記録し、サーバーで以下のコードを実行します:

Terminal window
1
sudo aliyun configure

ガイドに従って適切な情報を入力します:

Terminal window
1
Access Key Id []: AccessKeyID
2
Access Key Secret []: AccessKeySecret
3
Default Region Id []: cn-beijing
4
Default Output Format [json]: json (Only support json)
5
Default Language [zh|en] en: zh

成功すると以下のメッセージが表示されます:

Terminal window
1
Configure Done!!!
2
..............888888888888888888888 ........=8888888888888888888D=..............
3
...........88888888888888888888888 ..........D8888888888888888888888I...........
4
.........,8888888888888ZI: ...........................=Z88D8888888888D..........
5
.........+88888888 ..........................................88888888D..........
6
.........+88888888 .......Welcome to use Alibaba Cloud.......O8888888D..........
7
.........+88888888 ............. ************* ..............O8888888D..........
8
.........+88888888 .... Command Line Interface(Reloaded) ....O8888888D..........
9
.........+88888888...........................................88888888D..........
10
..........D888888888888DO+. ..........................?ND888888888888D..........
11
...........O8888888888888888888888...........D8888888888888888888888=...........
12
............ .:D8888888888888888888.........78888888888888888888O ..............

エラーが発生した場合、OpenAPI アクセス権限が有効になっているか、AliyunDNSFullAccess の権限が付与されているかを確認してください。

certbot-dns-aliyun のインストール

Terminal window
1
wget https://cdn.jsdelivr.net/gh/justjavac/certbot-dns-aliyun@main/alidns.sh
2
sudo cp alidns.sh /usr/local/bin
3
sudo chmod +x /usr/local/bin/alidns.sh
4
sudo ln -s /usr/local/bin/alidns.sh /usr/local/bin/alidns
5
rm alidns.sh

https://cdn.jsdelivr.net/gh/justjavac/certbot-dns-aliyun@main/alidns.sh がダウンロードできない場合は、ローカルでダウンロードしてからサーバーにアップロードしてください。

更新

Terminal window
1
# 申請テスト
2
certbot certonly -d *.example.com --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --dry-run
3
4
# 更新テスト
5
certbot renew --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --dry-run
6
7
# 本番の申請および更新から --dry-run パラメータを削除

定期的な自動更新を設定する

Terminal window
1
crontab -e

以下の内容を入力します:

Terminal window
1
0 2 1 */1 * root certbot renew --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --deploy-hook "nginx -s reload"

このタスクは毎月1日の午前2時0分に実行され、手動モードで証明書を更新し、更新が成功すると Nginx を再読み込みして新しい証明書を適用します。Crontab では、定期的なタスクの形式は5つのアスタリスクで構成されており、これらのアスタリスクはそれぞれ分(0 – 59)、時間(0 – 23)、日付(1 – 31)、月(1 – 12)、曜日(0 – 7、0と7は日曜日を表します)を示しています。

まとめ

この記事では、Let’s Encrypt 証明書をサーバーにインストールし、Certbot ツールを使用して証明書を取得およびインストールする方法、そして自動更新を設定する方法について詳しく説明しました。これらの手順を実行することで、サーバーが常に有効な SSL/TLS 証明書を使用し、Web サイトのセキュリティを向上させることができます。