皆さま、こんにちは!y.takanashiです。
暖かくなってきて、春の気配を感じる季節になってきましたね。
今回はDNS-OCIプラグインを使用して、SSL証明書の取得から削除に至るまでの一連の方法についてご紹介します。
目次
Certbotとは?
本題に入る前に今回使用するCertbotについて、簡単に説明したいと思います。
Certbotは、Let's Encryptが運営する認証局を使用して、SSL証明書を手軽に取得できるサービスで、無料で利用することができます。
Certbotはドメインの所有権を確認するために、「チャレンジ」と呼ばれる認証プロセスを使用します。
チャレンジには、「DNSチャレンジ」と「HTTPチャレンジ」の2種類があり、
DNSチャレンジは、特定のレコードを追加することによってドメインの所有権を確認し、
HTTPチャレンジは、Webサーバが特定のファイルをホストしていることを確認します。
両チャレンジの詳細については、以下の表とドキュメントをご覧ください。
※紹介したDNSチャレンジとHTTPチャレンジに加え、「TLS-ALPNチャレンジ」というチャレンジ方法が存在しますが、2023年3月時点でCertbotは未対応のため、説明は省略します。
DNS-OCIプラグインとは?
DNS-OCIプラグインは、DNSチャレンジで証明書を取得する際に使用できるOCI専用のプラグインで、DNSチャレンジを使用してSSL証明書を取得します。
一般的にDNSチャレンジは、特定のレコードを手動で設定する必要がありますので、自動化を実現するためにはかなりの工数が発生する可能性があります。
しかし、DNS-OCIプラグインはOCIのDNSサービスを使用することで、DNSレコードの設定作業を簡略化させて、簡単にSSL証明書を自動更新することができます。
そこで今回は、SSL証明書を取得するために必要な各ツールのインストール方法と、DNS-OCIプラグインを使用してSSL証明書を取得・更新・削除に至るまでの一連の方法についてご紹介します。
検証の流れ
今回の検証では、実行環境にOracle Linux 8を使用して、以下の手順に従って進めていきます。
1.Snapをインストール
※Snapは、異なるLinuxディストリビューションでの依存関係の問題等を解決できるツールで、Certbotをインストールする前にSnapを導入しておく必要があります。
↓
2.Certbotをインストール
↓
3.DNS-OCIプラグインをインストール
↓
4.SSL証明書を作成
↓
5.SSL証明書を更新
↓
6.SSL証明書を削除
事前準備
また事前準備として以下の作業を行なう必要があります。
1.ドメインを取得済みであること
※今回は「*.testyt.net」というドメインを使用してSSL証明書を取得します。
2.OCIのDNSサービスに、取得したドメインが登録済みであること
※未登録の方は、以下のドキュメントを参考に設定を行いましょう。
3.実行環境にOCI CLIがインストールされていること
※OCI CLIとは、OCIをコマンドラインから操作するためのツール。
まだ実行環境にインストールしていない場合は、以下のドキュメントを参考に導入しましょう。
各種設定
Snapのインストール
それでは早速各種設定をしていきます。
最初に以下のコマンドを順に実行して、EPELリポジトリを追加します。
sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
sudo dnf upgrade
追加後は以下のコマンドで確認を行い、EPELリポジトリが追加されていればインストールは完了です。
yum repolist
EPELリポジトリが追加できましたら、yumコマンドでSnapをインストールします。
sudo yum install snapd
インストール完了後、ソケットの自動起動を有効化しておきます。
sudo systemctl enable --now snapd.socket
classicスナップサポートを有効化するため、/var/lib/snapd/snap と /snap にシンボリックリンクを作成します。
sudo ln -s /var/lib/snapd/snap /snap
Snapの設定完了後、サーバの再起動を行います。
sudo reboot
再起動後は以下のコマンドでSnapの起動開始と自動起動の設定を行い、Snapをアクティブ化しておきます。
sudo systemctl start snapd
sudo systemctl enable snapd
Certbotのインストール
Snapのインストールが終わりましたら、以下のコマンドでCertbotをインストールします。
sudo snap install --classic certbot
完了後に、/snap/bin/certbot と /usr/bin/certbot にシンボリックリンクを作成します。
sudo ln -s /snap/bin/certbot /usr/bin/certbot
作成後、以下のコマンドでcertbotコマンドのパスが表示されれば、Certbotのインストールは完了です。
which certbot
DNS-OCIプラグインのインストール
SnapとCertbotのインストール完了後、OCI-DNSプラグインをインストールします。
DNS-OCIプラグインのインストールは2つ方法があります。
yumでインストール
1つ目はyumコマンドでDNS-OCIプラグインをインストールする方法です。
インストールする前に、以下のコマンドでEPELリポジトリが有効になっているかの確認を行います。
有効の場合はstatusが「enabled」と表示されます。
yum repolist epel
最初にPython 3用のパッケージ管理システムであるpython3-pipをインストールします。
sudo yum install python3-pip
完了後、yumコマンドでcertbot-dns-ociパッケージをインストールします。
sudo yum install certbot-dns-oci
インストールが成功した場合は、実行文の最後に以下のメッセージが表示され、DNS-OCIパッケージが正常にインストールされたことを確認できます。
Successfully installed certbot-dns-oci-*.*.* mock-*.*.*
Certbotのプラグインの一覧は、以下のコマンドを使用して表示されます。
certbot plugins
Certbotがインストールされている場合は、以下の図のようにDNS-OCIプラグインが表示されます。
git cloneでインストール
2つ目はgitコマンドでCertbotを入手する方法です。
以下が今回使用するgitリポジトリになります。
こちらも最初にpython3-pipをインストールします。
sudo yum install python3-pip
その後、以下のコマンドを使用してリポジトリをクローンします。
sudo git clone git@github.com:therealcmj/certbot-dns-oci.git
完了後、作成されたディレクトリに移動し、以下のコマンドを実行してDNS-OCIプラグインをインストールします。
cd certbot-dns-oci
pip3 install .
インストール時の最後の行に、以下のメッセージが表示されればDNS-OCIプラグインのインストールは完了です。
Successfully installed * acme-*.*.* certbot-*.*.* certbot-dns-oci-*.*.* * * *
SSL証明書の作成
DNS-OCIプラグインのインストールを完了後、SSL証明書を作成したいと思います。
今回は以下のコマンドでワイルドカード証明書を作成してみます。
sudo certbot certonly --authenticator dns-oci -d *.testyt.net -m *** --agree-tos --manual-public-ip-logging-ok
使用するコマンドのオプションは以下となります。
※作成前に「--dry-run」オプションでCertbotの動作確認を行うことを推奨します。
実行後、文中に「Successfully received certificate.」と表示されたら、証明書の作成は完了です。
念の為、以下のコマンドを実行して、指定したドメインでSSL証明書が取得されている事を確認しましょう。
sudo certbot certificates
※Certbotで作成したSSL証明書の有効期限は3ヶ月となっております。
期限が近づくと、登録したメールアドレスに通知が届きますので、失効前に必ずSSL証明書を更新するようにしましょう。
SSL証明書を更新
続いて、以下のコマンドを使用して、SSL証明書の更新を行います。
sudo certbot certonly --authenticator dns-oci -d *.testyt.net --agree-tos --force-renewal
使用するコマンドのオプションは以下となります。
実行後、SSL証明書の作成時と同様に「Successfully received certificate.」と表示されたら、証明書の更新は完了です。
念の為、サーバ証明書の情報を確認してみると、以下の図のように証明書が更新されていることがわかります。
SSL証明書を削除
最後に、使用頻度は少ないですが、SSL証明書を削除するコマンドも紹介します。
以下のコマンドを使用して、SSL証明書の削除を行います。
※証明書名は、certbot certificatesコマンドで表示されたものを使用しましょう。
sudo certbot delete --cert-name testyt.net
実行後、文中に「Deleted all files relating to certificate <SSL証明書名>.」と表示されたら、SSL証明書の削除は完了です。
以上でCertbotを使ったSSL証明書の作成から削除までの一連の流れについて、説明を終了します。
SSL証明書の設定ファイル
補足で、SSL証明書の設定ファイルは/etc/letsencrypt/renewalディレクトリ内の「<ドメイン名>.confファイル」となります。
設定ファイル内には証明書や秘密鍵等のパス、認証情報等が記載されています。
まとめ
最後に、今回の検証について簡単にまとめます。
- Certbotとは?
- Webサイトの暗号化に使用されるSSL証明書を手軽に取得できるツールであり、Let's Encrypt認証局を使用してSSL証明書を取得する
- オープンソースのサービスで、無料で利用することができる
- DNS-OCIプラグインとは?
- OCIのDNSサービスを使用して更新を行うプラグイン
- 既存のDNSチャレンジでの取得方法とは異なり、SSL証明書の自動更新が可能
- 各コマンドについて
- certbot certonly...SSL証明書を作成・更新する際に使用
- certbot delete...SSL証明書を削除する際に使用
- certbot certificates...取得しているSSL証明書一覧を表示
- certbot plugins...現在使用できるプラグイン一覧を表示
- その他
- /etc/letsencrypt/renewal/<ドメイン名>.conf...SSL証明書の設定ファイル。証明書や秘密鍵のパス、認証情報等を記載
以上となります。
この記事を通じて読者の皆様の問題解決の一助となれば幸いです。
最後まで読んで頂き、ありがとうございましたm(_ _)m