Skip to main content

Authenticator plugin for certbot to handle dns-01 challenge with MyDNS.JP.

Project description

Certbot DNS MyDNS.JP Plugin

This is an authenticator plugin for certbot to handle dns-01 challenge with MyDNS.JP.

日本語の説明はこちら

Reference

MyDNS.JP free DynamicDNS, free subdomains, and you can also set a fixed IP address or your owned domain.

Let's Encript Free SSL/TLS certificate (DV certificate), Wildcard certificate can be issued using DNS-01 challenge.

certbot ACME client recommended by Let's Encript, challenge authentication processing can be added with plugins.

Install

To install this plugin, please perform one of the installation steps below.

Please note that certbot is required to run the plugin. Please check the certbot documentation for certbot installation instructions.

snap

Add the plugin using snap to certbot installed using snap.

snap install certbot-dns-mydnsjp
snap set certbot trust-plugin-with-root=ok
snap connect certbot:plugin certbot-dns-mydnsjp
snap connect certbot-dns-mydnsjp:certbot-metadata certbot:certbot-metadata

Docker

Get a pre-built image (including certbot).

docker image pull uskjohnnys/certbot-dns-mydnsjp

pip

Add the plugin with pip to certbot installed with pip.

pip install certbot-dns-mydnsjp

from source code

Add the plugin using pip from the source code to certbot installed using pip.

git clone https://github.com/usk-johnny-s/certbot_dns_mydnsjp
cd certbot_dns_mydnsjp
pip install .

Check if the plugin is recognized

certbot plugins

If "dns-mydnsjp" is displayed in the plugin list, this plugin is recognized.

If it is not recognized, certbot included in the OS package may not be uninstalled. Please uninstall the plugin and certbot and then perform the installation steps again.

How to use

Creating a MyDnsJp account settings file

Please register your account with MyDNS.JP in advance and register the domain name in your account.

Enter the registered domain name and account information in the MyDnsJp account settings file (e.g. mydnsjp.ini). The created MyDnsJp account configuration file prohibits Other access (for example, chmod 660 mydnsjp.ini). (Suppressing warnings when running certbot)

[dns_mydnsjp_credential]
[[example.mydns.jp]]
'id'='mydns_jp_mastrid'
'pwd'='mydns_jp_masterpassword'

MyDNS.JP can also register host names that include dots, such as "A.example," so if domain zone separation is not required, you can also obtain a certificate for A.example.mydns.jp using the above configuration file. (If you do not separate zones, there is no need to delegate subdomains to child accounts.)

If you log in to MyDNS.JP and register on the DOMAIN INFO screen with TargetID=child account in the host record, that record will be the IP notified by the child account.

To perform zone separation for subdomains on MyDNS.JP, log in to MyDNS.JP and add a child account on the USER INFO screen, then log in to MyDNS.JP and on the DOMAIN INFO screen, select "Hostname=Sublevel". You can delegate a subdomain to a child account by setting the domain name, Type=DELEGATE, TargetID=child account.

If you want to obtain certificates for both the parent account's domain and the child account's subdomain, please include the authentication information for both the parent account and child account in the MyDnsJp account configuration file.

[dns_mydnsjp_credential]
[[example.mydns.jp]]
'id'='mydns_jp_masterid'
'pwd'='mydns_jp_masterpassword'
[[sub.example.mydns.jp]]
'id'='mydns_jp_childid'
'pwd'='mydns_jp_childpassword'

MyDNS.JP allows you to register one domain with one account. (If you want to register multiple domains with MyDNS.JP, register multiple accounts.) If you list multiple domains in the MyDnsJp account settings file, you can also obtain multi-domain certificates using MyDNS.JP. can.

[dns_mydnsjp_credential]
[[example1.mydns.jp]]
'id'='mydns_jp_mastrid1'
'pwd'='mydns_jp_masterpassword1'
[[example2.mydns.jp]]
'id'='mydns_jp_masterid2'
'pwd'='mydns_jp_masterpassword2'

Execute certbot

Run the DNS-01 challenge on MyDNS.JP by adding the following to the certbot command line option. (Check the certbot page for other options.)

certbot \
  --preferred-challenges dns \
  --authenticator dns-mydnsjp \
  --dns-mydnsjp-credentials <MyDNS account configuration file (e.g. mydns.ini)>
  …

If an error occurs while running certbot, deletion/restoration of the DNS TXT record after authentication may fail, so please log in to MyDNS.JP and delete/modify the record contents on the DOMAIN INFO screen.

(The TXT record used for DNS-01 challenge authentication is a TXT record whose hostname starts with "_acme-challenge".)

Plugin command line options

Options Functions/Applications
--dns-mydns-propagation-seconds Wait time after DNS configuration (seconds) Default=30
--dns-mydns-credentials Specify the file name that describes the MyDnsJp account
--dns-mydns-no-txt-restore NS-01 challenge Delete the TXT entry used after authentication (if this option is not specified: restore the used TXT entry)

Build the package

If you need to rebuild the package, please refer to the build instructions below.

Building the snap package

Install snapcraft, then run the following:

