MENU

[キノスラ]let’sワイルドカード証明書 取得~自動更新

目次

概要

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>
2.保存が終わったらプロセスを再起動
systemctl restart httpd

以上でSSL化されると思われます。

証明書の自動更新化方法

参考文献

https://ite.cexen.info/%E3%81%95%E3%81%8F%E3%82%89%E3%81%AE%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%81%A7%E3%81%A8%E3%81%A3%E3%81%9F%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%82%92-certbot-%E3%81%AE-dns-01-%E3%81%AB%E5%AF%BE/

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"

設定は以上で終了です。
おつかれさまでした。

この記事を書いた人

目次