*.example.com というサブドメインを有するドメインを1つの証明書で運用できます。
* の部分が多くなる想定のドメインにおいて、SSL証明書の取得と維持管理のコストを下げることができます。
※ * は任意の文字列を指定可能。ただしドット(.)を含むことはできない。
※ 証明書の自動更新ができない場合があるのでご注意ください。(後述)
less /etc/redhat-release CentOS release 6.10 (Final)
以下、すべてのコマンドは root になった状態で発行しています |
---|
certbot コマンドが入っていなかったので以下の手順にてインストールしました。
すでにインストール済みの場合、このセクションは読み飛ばしてください。
なお、yum でのインストール
# yum install certbot
では、エラーで入らなかったので、pip(pythonのパッケージ管理ツール)にてインストールしました。
※ yumでは下記のエラーで原因は不明。
# yum install certbot : パッケージ certbot は利用できません。 エラー: 何もしません
# yum install https://repo.ius.io/ius-release-el6.rpm # yum install python36* # yum install python-pip
# update db # locate pip | less : /opt/eff.org/certbot/venv/bin/pip /opt/eff.org/certbot/venv/bin/pip3 /opt/eff.org/certbot/venv/bin/pip3.4 :
# /opt/eff.org/certbot/venv/bin/pip install --upgrade pip
# /opt/eff.org/certbot/venv/bin/pip --version pip 19.1.1 from /opt/eff.org/certbot/venv/lib64/python3.4/site-packages/pip (python 3.4)
# /opt/eff.org/certbot/venv/bin/pip install certbot
# locate certbot | less : /opt/eff.org/certbot/venv/bin/certbot :
# cd /usr/bin # ln -s /opt/eff.org/certbot/venv/bin/certbot certbot
# which certbot /usr/bin/certbot
# certbot --version certbot 1.0.0
# certbot certonly --manual \ --server https://acme-v02.api.letsencrypt.org/directory \ --preferred-challenges dns \ -d *.example.com -d example.com \ -m admin@example.com \ --agree-tos \ --manual-public-ip-logging-ok
※「*.example.com」「example.com」「admin@example.com」は適宜変更
上記コマンドを実行すると、以下のようにDNSのTXTレコードに値(トークン)を設定するように指示されます。
これは、ドメインの正規所有者であるか確認のためです。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Please deploy a DNS TXT record under the name _acme-challenge.example.com with the following value: xxxx-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Before continuing, verify the record is deployed. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Press Enter to Continue
指示されたTXTレコードを設定し、反映されるまで待ちます。
今回は「お名前.com」で管理されているドメインだったため、「お名前.com」の管理画面からTXTレコードを登録しました。
登録後、以下のコマンドにて、TXTレコードが反映されたかを確認します。
# nslookup -type=TXT _acme-challenge.example.com : Non-authoritative answer: _acme-challenge.example.com text = "xxxx-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" :
# dig -t TXT _acme-challenge.example.com : ;; ANSWER SECTION: _acme-challenge.example.com. 41 IN TXT "xxxx-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" :
反映されたらターミナルに戻り、エンターキーを押下して続行します。
(このとき、ドメインの正規所有者であるか認証されます)
Press Enter to Continue → 【Enter】キーを押下
なお、エンターキーでの待機状態の時間が経ち過ぎると、認証に失敗するので、その場合はやり直します。 ※ 認証失敗に備え、TXTレコードのTTLは短め(60sec位)の設定が推奨されます。
認証に成功すると、以下のように「Congratulations!」と表示され、生成された証明書等のパスが表示されます。
Waiting for verification... Cleaning up challenges : IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/example.com/fullchain.pem :
証明書 /etc/letsencrypt/live/<ドメイン名>/cert.pem 証明書+中間CA証明書 /etc/letsencrypt/live/<ドメイン名>/fullchain.pem 秘密鍵 /etc/letsencrypt/live/<ドメイン名>/privkey.pem 中間CA証明書 /etc/letsencrypt/live/<ドメイン名>/chain.pem
vhosts.conf
<VirtualHost *:443> ServerName example.com ServerAlias *.example.com DocumentRoot /path/to/www/htdocs : <Directory "/path/to/www/htdocs"> : </Directory> # ssl certificate SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem </VirtualHost>
configtest して、問題なければリロードして反映
# /etc/init.d/httpd configtest # /etc/init.d/httpd reload
ブラウザから
https://example.com https://hoge.example.com https://fuga.example.com
などにアクセスして、問題がないか確認します。
sub2.sub1.example.com
のようなホスト名が複数になるサブサブドメインは、今回の取得手順では有効ではありません。
sub2.sub1.example.com
に対して有効にしたい場合は、
sub1.example.com
に対するワイルドカード
*.sub1.example.com
の証明書を取得する必要があります。
ワイルドカードSSL証明の自動更新については、認証方式に「DNS-01方式」が利用されます。
そのため、API等が用意されている必要があり、以下等でドメイン管理されている必要があります。
それ以外の「お名前.com」や「ValueDomain」の場合は、手動更新しか手段がないようです(2020年8月現在)
なお、Cloudflare と MyDNS については、以下などを参考にしてください。
Cloudflare
MyDNS