はじめに
Let's EncryptのDNS-01方式をニフクラDNSで認証して無料のSSL証明書を取得し自動更新する という話を昔しました。
上記では、certbotとフック用のシェルスクリプトを利用する方法を紹介しましたが、今回はlegoというOSSを利用した方法を紹介したいと思います。
legoとは
Go言語で書かれたACMEクライアントで、配布されているCLIバイナリをダウンロードして使用するとコマンド1つでLet's Encryptの証明書が取得できます。
DNS-01で認証する場合、様々なDNSサービスが対応して、サポートされているDNSサービスならすぐに証明書を発行できます。
もちろん ニフクラ DNS にも対応しております!(使いたいので対応させました)
このようにOSSなので、対応していないDNSサービスでも自分で実装してプルリクエストを送ることもできます。
証明書を取得する
以下の流れで証明書を取得します。
DNSゾーン登録
まずはニフクラDNSを利用するため、こちらを参考に認証したいドメインをコンパネからゾーン登録しておきます。
legoのダウンロード
curlやwgetでバイナリを利用するOS等の種類に応じてこちらからlegoをダウンロードしてきます。
$ curl -Ls https://github.com/go-acme/lego/releases/download/v2.4.0/lego_v2.4.0_linux_amd64.tar.gz | tar zxvf - -C /usr/local/bin/ lego
$ lego -v
lego version 2.4.0 linux/amd64
証明書発行
ご自身のメールアドレス、証明書を取得したいドメイン、ニフクラAPIの認証キーを設定し、以下のコマンドを実行することで証明書を取得できます。
$ export MAIL_ADDR=your_mail_address
$ export DOMAIN=your_domain
$ export NIFCLOUD_ACCESS_KEY_ID=your_access_key_id
$ export NIFCLOUD_SECRET_ACCESS_KEY=your_secret_access_key
$ lego --dns nifcloud -a --email $MAIL_ADDR --domains $DOMAIN run
コマンドの実行が完了すると、 .lego/certificates/
ディレクトリに取得した証明書が作成されています。
まとめ
certbotと比較して、DNS認証にフックスクリプトが不要な点やシングルバイナリで動作する点が便利なのでおすすめです。