概要
Let’sEncryptの「ワイルドカード証明書」は、
「通常の証明書」よりも自動更新の設定が困難なため、
設定方法を記載します。
[背景]
・キノスラでは、vhostを使用して、マルチドメインに対応したテスト環境を構築している。
・テスト環境は、無料のSSL証明書(Let’sEncrypt)にてセキュリティを高めているが、
「通常の証明書」とは違い、サブドメインも対象になる「ワイルドカード証明書」を使用している。
通常の証明書とワイルドカード証明書の違い
通常の証明書
・サブドメインを含めたドメインを指定する。
・自動更新の設定が容易
↓をSSL化したい場合は、「aibatest.cynosura.jp」と「hc-gold.cynosura.jp」でそれぞれ証明書を発行。
https://aibatest.cynosura.jp/
https://hc-gold.cynosura.jp/gold/henri-charpentier/
ワイルドカード証明書
・ドメインのみの指定が可能(サブドメインまで指定する必要がない)
・自動更新の設定が困難
↓をSSL化したい場合は、「*.cynosura.jp」で証明書を発行。
https://aibatest.cynosura.jp/
https://hc-gold.cynosura.jp/gold/henri-charpentier/
前提条件
ワイルドカード証明書の自動更新には、
ドメイン所有の証明 (dns-01) として、DNSレコードのAPIによる自動書き換えが必要になります。
今回は、さくらのクラウドのネームサーバーを利用することを前提とします。
環境
ドメイン取得サイト
お名前ドットコム
ネームサーバー
さくらのクラウド
※お名前ドットコムから切替
※課金が必要
利用料金は、44円(税込)/月(「DNS」のみの利用が可能なため)
ネームサーバーの切替方法は下記参照
https://cnsrwiki.cynosura.jp/%e3%82%ad%e3%83%8e%e3%82%b9%e3%83%a9%e3%83%8d%e3%83%bc%e3%83%a0%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc%e3%81%ae%e5%88%87%e6%9b%bf/
サイトを構築しているサーバー
さくらのVPS
OS
CentOS7
Apache
Apache/2.4.6 (CentOS)
設定方法
ワイルドカード証明書の取得方法(SSH)
参考文献
https://qiita.com/NaaO/items/d5bc8e9ec2384a0a89b8
1.必要なパッケージをインストール
yum install -y --enablerepo=epel certbot
2.Certbotが入っていてバージョンが0.22.0以前の場合はアップデート
yum update -y certbot
3.ワイルドカード証明書を取得
(ドメイン、メールアドレスは自分の環境に合わせて変更してください)
certbot certonly --manual --server https://acme-v02.api.letsencrypt.org/directory --preferred-challenges dns-01 -d '*.example.com' -m yourmailaddress@example.com --agree-tos --manual-public-ip-logging-ok
キノスラテストサーバーにて設定した際のコマンド
certbot certonly --manual --server https://acme-v02.api.letsencrypt.org/directory --preferred-challenges dns-01 -d '*.cynosura.jp' -m toshiki-aiba@cnsr.jp --agree-tos --manual-public-ip-logging-ok
実行すると以下のような文字列が表示されると思います。
表示された後にPress Enter to Continueと表示されますが、この時点ではまだ押さないでください。
※以下の処理が終わってから押してください。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.example.com with the following value:
[英数字の文字列]
Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
上に書いてある英数字の文字列をコピーし、
ネームサーバーのDNS TXTレコードに記述します。
ホスト名の部分を_acme-challenge、VALUEの部分を先ほどの[英数字の文字列]にしてください。

