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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4c16b5c3de9cfb4bad83033308bd1a5378c468cf5852f81945900f3558ebd5d1 |
|
MD5 | 4d08fb2bae5b087b8e53e5013d008c31 |
|
BLAKE2b-256 | e841e38002f255077f1e4a17cc80ed83b003d532c51710e38e51e28b88b0f1d6 |
File details
Details for the file certbot_dns_mydnsjp-1.0.2-py3-none-any.whl
.
File metadata
- Download URL: certbot_dns_mydnsjp-1.0.2-py3-none-any.whl
- Upload date:
- Size: 12.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.10.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 398d9aa2825b9264544aed726c5b16151c4b0bce77fef3a3b8aa2a94786a24b4 |
|
MD5 | e3be51fffe9023c7c9169a8f7680a2df |
|
BLAKE2b-256 | 61b7139b644ff4b59446fd88d04e4d7d2b3c81d29f2a15a6c6fa12e2cb1ddfac |