amtoaer

晓风残月

叹息似的渺茫,你仍要保存着那真!
github
x
telegram
steam
nintendo switch
email

無料でLet's Encryptワイルドカード証明書を取得する

去年、GoDaddyで購入したjeasonlau.xyzドメインは、まもなく期限切れとなりますが、最近は財政的に厳しいため、ウェブサイトの業務をallwens.workドメインに移行することを考えています。

現在、jeasonlau.xyzドメインで提供されているサービスは、私のマオマガイドブラシツール、RSSHubの購読、および個人用のCloudreveクラウドストレージです。移行する場合、それらを異なるサブドメインに配置する予定なので、ワイルドカード証明書を無料で申請できるかどうか確認しようと思います。実際にチュートリアルを見つけました。

チュートリアルに従って進めると、全体のプロセスは 10 分程度で非常に簡単です。この記事では、申請プロセスを記録しておきます。😆

acme.shのインストール#

Let's Encrypt公式では、申請方法に関するドキュメントが提供されていますが、手順がやや複雑です。代わりに、申請プロセスを簡素化するために、サードパーティツールのacme.shを使用します。

まず、acme.shをインストールします:

curl  https://get.acme.sh | sh

このスクリプトは以下の操作を実行します:

  • acme.sh~/.acme.sh/にインストールします。
  • alias acme.sh = ~/.acme.sh/acme.shを作成し、環境変数にインストールする効果を得ます。
  • 毎日自動的に証明書をチェックし、期限が近づいている場合は自動的に更新するcronjobスクリプトを作成します。

DNS-APIを使用して証明書を検証する#

acme.sh のドキュメントを参照すると、証明書を取得するためにさまざまな方法でドメインの検証を行うことができることがわかります。私のサーバーは登録されていないため、webのいくつかの方法は使い勝手がよくありません。最終的には、ドメインの所有権を検証するためにDNS-APIを使用することにしました。

DNS検証は、ドメインの DNS 解決に指定されたtxtレコードを追加することで、ドメインの所有権を検証するものです。DNS-APIは、DNS プロバイダの API を使用してtxtレコードの追加と削除を自動的に行い、自動的な検証を行います。

異なるプロバイダには、異なるAPIキーが必要です。詳細なチュートリアルについては、ここをクリックして詳細を確認できます。ここでは、Alibaba Cloud を例に説明します。

  1. Alibaba Cloud アカウントの API 管理からAccessKey IDAccessKey Secretを取得します。

  2. サーバーで以下のコマンドを実行します。

    export Ali_Key=AccessKey ID
    export Ali_Secret=AccessKey Secret
    
  3. 次のコマンドを実行して証明書を取得します(allwens.workを例にします)。

    acme.sh --issue --dns dns_ali -d allwens.work -d *.allwens.work
    

    完了すると、証明書ファイルは~/.acme.sh/allwens.workに保存され、その後のacme.shは自動的にそのフォルダ内の証明書を更新します。

    現時点では、更新時に API が必要かどうかはわかりませんので、念のために第 2 ステップで環境変数を作成するステートメントを~/.zshrcに書き込みました。

ウェブサーバーで証明書を使用する#

元のパス名が長すぎると感じたため、まず/etccertフォルダを作成し、シンボリックリンクを作成しました:

このステップはスキップできます。私は単にパスを短くするために行いました 🤣

sudo mkdir /etc/cert
cd /etc/cert
ln -s ~/.acme.sh/allwens.work/allwens.work.cer ./
ln -s ~/.acme.sh/allwens.work/allwens.work.key ./

次に、ウェブサーバーの設定ファイル(nginxを例にします)を開き、証明書を使用する必要があるServerブロックを見つけます。

# Cloudreve
server {
        server_name drive.allwens.work;
        location / {
                proxy_pass http://localhost:5212;
        }
        client_max_body_size 30g;
        error_page 497 =301 https://$http_host$request_uri;
        listen 10000;
        # 以下の内容を追加
        ssl on;
        ssl_certificate /etc/cert/allwens.work.cer;
        ssl_certificate_key /etc/cert/allwens.work.key;

その後、nginxに設定ファイルを再読み込みさせます。

nginx -s reload
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。