みんな大好き Let's Encrypt。

DNSラウンドロビンしてると、HTTP-01 challenge でも色々頑張るとできるんだけど、
せっかくなので、DNS-01 challenge を試してみました。

サマリー
- gcloud コマンド使えるようにして、Cloud DNS の API を使えるようにする
- dehydrated っての使ってみるよ


----
設定したいインスタンスはAWS上にあります。

DNS は Cloud DNS を使っているので、
DNS管理者の権限持ったサービスアカウント作成して、鍵を作成して json ダウンロードして、つかいたいサーバにおいて
gcloud SDK インストール

apt-get だと簡単だNE
https://cloud.google.com/sdk/downloads?hl=JA#managing_an_installation

gcloud init はしなくて大丈夫
https://cloud.google.com/sdk/gcloud/reference/auth/activate-service-account

$ gcloud auth activate-service-account --key-file=FILENAME.json
Activated service account credentials for: [example@example.iam.gserviceaccount.com]

あとでプロジェクト設定しろYOって言われるので先にしとく
でも、自分のは権限ないからエラーになる
けどクレデンシャルに合ったプロジェクトになってればよさそう
LB使う場合は権限いるかも
実際の書くわけにもいかないので例

$ gcloud config set project example
Updated property [core/project].
WARNING: You do not appear to have access to project [example] or it does not exist.

$ gcloud config list
[core]
account = example@example.iam.gserviceaccount.com
disable_usage_reporting = True
project = example

okpk


これ使ってみる
https://github.com/spfguru/dehydrated4googlecloud

インストール方法は↑のサイト見てね

## Config

dehydrated is looking for a config file in a few different places, it will use the first one it can find in this order:

- `/etc/dehydrated/config`
- `/usr/local/etc/dehydrated/config`
- The current working directory of your shell
- The directory from which dehydrated was run

/usr/local/etc/dehydrated/config にしよう
mkdir -p /usr/local/etc/dehydrated/config
cd /usr/local/etc/dehydrated/config
cp ~/dehydrated/docs/examples/config .
domains.txt も作る

けど、引数で出来るので実はいらない説
同じディレクトリに domains.txt も置いたんだけど反応なかった

っていうか

/usr/local/etc/dehydrated/config

ってファイルかあああああ

