Skip to content

nginxでletsencryptを使う(gcloud dnsのdns-1-challenge)

Posted on:August 25, 2023 at 01:00 PM

NginxでLetsEncryptを使う

今回はワイルドカード証明書を使うため、dns01-challengeの設定をする

gcloud-dnsのdns1-challengeを使うのでそれ系のプラグインを入れておく

sudo su -
apt update
apt install -y nginx certbot python3-certbot-nginx python3-certbot-dns-google

gcloud-dnsの設定

ゾーンの設定

一旦GCPのPROJECT名をmyprojectとする

cloud-dnsで自分のドメインのゾーンを設定する。

domain-com

適当なサービスでドメインをとったら、そのNSを以下の通りに設定する。

ns-cloud-a1.googledomains.com
ns-cloud-a2.googledomains.com
ns-cloud-a3.googledomains.com
ns-cloud-a4.googledomains.com

サービスアカウントなどの設定

PROJECT_ID=myproject-id
gcloud iam service-accounts create dns01-solver --display-name "dns01-solver"
gcloud projects add-iam-policy-binding $PROJECT_ID \
   --member serviceAccount:dns01-solver@$PROJECT_ID.iam.gserviceaccount.com \
   --role roles/dns.admin
gcloud iam service-accounts create dns01-solver

サービスアカウントのシークレットを作っておく

gcloud iam service-accounts keys create key.json \
   --iam-account dns01-solver@$PROJECT_ID.iam.gserviceaccount.com

certbotの設定

以下のようにドメインを指定し、issueingを行う

key.jsonはサービスアカウントのシークレット

certbot certonly --dns-google  --dns-google-credentials key.json -d *.domain.com

すると、/etc/letsencrypt/live以下に鍵類が生成される。

nginxの設定

コンフィグファイルを以下のように設定

conf.d/https.conf


server {
    listen 443 ssl;
    server_name *.domain.com;
    ssl_certificate_key /etc/letsencrypt/live/privkey.pem
    ssl_certificate /etc/letsencrypt/live/fullchain.pem

    # 好きなコンテンツ
}

認証鍵を定期更新するようにする

以下のコマンドをcronに適当に登録すれば、期限が1ヶ月以内になったタイミングで再度チャレンジしてくれる

certbot renew