Let’s Encrypt でワイルドカード証明書を発行してすべてのサブドメインにhttpsを適用
はじめに
僕のブログやその他検証プログラムを配置しているラボページなどはいずれも「Let's Encrypt」を使ってSSLを実現しています。
「Let's Encrypt」のワイルドカード証明書の更新を行っていて、再度新たに設定し直したのですがやり方を忘れないように「ポストイット」にして貼り付けておきます。
検証環境
事前作業
- ドメイン が必須なので、事前に取得しておきましょう。
- ※今回のブログ用に
spinosaurus.work
というドメインを取得し手順を整理しました。
- ※今回のブログ用に
- DNSレコードとして、ワイルドカードのAレコードを作成しておくとこのあとの確認がしやすいです。
- 例えば
*.spinosaurus.work
のようなレコード
- 例えば
作業手順
「Let's Encryt」用のワイルドカード証明書を作成し、認証局・Webサーバに設定するために Certbot というツールを利用します。
インストールしたあとは Certbot を使えばあっという間にSSLによる通信ができ当たります。
「Certbot」のインストール
yum
でインストールができるのですが、最新バージョンでない場合に正常に動作しないことがあってハマりした。
はまらないように最新バージョンを使うことをおすすめします。
( yum
でインストールしたものでも問題が起きないときのほうが多いのですが、ときどきできなかったりするので。。。)
正しくインストールされました。
定期的に git pull --rebase
を実行して、最新ソースを取得しておくのが良いかもしれません。
ワイルドカード証明書作成
いよいよ本題のワイルドカード証明書の作成と発行について。
以下のコマンドを実行します。
ほぼこのままでいけますが、 -d <ドメイン>
/ -d *.<ドメイン>
/ -m <メールアドレス>
の部分は当然ながらお使いのドメインやメールアドレスに置き換えてください。
oXr-i6tCYP*********************************
の部分はマスキングしておきましたが、本当は半角文字列が表示されています。
このタイミングで、お使いのドメインの設定を変更します。
DNSに TXTレコード を追加します。
設定する内容は以下をご参考ください。(ドメイン部分はお使いのドメインに書き換えてくださいね(汗))
ホスト名 | TYPE | VALUE |
---|---|---|
_acme-challenge.spinosaurus.work | TXT | oXr-i6tCYP********************************* |
DNSの設定変更後、結構待たないといけないです。
(さくらのDNSを使ったときは一瞬でしたが、お名前.comを使ったときは10分ぐらい待ちました。)
DNSサーバへのTXTレコード反映状況は、以下のコマンドを実行すれば確認できます。(1秒おきに更新されます。)
失敗した場合はもう一度、今度は別のTXTレコードを追加するようにメッセージが表示されますので、追加しましょう。
(たまたまなのか、「変更」ではなく「追加」しないと成功しなかったので、失敗したときのTXTレコードは残したまま「追加」することをオススメします。)
正常に終了すれば以下のようなメッセージが表示されます。
「Let's Encrypt」の証明書は 3ヶ月間 のみ有効であるため、有効期限が近づいてきたら更新が必要です。
成功したあとに表示されたメッセージにかかれている通り、 certbot-auto renew
で更新可能です。cron
などに仕掛けておくのがいいですね。
僕は root
ユーザのcronに以下の設定を仕掛けています。( 後述の「注意」を参照! / 良い方法があれば教えてください。)
※(注意-2019-06-25追記)
証明書の有効期限が近づくと、上記で設定されたcronが更新処理を行うようになるはずですが、僕のサーバ環境では今まで成功したことがありません。
ネット上には「ワイルドカード証明書を利用した場合には certbot-auto renew
は正しく動作しない」という情報もあります。
したがって、残念ながら現状では certbot-auto certonly --manual
コマンドを再度実行し、DNSのTXTレコードの再設定を行うことで更新をしています。
良い方法をご存知の方、ぜひ情報をお待ちしています。
ワイルドカード証明書の作成を確認
本当に証明書ができたのか確認しておきましょう。
このように、 /etc/letsencrypt
ディレクトリ配下に証明書が作成されていますね。
ApacheにSSL証明書を設定する
作成した証明書も利用しなければ意味がありません。
Apache上で利用したい場合は /etc/httpd/conf.d/spinosaurus.work.conf
ファイルに以下のような記述を追記します。
大事な部分は ServerName
の部分がサブドメインとなっている点と SSLEngine
/ SSLCertificateFile
/ SSLCertificateKeyFile
/ SSLCertificateChainFile
で証明書の配置場所を指定する点です。
public_html
ディレクトリに適当なHTMLファイルを配置してやれば https://sub.spinosaurus.work
をブラウザで開いてページを閲覧できるはずです。
ディスカッション
コメント一覧
まだ、コメントがありません