Skip to main content

Arsys DNS Authenticator plugin for Certbot

Project description

PyPI version License: Apache 2.0 Supported Python versions CI test status

Certbot DNS authenticator plugin for Arsys domains.

Automates DNS-01 challenge validation by creating and removing _acme-challenge TXT records via the Arsys Hosting SOAP API, enabling wildcard certificate issuance and fully automated renewal.

Prerequisites

  • Python 3.10+

  • Certbot 2.0+

  • An Arsys account with API access enabled (obtain your API key from the Arsys control panel)

  • Network access to api.servidoresdns.net on port 54321

Installation

pip install certbot-dns-arsys

Verify the plugin is available:

certbot plugins

You should see dns-arsys in the list.

Snap

If you installed Certbot as a snap, a pip-installed plugin is not visible to it. Install this plugin from the Snap Store instead:

snap install certbot-dns-arsys
snap connect certbot:plugin certbot-dns-arsys
snap connect certbot-dns-arsys:certbot-metadata certbot:certbot-metadata

Then confirm the plugin is registered:

certbot plugins

You should see dns-arsys in the list. The certbot-dns-arsys:certbot-metadata interface auto-connects; the certbot:plugin connection requires the explicit snap connect above.

Credentials File

Create a credentials file (e.g. ~/.secrets/certbot/arsys.ini) with the following content:

# Arsys API endpoint (optional — this is the default)
dns_arsys_api_url = https://api.servidoresdns.net:54321/hosting/api/soap/index.php

# Your domain (as registered in your Arsys account)
dns_arsys_api_login = example.com

# API key from the Arsys control panel
dns_arsys_api_key = YOUR_API_KEY_HERE

# The base domain managed in this Arsys account
dns_arsys_domain = example.com

Secure the file so only root can read it:

chmod 600 ~/.secrets/certbot/arsys.ini

Usage

Wildcard certificate:

certbot certonly \
  --authenticator dns-arsys \
  --dns-arsys-credentials ~/.secrets/certbot/arsys.ini \
  -d "*.example.com" \
  -d "example.com"

Standard certificate:

certbot certonly \
  --authenticator dns-arsys \
  --dns-arsys-credentials ~/.secrets/certbot/arsys.ini \
  -d "example.com" \
  -d "www.example.com"

Renewal (automatic, no extra flags needed after initial issuance):

certbot renew

Non-root usage:

Certbot requires write access to /var/log/letsencrypt, /etc/letsencrypt, and /var/lib/letsencrypt by default, which are root-owned. If you run certbot as a regular user (e.g. for testing), redirect those paths with three extra flags:

certbot certonly \
  --authenticator dns-arsys \
  --dns-arsys-credentials ~/.secrets/certbot/arsys.ini \
  -d "*.example.com" \
  -d "example.com" \
  --config-dir ~/.letsencrypt \
  --work-dir ~/.letsencrypt/work \
  --logs-dir ~/.letsencrypt/logs

Certificates will be written to ~/.letsencrypt/live/example.com/.

Options

--dns-arsys-credentials

Path to the INI credentials file. Required.

--dns-arsys-propagation-seconds

Maximum seconds to wait for DNS propagation before proceeding. Default: 30. The plugin polls authoritative nameservers every 15 seconds and proceeds as soon as the record is confirmed. Increase this value if you see validation failures.

Docker

A Docker image based on certbot/certbot with the plugin pre-installed is available:

docker run --rm \
  -v ~/.secrets/certbot:/secrets:ro \
  -v /etc/letsencrypt:/etc/letsencrypt \
  ghcr.io/javiervazquez/certbot-dns-arsys:latest \
  certonly \
    --authenticator dns-arsys \
    --dns-arsys-credentials /secrets/arsys.ini \
    -d "*.example.com"

Or build locally:

docker build -t certbot-dns-arsys .
docker run --rm certbot-dns-arsys plugins

Troubleshooting

``dns-arsys`` is not listed by ``certbot plugins``

The plugin is not installed in the same environment as certbot. Confirm both are in the same interpreter:

pip show certbot-dns-arsys
certbot plugins

If you installed certbot via snap, install the plugin into the snap instead of pip; a pip-installed plugin is not visible to a snap-installed certbot.

Authentication errors (HTTP 401/403 or “invalid credentials”)

Re-check the credentials file. dns_arsys_api_login must be your Arsys account domain and dns_arsys_api_key the key from the Arsys control panel. Make sure the API key has not been revoked and that dns_arsys_domain matches the zone you are issuing for.

Connection timeouts / “connection refused” to the API

The Arsys Hosting API runs on the non-standard port 54321. Verify outbound connectivity from the host running certbot:

nc -vz api.servidoresdns.net 54321

If this fails, open outbound TCP to api.servidoresdns.net:54321 in your firewall.

Validation fails with “incorrect TXT record” or a propagation timeout

The challenge record had not propagated before certbot asked Let’s Encrypt to validate. Increase the wait with --dns-arsys-propagation-seconds (default 30):

certbot certonly --authenticator dns-arsys \
  --dns-arsys-credentials ~/.secrets/certbot/arsys.ini \
  --dns-arsys-propagation-seconds 120 \
  -d "*.example.com"

You can confirm propagation manually with:

dig +short TXT _acme-challenge.example.com
Permission errors reading the credentials file

Certbot warns if the credentials file is group/world-readable, and refuses to run if it cannot read it. Ensure the file is owned by the user running certbot and is mode 600:

chmod 600 ~/.secrets/certbot/arsys.ini

Notes

  • The Arsys Hosting API endpoint runs on a non-standard port (54321). Ensure your firewall allows outbound TCP connections to api.servidoresdns.net:54321.

  • DNS propagation timing depends on Arsys infrastructure. The Arsys SOAP API applies changes almost immediately, so the default 30-second timeout is generally sufficient. Increase with --dns-arsys-propagation-seconds if you see validation failures.

  • The plugin is a third-party plugin not affiliated with Certbot or the EFF.

License

Licensed under the Apache License 2.0.

Copyright 2026 Javier Vázquez.

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_arsys-0.1.2.tar.gz (23.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

certbot_dns_arsys-0.1.2-py3-none-any.whl (16.1 kB view details)

Uploaded Python 3

File details

Details for the file certbot_dns_arsys-0.1.2.tar.gz.

File metadata

  • Download URL: certbot_dns_arsys-0.1.2.tar.gz
  • Upload date:
  • Size: 23.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for certbot_dns_arsys-0.1.2.tar.gz
Algorithm Hash digest
SHA256 47ad1d98a5d742cef426d64d415cff81a124a6017b1c47fe424b50af15197fa4
MD5 b7bd69917c9451b016f62145c490270e
BLAKE2b-256 e4eb4297e19e6bc178e13b3ef2e5201a607468f295a4adbf0d20011acf494cf0

See more details on using hashes here.

Provenance

The following attestation bundles were made for certbot_dns_arsys-0.1.2.tar.gz:

Publisher: publish.yml on spanishkangaroo/certbot-dns-arsys

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file certbot_dns_arsys-0.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for certbot_dns_arsys-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 533036e3efc9b9c17de113fad480423d45e6caffddf0b9b83f2d7ebe7086b59b
MD5 acf6ba589aac1bfa63b39a6109064aed
BLAKE2b-256 c1eb395173d27b01cd617c1abd97833431486bb18363adbaf82234dfe3d15bac

See more details on using hashes here.

Provenance

The following attestation bundles were made for certbot_dns_arsys-0.1.2-py3-none-any.whl:

Publisher: publish.yml on spanishkangaroo/certbot-dns-arsys

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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