git clone https://github.com/usk-johnny-s/certbot_dns_mydnsjp
cd certbot_dns_mydnsjp
snapcraft

Building the Docker image

Install Docker, then run the following:

git clone https://github.com/usk-johnny-s/certbot_dns_mydnsjp
cd certbot_dns_mydnsjp
docker build -t certbot-dns-mydnsjp:local .

Building the Python package

Install setuptools, then run the following:

git clone https://github.com/usk-johnny-s/certbot_dns_mydnsjp
cd certbot_dns_mydnsjp
python -m build

Thanks to

disco-v8/DirectEdit MyDNS.JP genuine DNS authentication script. It was not suitable for my purpose of ``subdomain + multidomain without zone separation'', which led me to develop this plugin.

infinityofspace/certbot_dns_duckdns A very simple DNS authentication plugin for certbot. I referenced it as a source code skeleton when developing this plugin.



Certbot DNS MyDNS.JP プラグイン (Japanese)

MyDNS.JPでdns-01チャレンジを処理するためのcertbot用の認証プラグインです。

参照

MyDNS.JP 無料で利用できるDynamicDNS、無料のサブドメインも利用可能、固定IPアドレスや自分の保有するドメインも設定可能

Let's Encript 無料で利用できるSSL/TLS証明書(DV証明書)、DNS-01 challengeを使用すればワイルドカード証明書が発行可能

certbot Let's Encriptが推奨しているACMEクライアント、プラグインでchallenge認証処理を追加可能

インストール

このプラグインのインストールは、下記インストール手順のうち、いずれか1つを実行してください。

なお、プラグインの実行にはcertbotが必要です。 certbotのインストール手順はcertbotのドキュメントを確認してください。

snap

snapでインストールしたcertbotに、snapでプラグインを追加。

snap install certbot-dns-mydnsjp
snap set certbot trust-plugin-with-root=ok
snap connect certbot:plugin certbot-dns-mydnsjp
snap connect certbot-dns-mydnsjp:certbot-metadata certbot:certbot-metadata

Docker

ビルド済みイメージ(certbotを含む)を取得。

docker image pull uskjohnnys/certbot-dns-mydnsjp

pip

pipでインストールしたcertbotに、pipでプラグインを追加。

pip install certbot-dns-mydnsjp

ソースコードからインストール

pipでインストールしたcertbotに、ソースコードからpipでプラグインを追加。

git clone https://github.com/usk-johnny-s/certbot_dns_mydnsjp
cd certbot_dns_mydnsjp
pip install .

プラグインを認識しているかの確認

certbot plugins

プラグインの一覧に「dns-mydnsjp」が表示されていれば、このプラグインを認識しています。

認識していない場合は、OSパッケージに含まれたcertbotがアンインストールできていない可能性があります。 プラグインとcertbotをアンインストールしてから、再度インストール手順を実施してください。

使用方法

MyDnsJpアカウント設定ファイルの作成

事前にMyDNS.JPでアカウント登録を行い、アカウントにドメイン名を登録しておいてください。

登録したドメイン名とアカウント情報をMyDnsJpアカウント設定ファイル(例:mydnsjp.ini)に記載します。 作成したMyDnsJpアカウント設定ファイルはOtherアクセスを禁止(例:chmod 660 mydnsjp.ini)しておきます。(certbot実行時の警告抑止)

[dns_mydnsjp_credential]
[[example.mydns.jp]]
'id'='mydns_jp_mastrid'
'pwd'='mydns_jp_masterpassword'

MyDNS.JPは「A.example」などドットを含むホスト名も登録できますので、 ドメインのゾーン分離が不要であれば上記設定ファイルでA.example.mydns.jpの証明書も取得できます。 (ゾーン分離しない場合は子アカウントへのサブドメインの委譲は不要です。)

MyDNS.JPにLOGINしてDOMAIN INFO画面でホストレコードのTargetID=子アカウントで登録すると、そのレコードは子アカウントで通知したIPになります。

MyDNS.JPでサブドメインのゾーン分離を行うには、MyDNS.JPにLOGINしてUSER INFO画面で子アカウントの追加を行ってから、 MyDNS.JPにLOGINしてDOMAIN INFO画面で「Hostname=サブレベルドメイン名、Type=DELEGATE、TargetID=子アカウント」を設定することで、サブドメインを子アカウントに委譲できます。

親アカウントのドメインと子アカウントのサブドメインの両方の証明書を取得する場合は、親アカウントと子アカウントの両方の認証情報をMyDnsJpアカウント設定ファイルに記載してください。

[dns_mydnsjp_credential]
[[example.mydns.jp]]
'id'='mydns_jp_masterid'
'pwd'='mydns_jp_masterpassword'
[[sub.example.mydns.jp]]
'id'='mydns_jp_childid'
'pwd'='mydns_jp_childpassword'

MyDNS.JPはアカウント1つでドメイン1つ登録します。(複数のドメインをMyDNS.JP登録する場合は、複数のアカウント登録を行います。) MyDnsJpアカウント設定ファイルに複数のドメインを記載すれば、MyDNS.JPを用いたマルチドメイン証明書の取得にも対応できます。

