01 / 本文
DNSは全部合っているのに証明書が出ない
GitHub Pages に独自ドメインを割り当てた。Aレコードは 185.199.108.153 から 185.199.111.153 の4本、どれも正しい。
それなのに1週間、HTTPSが有効にならなかった。管理画面には証明書の発行待ちと出たまま動かない。
http:// では開けるが https:// が繋がらない。canonical は https を指しているので、検索エンジンから見ると繋がらないURLを正規URLとして申告している状態だった。
02 / 本文
疑ったものを順番に潰した
正常に動いている他のドメインと、1項目ずつ突き合わせた。
- Aレコード4本 … 一致
- CAAレコード … どちらも未設定(どのCAでも発行できる)
- DNSSEC … どちらも無効
- CNAMEの有無 … 一致
- www の有無 … 正常なドメイン9件にも www は無い
www が無いせいだと2回言い切って、2回とも外した。 正常に動いているほうにも無かったので、最初から原因になりえなかった。
03 / 本文
違っていたのは設定の順序だった
最後に残ったのが、作業をどの順番でやったかだった。
うまくいかなかったドメインは、Pages を作ってすぐカスタムドメインを設定し、そのあとデプロイしていた。 正常なドメインは、デプロイが先だった。
GitHub はカスタムドメインを設定した時点で、そのドメイン宛てにHTTPで到達確認を行う。その時点で配信する実体が無いと、確認が通らない。 いったん失敗すると、あとからデプロイしても自動では再試行されなかった。
04 / 本文
効く順序
やり直したのは次の順番。
効かない Pages作成 → すぐ cname 設定 → デプロイ
効く Pages作成 → デプロイ → github.io で200を確認 → それから cname 設定05 / 本文
実際にかかった時間
いったん Pages を削除し、90秒ほど待ってから作り直した。build_type は workflow。
デプロイして https://<ユーザー名>.github.io/<リポジトリ>/ が200を返すことを確認し、そのあとでドメインを設定した。
16:58:03 cert=無
16:58:28 cert=approved
https: 20006 / 本文
25秒だった
1週間動かなかったものが、順序を変えただけで25秒で通った。DNSにもCAAにも、一度も問題は無かった。
approved を確認したあとで https_enforced を立てると、http:// が301で https:// に飛ぶようになる。ここも証明書が出ていない状態では設定できない。
07 / 本文
確認は相手と同じ見え方で取る
ブラウザで開けたかどうかは証拠にならない。HTTPステータスとヘッダを直接見る。
gh api repos/<owner>/<repo>/pages \
--jq '"cname=\(.cname) cert=\(.https_certificate.state)"'
curl -s -o /dev/null -w 'HTTP %{http_code} -> %{redirect_url}\n' http://example.jp/08 / 本文
まとめ
- DNSが正しくても、順序を外すと証明書は発行されない
- カスタムドメインは デプロイ済みを github.io で確認してから 設定する
- 失敗した状態は自動では戻らない。Pagesを作り直すのが速い
- 原因は測ってから言う。www のせいだと2回言い切って2回とも外した
コメント
この記事へのコメント
お名前だけで投稿できます。アカウント登録やログインは不要です。 いただいたコメントは確認のうえ公開します。