さくらのクラウド上でサーバー(インスタンス)を立ち上げる際、割り当て予定のドメインがさくらのクラウド DNSを使用している状態であれば、Let’s EncryptによるSSL証明書をインストールスクリプトで自動インストールさせることができます。
さくらのクラウドのLet’s Encryptスクリプトでは、DNS認証を利用しているようなのですが、DNS認証であれば通常のSSL証明書に加え、ワイルドカード証明書の取得も行うことができます。
さて、状況によっては、サーバーを構築した後で”Let’s Encryptのワイルドカード証明書を発行できるようにしたい”という場合が出てくることがあります。
この際、certbot-autoを手動でインストールしても、さくらのクラウドのDNSを使用したDNS認証を行うのに必要なcertbotプラグイン、certbot-dns-sakuracloudは含まれていないため、別途入手する必要があります。
今回は、後からインストールしたcertbotでさくらのクラウドDNSを使用したワイルドカード証明書を取得する方法をご紹介したいと思います。
まず、certbot-autoをインストールしておきます。
sudo curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto
sudo chmod +x /usr/bin/certbot-auto
インストールとは言っても、Let’sEncryptの公式サイトからcertbot-autoの本体をダウンロードしてOSの適切な場所へ配置し、実行権限を与えるだけです。
保存先は/usr/binである必要は必ずしもないですが、パスが通っていないディレクトリに配置した場合は.bashrcなどに記述をして、パスを通すように変更する必要があります。
次に、certbot-autoのセットアップを行います。
sudo /usr/local/bin/certbot-auto --version
のような影響の少ないコマンドでcertbot-autoを動かせば、初回セットアップが自動的に行われます。
初回セットアップが完了すると
/opt/eff.org/certbot
ディレクトリが作成されます。
作成されていることを確認したら、カレントディレクトリを次の場所に移動します。
cd /opt/eff.org/certbot/venv
カレントディレクトリを移動したら、続けて下記のコマンドを実行します。
source bin/activate #certbot用のpython仮想環境に移動
pip install certbot-dns-sakuracloud
これで、さくらのクラウド DNS用のcertbotプラグインのインストールが始まります。
完了したら、次のコマンドでPythonの仮想環境から抜けます。
deactivate
次に、さくらのクラウドのAPIキーを取得しておきます。
APIキーの取得方法については下記サイトを参照してください。
さくらのクラウドDNS + Let’s Encrypt でワイルドカード証明書する! – Qiita
ここで取得したAPIキーを、ファイルに保存しておきます。
sudo vi ~/.sakura
先程取得したさくらのクラウドのAPIキーを下記のように記述します。
ファイルの内容:
dns_sakuracloud_api_token = 'アクセストークン'
dns_sakuracloud_api_secret = 'アクセストークンシークレット'
上記で作成した.sakuraファイルのパーミッションを変更します。
sudo chmod 600 ~/.sakura
これで下準備は完了です。
それでは実際に証明書を取得しましょう。
sudo certbot-auto certonly --dns-sakuracloud \
--dns-sakuracloud-credentials ~/.sakura \ #APIキーを記述したファイルのパスを指定
-d example.com -d *.example.com \ #SSLを取得したいドメインを指定
-m mail@example.com \ #Let's Encryptから通知を受けるメールアドレスを指定
--agree-tos \ #規約に同意
--manual-public-ip-logging-ok \
--preferred-challenges dns-01 \
--server https://acme-v02.api.letsencrypt.org/directory
--renew-hook "SSL証明書更新時に実行したいコマンド"
これで認証に問題がなければ証明書が発行されます。
なお、”–renew-hook”の指定は任意ですが、certbot単体ではサーバーの自動再起動などは行ってくれないため、webサーバーやメールサーバーなどで利用している場合は指定をお勧めします。
なお、上記のコマンドで更新時の設定が
/etc/letsencrypt/renewal
に保存される為、2回目以降の更新時は
sudo certbot-auto renew
のみでokとなります。(デフォルトで30日以上期限がある場合は更新がスキップされるので、強制的に更新を行う場合は “–force-renew”オプションを付加して実行します。)
上記のコマンドをcronに登録しておけば、定期的に証明書をチェックさせたうえで、期限が迫った際に自動で更新させるようにすることもできます。
さくらのクラウド DNSを使用している方は是非試してみてください。
参考サイト:
【Let’s Encrypt】さくらのクラウドのDNSで「DNS-01 Challenge」を使ってみた – TeraDas
無料でHTTPS化できる「Let’s Encrypt」をやってみた ※install.sh付き – Qiita