Certbot は、パンドメイン SSL 証明書を発行および更新します (DNS TXT レコードを通じてドメイン名の有効性を検証します)。

let's encryptを使用して無料の HTTPS 証明書を取得する場合、let's encrypt ではドメイン名が自分のものであることを確認する必要があります。
以前は、デフォルトのファイル検証方法では常に奇妙な問題が発生し、失敗していました。私も非常に無力でした。検証にはDNS-TXTレコードを検証する方法を使用し、パンドメイン名証明書を申請する場合はこの方法でのみ検証できるようです。

当初この記事ではDNSレコードを検証して証明書を発行する方法だけを書くつもりだったのですが、certbotを使って無料のLet's Encrypt SSL証明書を発行する方法について書いたことがなかったので、改めて手順を書いてみます。

1. Certbot をインストールする

1.1 公式Webサイトの指示に従ってインストールする

まずCertbot 公式 Web サイトにアクセスし、Web ページで使用するサーバー ソフトウェアとシステム バージョンを選択すると、インストール ドキュメントにジャンプし、
プロンプトに従ってインストールします。

1.2 自動インストールスクリプトを使用してインストールする

wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto # 给脚本执行权限

次に、このスクリプトを直接使用して、証明書の発行やその他の操作を行うことができます。
このスクリプトを初めて使用するときに、依存関係が自動的にインストールされます。

公式 Web サイトでは、ソフトウェア パッケージ管理を通じて certbot をインストールするように求められ、その後、certbot コマンドを直接使用して操作できます。次の説明では、実行するデフォルトのコマンドは certbot
コマンドを直接使用することです。
自動インストールを使用する場合は、スクリプト certbot-auto、直接使用します。 このスクリプトを操作するには、以下で説明するコマンドの certbot を ./certbot-auto に置き換えます。

2. SSL証明書を取得する

2.1 発行証明書の取得 (スタンドアロン)

certbot を直接使用する

certonly コマンドで発行を開始できます。プロンプトに従って、まずモード (通常はスタンドアロン) を選択し (スタンドアロンを使用するには、最初に nginx と他のサーバーを停止する必要があります)、次に、署名が必要なドメイン名をリストします。プロンプトが表示され、検証が開始され、合格すると、生成された証明書ファイルが保存されます。

2.2 汎ドメイン名発行証明書の取得

「汎ドメイン名発行証明書の取得 (マニュアル、DNS-TXT レコードによるドメイン名の有効性の検証)」というタイトル
がオンラインにあります。この記事では主にこの検証の問題について説明します。この方法で発行する方が安定していると感じます

certbot certonly  --preferred-challenges dns -d "*.example.com" -d example.com --manual

このコマンドを使用して、DNS 発行を手動で確認します。
ここでは、署名されるドメイン名を想定するために example.com を使用します。-d の後にはドメイン名が続きます。署名されるドメイン名が複数ある場合は、各ドメイン名の前に -d を忘れずに書いてください。個別のドメイン名。
certbot の汎用ドメイン名は *.example.com のみをサポートしているため、-d パラメーターを 2 つ指定しました。example.com を直接使用したい場合は、それ用に別のドメイン名を発行する必要があります。

Enter キーを押すと、TXT 解決レコードをドメイン名に追加するように求められます。

ここでは、ドメイン名の _acme-challenge TXT レコードを追加するように求められます。レコード値は生成された文字列です。
これに必要なのは、DNS サービス プロバイダーにアクセスして追加することだけです。複数の異なる第 2 レベル ドメイン名を -d する場合は、ドメインのレコード値を追加した後、第 2 レベル ドメイン名ごとにレコードを追加する必要があります。コントロール内の名前 Enter キーを押すと、次のドメイン名のレコード値の入力を求めるプロンプトが表示されます。

レコードの保存を追加した後、解析されたレコードを確認することをお勧めします
別のターミナル (example.com、必ず変更してください) に次のコマンドを入力します。

nslookup -type=txt _acme-challenge.example.com 8.8.8.8
# 或者
dig -t txt _acme-challenge.example.com

追加したレコード値が含まれていれば、追加は成功です。

これで、コンソールで Enter キーを押し続けることができます。発行された証明書ファイルは問題なく保存されます。コンソールには、証明書ファイルの保存場所が出力されます。通常、証明書ファイルは /etc/letsencrypt/live/example に保存されます.com ディレクトリ。ダウン

通常、このディレクトリには 4 つのファイルがあります。

