概要
筆者はletsencryptでワイルドカード証明書を取得していますが、
*.example.com
の証明書を取得して、
example.com
の、「サブドメインが付かないドメインそのもの」 (hoge.example.com / foo.example.com / supercalifragilisticexpialidocious.example.com等を 含まない ドメイン)、いわゆるネイキッドドメインでの証明書を取っていないかどうかの確認手順です。
重要な仕様
割と躓きやすい仕様ですが、
*.example.comは、example.comを含みません。
ワイルドカード証明書は「何か」.example.comにマッチする証明書。つまり、この「何か」が空文字にならないルールです。
筆者が過去の記事でletsencryptで証明書を作成する際
certbot certonly --manual \
--preferred-challenges dns \
--server https://acme-v02.api.letsencrypt.org/directory \
-m あなたの有効なメールアドレス@example.com \
-d "*.example.com" \
-d "example.com"
と、
-d "*.example.com"-d "example.com"
のように、ワイルドカードとネイキッドドメインの両方を含めているのはまさにその理由です。
これを忘れたことによるありがちなエラー
*.example.com だけ取得
↓https://example.com にアクセス
↓
証明書エラー
↓
「え、ワイルドカードなのに!?」
という事態が多く発生します。
ネイキッドドメインの証明書を取得したか
以下の2つのコマンドを用います。
Let's encryptを利用している場合
非常に簡単です。
sudo certbot certificates
と実行するだけ。
Certificate Name: example.com
Serial Number: UID]
Key Type: ECDSA
Identifiers: *.example.com example.com
のように、Identifiersの欄に.*がついているとついていないドメインがついていればOKです。
Let's encryptを利用していない場合
openssl x509 -in /path/to/certs/directory/cert.pem -noout -text | grep -A1 "Subject Alternative Name"
と実行。(証明書の場所は合わせます)
X509v3 Subject Alternative Name:
DNS:*.example.com, DNS:example.com
のように、DNSの欄に.*がついているとついていないドメインがついていればOKです。
以上、実務で予め両方の証明書を取得していれば「なんてことない」仕様ですが、これを取得していない場合のSSL再取得の手間はかなり手間です。