もういい、引数に書く(´・ω・`)
2回目は設定ファイルなしですすめます


./dehydrated -c -t dns-01 -k 'hooks/google-cloud/hook.sh'

ってすると、まずは

./dehydrated --register --accept-terms

しろと言われるのでおとなしくします。

で、再度 hook 実行

./dehydrated -c -t dns-01 -k 'hooks/google-cloud/hook.sh' -d rodon-cdn-v2.puyo.jp -d rodon-cdn01.puyo.jp

こんな感じ

DNSにTXTレコード追加して~の、読めるようになるまで待ち~のなので、ちょっと時間はかかります。

数分待てば

Deploying certificate for rodon-cdn01.puyo.jp from /root/dehydrated/certs/rodon-cdn01.puyo.jp/privkey.pem and /root/dehydrated/certs/rodon-cdn01.puyo.jp/fullchain.pem

と表示されておわり。

LBに登録するまでが dehydrated みたいですが、別にいらないのでその辺のエラーが出ても放置です。
そう、証明書さえ作れてしまえばいいのです。

ってアレだ、ROOT 直下に置かれても困るのでは問題ハハハ

--out ってあるので、せめて /etc の下のてきとーなとこに出そう・・・
とりま mkdir -p /etc/dehydrated

# ./dehydrated -c -t dns-01 -k 'hooks/google-cloud/hook.sh' --domain rodon-cdn01.puyo.jp --domain rodon-cdnv2.puyo.jp --out /etc/dehydrated
#
# !! WARNING !! No main config file found, using default config!
#
Processing rodon-cdn01.puyo.jp with alternative names: rodon-cdnv2.puyo.jp
 + Creating new directory /etc/dehydrated/rodon-cdn01.puyo.jp ...
 + Signing domains...
 + Generating private key...
 + Generating signing request...
 + Requesting new certificate order from CA...
 + Received 2 authorizations URLs from the CA
 + Handling authorization for rodon-cdn01.puyo.jp
 + Found valid authorization for rodon-cdn01.puyo.jp
 + Handling authorization for rodon-cdnv2.puyo.jp
 + Found valid authorization for rodon-cdnv2.puyo.jp
 + 0 pending challenge(s)
 + Requesting certificate...
 + Checking certificate...
 + Done!
 + Creating fullchain.pem...

Deploying certificate for rodon-cdn01.puyo.jp from /etc/dehydrated/rodon-cdn01.puyo.jp/privkey.pem and /etc/dehydrated/rodon-cdn01.puyo.jp/fullchain.pem
ERROR: (gcloud.beta.compute.ssl-certificates.create) Could not fetch resource:
 - Invalid Credentials

ERROR: (gcloud.compute.target-https-proxies.describe) Could not fetch resource:
 - Required 'compute.targetHttpsProxies.get' permission for 'projects/example/global/targetHttpsProxies/https-proxy-rodon-cdn01-puyo-jp'

=====================================================================================================
WARNING: Unable to find https target proxy named 'https-proxy-rodon-cdn01-puyo-jp' - no automatic update performed
YOU have to update your target proxy manually and set the SSL certificate to 'rodon-cdn01-puyo-jp-1565969804'
Go to https://console.cloud.google.com/networking/loadbalancing/advanced/targetHttpsProxies/
OR run the following command: (change $MY_HTTPS_PROY_NAME to your actual proxy name)
gcloud compute target-https-proxies update $MY_HTTPS_PROY_NAME --ssl-certificates rodon-cdn01-puyo-jp-1565969804
=====================================================================================================
 + Done!


再読み込みしないで、--out に指定したディレクトリに移動してくれたよ!!!!
天才かよ・・・

LBに登録しにいかないオプションありそうだからヘルプをもう一度読もう
→なさそう


そして、ここで気づいた


設定したドメイン名間違ってるううううううう


あほk

HTTP-01 challenge だと間違えてると気づくけど、DNS-01 challenge だと気づかないな
これは盲点だった
A にあるかどうかまでは見てないか。

ってももう一度やり直せばいいだけなのでおkpk

やりなおして、 nginx に設定して完了。


$ curl -I https://rodon-cdn-v2.puyo.jp/asdf
HTTP/2 404
server: nginx/1.10.3
date: Fri, 16 Aug 2019 16:28:23 GMT
content-type: application/xml
x-amz-request-id: 42CBB8DDA1D3C314
x-amz-id-2: xRdylDrMp2n4k0ai6EFUPCzDwiza7WfO+SHYc0tK8C1/sPj3SUqJo+IaakE7yrb/+n8XKE3TBiE=
x-varnish: 42 32795
age: 1341
via: 1.1 varnish (Varnish/5.0)
x-powered-by: Poporing
x-serve-name: Poporing02

$ curl -I https://rodon-cdn-v2.puyo.jp/asdf
HTTP/2 404
server: nginx/1.10.3
date: Fri, 16 Aug 2019 16:28:24 GMT
content-type: application/xml
x-amz-request-id: F9BA8CCC7318632F
x-amz-id-2: J3aURcK56kxCqXbX7qQ2VcvZxGS31bs+KwYLXhrJe1EXhQhSlH/NgIQkbff54rFcZvv06Z2cg0Y=
x-varnish: 32822 32812
age: 1142
via: 1.1 varnish (Varnish/5.0)
x-powered-by: Poporing
x-serve-name: Poporing01

404なのは正常です。
どっちのサーバいってもうまく出来てるね

よかったよかった( ˘ω˘)