入力し終わったら追加し、反映ボタンを押します。
反映には、30分~4時間程かかります。
(余裕を持って4時間ほど待つことをオススメします)
SSHに戻り、Enterキーを押してください。
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/example.com-0001/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.com-0001/privkey.pem
Your cert will expire on 2019-04-26. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
上記のような文字列が出たら成功です。
VirtualHostをSSL化する
上記で取得したワイルドカード証明書を使用します。
参考文献
https://qiita.com/NaaO/items/d5bc8e9ec2384a0a89b8
1.vhostの設定ファイルに記述を追記
<Virtualhost *:443>
DocumentRoot /var/www/html/hoge
ServerName hoge.example.com
SSLEngine On
SSLProtocol all -SSLv2
SSLCertificateFile /etc/letsencrypt/live/example.com-0001/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com-0001/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/example.com-0001/chain.pem
</VirtualHost>
※DocumentRoot / ServerName は、環境に合わせてください。
※SSLCertificateFile / SSLCertificateKeyFile / SSLCertificateChainFile は、
実際に発行されたディレクトリ名に変更してください。
(キノスラテストでは、「-0002」になっている)
キノスラテストサーバーにて、追記後のファイル
<VirtualHost *:80>
ServerAlias *.cynosura.jp
UseCanonicalName Off
VirtualDocumentRoot /var/www/cynosura.jp/%1/public_html
<Directory /var/www/cynosura.jp/*/public_html>
Options FollowSymLinks ExecCGI
AllowOverride All
Order deny,allow
Allow from all
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule /robots.txt /cynosura_common_alias/robots.txt [QSA,L]
</Directory>
Alias /cynosura_common_alias /var/www/common/cynosura.jp
</VirtualHost>
<VirtualHost *:443>
ServerAlias *.cynosura.jp
UseCanonicalName Off
VirtualDocumentRoot /var/www/cynosura.jp/%1/public_html
ServerName cynosura.jp:443
SSLEngine On
SSLProtocol all -SSLv2
SSLCertificateFile /etc/letsencrypt/live/cynosura.jp-0002/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/cynosura.jp-0002/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/cynosura.jp-0002/chain.pem
<Directory /var/www/cynosura.jp/*/public_html>
Options FollowSymLinks ExecCGI
AllowOverride All
Order deny,allow
Allow from all
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule /robots.txt /cynosura_common_alias/robots.txt [QSA,L]
</Directory>
Alias /cynosura_common_alias /var/www/common/cynosura.jp
</VirtualHost>
※参考文献には載っていないが、robots.txtのリダイレクトについても必ず記述する
(記述が漏れるとrobots.txtが反映されなくなり、サイトがクロールされてしまう。)
2.保存が終わったらプロセスを再起動
systemctl restart httpd
以上でSSL化されると思われます。
証明書の自動更新化方法
参考文献
1.APIキー取得
さくらのクラウド ホーム で APIキー > (該当するアカウント) > 追加 と辿って、
APIキーを作成してください。
種類: リソース操作APIキー
名前:適当(例: certbot )
アクセスレベル: 設定編集

APIを作成すると、アクセストークンとアクセストークンシークレットが発行されます。
2.APIキー設定
サーバーに、アクセストークンとアクセストークンシークレットを記述したファイルを作成し、
パーミッションを変更します。
vim ~/.sakura
dns_sakuracloud_api_token = "hogehoge"
dns_sakuracloud_api_secret = "fugafuga"
chmod 0600 ~/.sakura
キノスラテストサーバーでは、ルート直下に「.sakura」として作成しました。
3.コマンドの動作確認
次でコマンドの定期実行設定(自動化)を行いますが、
その前に、コマンドが正常に動くか動作確認を行います。
yum install certbot-dns-sakuracloud
certbot renew --force-renewal --dns-sakuracloud --dns-sakuracloud-credentials ~/.sakura
sudo systemctl restart httpd
以下のような出力になれば問題なし。
※反映が出来ない場合は、エラー文章を確認してください。
自分が対応した際は、1日の反映上限に達してしまい、反映ができませんでした。
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/cynosura.jp-0002.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Plugins selected: Authenticator dns-sakuracloud, Installer None
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org
Renewing an existing certificate for *.cynosura.jp
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed without reload, fullchain is
/etc/letsencrypt/live/cynosura.jp-0002/fullchain.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all renewals succeeded:
/etc/letsencrypt/live/cynosura.jp-0002/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
4.コマンドの定期実行設定(自動化)
vi /etc/crontab
以下を追記
50 05 * * 0 /usr/bin/certbot renew --post-hook "systemctl restart httpd"
設定は以上で終了です。
おつかれさまでした。