Alibaba Cloud サーバーでの Let’s Encrypt 証明書のインストールと更新
- 1541単語
- 8分
- 09 Jul, 2024
Let’s Encrypt は、無料で自動化されたオープンな証明書発行機関(CA)であり、無料のSSL/TLS証明書を提供することでインターネット全体のセキュリティを向上させることを目的としています。この記事では、Alibaba Cloud サーバーで Let’s Encrypt 証明書をインストールし、Certbot ツールを使用して証明書の自動更新を実現する方法について詳しく説明します。
インストール前の準備
Let’s Encrypt 証明書のインストールを開始する前に、サーバーに Nginx がインストールされており、ドメインがサーバーの IP アドレスに解決されていることを確認してください。サーバーが Alibaba Cloud Linux システムを使用している場合、以下のコマンドを使用して Nginx をインストールできます:
1sudo yum install nginx -y2sudo systemctl start nginx3sudo systemctl enable nginx
Certbot のインストール
Certbot は、Let’s Encrypt から証明書を取得しインストールするための自動化されたクライアントツールです。yum コマンドを使用して Certbot および関連するコンポーネントをインストールする必要があります。
- EPEL リポジトリを追加:
1sudo yum install epel-release -y2
3# 上記のコマンドがエラーを返す場合、epel-aliyuncs-release をアンインストールして再度インストールしてください4sudo yum remove epel-aliyuncs-release -y5sudo yum install epel-release -y
- Certbot と Nginx プラグインをインストール:
1sudo yum install certbot python3-certbot-nginx -y
証明書の取得とインストール
Certbot をインストールした後、以下のコマンドを使用してすべてのサブドメインに対して証明書を発行できます。example.com をあなたの実際のドメインに置き換えてください:
1sudo certbot certonly --manual --preferred-challenges dns -d *.example.com -d example.com
このコマンドは一連の質問を行い、DNS サーバーに追加する必要がある TXT レコードを生成します。以下の図のようになります:
Alibaba Cloud DNS 解析で現在のドメインを見つけ、TXT レコードを追加します。以下の図のように、上記のレコード値を記録します:
DNS TXT レコードが正しいかどうかを確認し、正しければ端末に戻って Enter キーを押します。以下の図のようにします:
Certbot が完了すると、証明書とキーのファイルは通常 /etc/letsencrypt/live/yourdomain/
ディレクトリに保存されます。
新しい SSL 証明書を使用するために Nginx 設定ファイルを編集します。通常は /etc/nginx/conf.d/ ディレクトリにあります。
1sudo vim /etc/nginx/conf.d/www.conf
以下のコードを追加し、yourdomain をあなた自身のドメインに置き換えてください:
1server {2 listen 80;3 server_name yourdomain.com *.yourdomain.com;4
5 # HTTPS へのリダイレクト6 return 301 https://$host$request_uri;7}8
9server {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 を再読み込みします:
1sudo systemctl reload nginx
自動更新の設定
Let’s Encrypt 証明書の有効期限は 90 日間です。そのため、証明書が常に有効であることを確認するために自動更新を設定する必要があります。Certbot は、期限切れが近い証明書を自動的にチェックして更新する cron ジョブを提供しています。
以下のコマンドを使用して証明書の更新をテストします:
1sudo certbot renew --dry-run
エラーが発生する場合があります。これは、Certbot が DNS を介してドメイン証明書を申請しているため、更新時に DNS レコードを更新する必要があるためです。そのため、直接 certbot renew を使用して更新するとエラーになります。certbot-dns-aliyun スクリプトを使用して Alibaba Cloud API を自動的に呼び出し、証明書の自動申請および更新を実現できます。
Aliyun CLI ツールのインストール:
1wget https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tgz2tar xzvf aliyun-cli-linux-latest-amd64.tgz3sudo cp aliyun /usr/local/bin4rm -rf aliyun
ユーザーの設定
https://ram.console.aliyun.com/ にログインし、ユーザーを追加して OpenAPI アクセス権限を有効にし、AliyunDNSFullAccess の権限を付与します。完了後、AccessKeyID と AccessKeySecret を記録し、サーバーで以下のコードを実行します:
1sudo aliyun configure
ガイドに従って適切な情報を入力します:
1Access Key Id []: AccessKeyID2Access Key Secret []: AccessKeySecret3Default Region Id []: cn-beijing4Default Output Format [json]: json (Only support json)5Default Language [zh|en] en: zh
成功すると以下のメッセージが表示されます:
1Configure 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 のインストール
1wget https://cdn.jsdelivr.net/gh/justjavac/certbot-dns-aliyun@main/alidns.sh2sudo cp alidns.sh /usr/local/bin3sudo chmod +x /usr/local/bin/alidns.sh4sudo ln -s /usr/local/bin/alidns.sh /usr/local/bin/alidns5rm alidns.sh
https://cdn.jsdelivr.net/gh/justjavac/certbot-dns-aliyun@main/alidns.sh
がダウンロードできない場合は、ローカルでダウンロードしてからサーバーにアップロードしてください。
更新
1# 申請テスト2certbot certonly -d *.example.com --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --dry-run3
4# 更新テスト5certbot renew --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --dry-run6
7# 本番の申請および更新から --dry-run パラメータを削除
定期的な自動更新を設定する
1crontab -e
以下の内容を入力します:
10 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 サイトのセキュリティを向上させることができます。