cert.pem: サーバー証明書
chain.pem: サーバーを認証するために Web ブラウザーが必要とする証明書または追加の中間証明書が含まれています
fullchain.pem: cert.pem +chain.pem
privkey.pem: 証明書の秘密キー

通常は、fullchain.pem と privkey.pem を使用します。

3. Nginx で証明書を構成して使用する

ここでは詳細には触れません。基本的には、リスニング 443 ポートに ssl_certificate と ssl_certificate_key を設定するだけで十分です。
私自身の例をここに投稿します。

server {
    listen  443 ssl;
    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_session_timeout 10m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;

    location / {
        # 你自己配置;
    }
}

4. 証明書の更新とキャンセル

4.1 リニューアル

無料の let's encrypt は 3 か月間有効で、有効期限が切れる前に更新する必要があります。certbot を
使用して初めて署名するときにメール アドレスを入力すると、証明書の有効期限が近づく前に通知するメールが送信されます。

単一のドメイン名を更新するには、次のコマンドを使用します。

certbot renew --dry-run

自動更新を設定するには、スクリプトを作成し、Cron で定期的に実行するだけです。crontab -e で crontab スクリプトが開き、次のスクリプトを追加します。

0 3 */7 * * /bin/certbot renew --renew-hook "/where/your/nginx -s reload" 

このスクリプトは、7 日ごとに深夜 3 時にチェック更新コマンドが自動的に実行されることを意味します。更新完了後、nginxサービスを再起動します。

追加後、cron サービスを再起動します。

service crond restart

DNS-TXT レコードを介したパンドメイン名の (自動) 更新は
少し面倒です。DNS サービス プロバイダーが提供する API を使用する必要があります。証明書を更新するときに、TXT レコードを自動的に追加および更新して、次のことを実現できます。自動更新 もちろん通常はDNSサービスが必要です プロバイダーがユーザーに提供するAPIキーによりセキュリティなどが確保されます
まずいくつかのDNSプラグインのアドレスを列挙します 詳細はプラグインを確認してくださいもちろん、他のサードパーティ DNS プラグインも github にあります。

certbot が提供する DNS プラグイン一覧
Alibaba Cloud DNS プラグイン
dnspod プラグイン (Tencent Cloud)

ここでは DNSPOD を使用しているため、dnspod プラグインを使用する次の状況についてのみ説明します。

certbot-auth-dnspod スクリプトをダウンロードする

wget https://raw.githubusercontent.com/al-one/certbot-auth-dnspod/master/certbot-auth-dnspod.sh
chmod +x certbot-auth-dnspod.sh
  • ユーザーのDNSPODトークンを取得する

dnspod にログイン後、コンソールの [ユーザー センター] -> [セキュリティ設定] で [API トークン] を見つけ、開いてトークンを作成した後、ID とトークンをコピーします。

  • トークン情報を構成する
echo "id,token" > /etc/dnspod_token

idとをコピーした実際のコンテンツに置き換えるtokenと、プラグインを使用して を更新できます。

certbot renew --manual --preferred-challenges dns --manual-auth-hook /path/to/certbot-auth-dnspod.sh --force-renewal

自動的に更新したい場合は、次のコードを crontab に追加し、cron サービスを再起動できます。具体的なプロセスについては上で説明したため、ここでは繰り返しません。

29 3 1 * * root /bin/certbot renew --manual --preferred-challenges dns  --manual-auth-hook /path/to/certbot-auth-dnspod.sh --force-renewal --post-hook "/where/your/nginx -s reload"  

これは、毎月 1 日の 3:29 に証明書の強制更新を実行し、nginx を再起動するためです。

もちろん、プラグインを使用して証明書の自動 DNS 検証を適用することもできます。

certbot certonly --manual --preferred-challenges dns-01 --email [email protected] -d laravel.run -d *.example.com --server https://acme-v02.api.letsencrypt.org/directory --manual-auth-hook /path/to/certbot-auth-dnspod.sh 

4.2 ログアウト

次のコマンドを使用して、証明書名、含まれるドメイン名、有効期限、証明書ファイルのパスなど、生成された証明書情報を表示します。

certbot certificates

キャンセルする証明書を見つけて、証明書ファイルへのパスをコピーし、次のコマンドを使用してキャンセルします。

certbot revoke --cert-path   /etc/letsencrypt/live/example.com/fullchain.pem

参考リンク:https://blog8.flyky.org/20191108/certbot-DNS-TXT-check/

おすすめ

転載: blog.csdn.net/cljdsc/article/details/133461361