[dns_mydnsjp_credential]
[[example1.mydns.jp]]
'id'='mydns_jp_mastrid1'
'pwd'='mydns_jp_masterpassword1'
[[example2.mydns.jp]]
'id'='mydns_jp_masterid2'
'pwd'='mydns_jp_masterpassword2'

certbotの実行

certbotのコマンドラインオプションに下記を加えることでMyDNS.JPでDNS-01 challengeを行います。(他のオプションはcertbotのページを確認してください。)

certbot \
  --preferred-challenges dns \
  --authenticator dns-mydnsjp \
  --dns-mydnsjp-credentials <MyDnsJpアカウント設定ファイル(例:mydns.ini)>
  …

certbot実行中にエラーが発生した場合、認証後のDNS TXTレコードの削除/復元に失敗することがありますのでMyDNS.JPにLOGINしてDOMAIN INFO画面でレコード内容を削除/修正してください。

(DNS-01 challenge認証で使用するTXTレコードはhostnameが「_acme-challenge」で始まるTXTレコードです。)

プラグインのコマンドラインオプション

オプション 機能・用途
--dns-mydns-propagation-seconds <待機秒数> DNS設定後の待ち時間(秒)デフォルト=30
--dns-mydns-credentials <MyDNSアカウント設定ファイル名> MyDnsJpアカウントを記載したファイル名を指定する
--dns-mydns-no-txt-restore DNS-01 challenge認証後に使用したTXTエントリを削除する(このオプションを指定しない場合:使用したTXTエントリを元に戻す)

パッケージのビルド

パッケージのリビルドが必要な場合は、下記ビルド手順を参照してください。

snapパッケージのビルド

snapcraftをインストールしてから、下記を実行します。

git clone https://github.com/usk-johnny-s/certbot_dns_mydnsjp
cd certbot_dns_mydnsjp
snapcraft
snapパッケージの公開

GUIデスクトップでkeyringを初期化

gnome-keyring-daemon --unlock

SnapStoreのログイン情報をkeyringに登録

snapcraft login

SnapStoreのWebでパッケージ名を申請(承認されてからパッケージを送信)

SnapStoreにパッケージを送信

snapcraft login
snapcraft upload --release=stable certbot-dns-mydnsjp_*_amd64.snap

Dockerイメージのビルド

Dockerをインストールしてから、下記を実行します。

git clone https://github.com/usk-johnny-s/certbot_dns_mydnsjp
cd certbot_dns_mydnsjp
docker build -t uskjohnnys/certbot-dns-mydnsjp:latest .
Dockerイメージの公開

DockerHubにログイン

docker login

DockerHubにイメージを送信

docker push uskjohnnys/certbot-dns-mydnsjp:latest

Pythonパッケージのビルド

setuptoolsをインストールしてから、下記を実行します。

git clone https://github.com/usk-johnny-s/certbot_dns_mydnsjp
cd certbot_dns_mydnsjp
python -m build
Pythonパッケージの公開

PyPIのログイン情報を~/.pypircに記入

[pypi]
  username = __token__
  password = <pypiログイントークン>

PyPIにパッケージを送信

python3 -m twine upload --repository pypi dist/*

謝辞

disco-v8/DirectEdit MyDNS.JP純正のDNS認証用スクリプト。自分の用途「ゾーン分離しないサブドメイン+マルチドメイン」には適合せず、このプラグインを開発する切っ掛けとなった。

infinityofspace/certbot_dns_duckdns 非常にシンプルなcertbot用DNS認証プラグイン。このプラグインを開発する際にソースコードの骨格として参照した。

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

certbot_dns_mydnsjp-1.0.2.tar.gz (24.9 kB view details)

Uploaded Source

Built Distribution

certbot_dns_mydnsjp-1.0.2-py3-none-any.whl (12.5 kB view details)

Uploaded Python 3

File details

Details for the file certbot_dns_mydnsjp-1.0.2.tar.gz.

File metadata

  • Download URL: certbot_dns_mydnsjp-1.0.2.tar.gz
  • Upload date:
  • Size: 24.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.12

File hashes

Hashes for certbot_dns_mydnsjp-1.0.2.tar.gz
Algorithm Hash digest
SHA256 4c16b5c3de9cfb4bad83033308bd1a5378c468cf5852f81945900f3558ebd5d1
MD5 4d08fb2bae5b087b8e53e5013d008c31
BLAKE2b-256 e841e38002f255077f1e4a17cc80ed83b003d532c51710e38e51e28b88b0f1d6

See more details on using hashes here.

File details

Details for the file certbot_dns_mydnsjp-1.0.2-py3-none-any.whl.

File metadata

File hashes

Hashes for certbot_dns_mydnsjp-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 398d9aa2825b9264544aed726c5b16151c4b0bce77fef3a3b8aa2a94786a24b4
MD5 e3be51fffe9023c7c9169a8f7680a2df
BLAKE2b-256 61b7139b644ff4b59446fd88d04e4d7d2b3c81d29f2a15a6c6fa12e2cb1ddfac

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page