Certbot DNS-01 validation for wildcard certificates (ACME-v2)
I created this script to request wildcard SSL certificates from Let’s Encrypt. You are required to do a DNS-01 challenge for which you need to create a DNS (TXT) record. TransIP has an API which allows you to automate this. When you need to renew your certificate you also need to perform the DNS-01 challenge again. This should happen automatically.
Version 2.5 has the following requirements. If you use an older PHP version you have to use an older release. Upgrading from v1? See the upgrade guide.
- PHP >= 7.4 with JSON and OpenSSL extensions enabled
- The composer package manager
- Run
composer install --no-dev - Copy
config/config.php.exampletoconfig/config.php - Acquire an API key for TransIP in your account on their website
- Edit
config/config.phpand set your login and private key. - Make sure you set the access to this file to only allow your user to read the contents of this file (on linux
chmod og-rwx config/config.php)
Use this command to request the certificate. Replace "/path/to/" with the actual path on your system. It takes a couple of minutes for the nameservers to be updated. Please be patient until the validation completes.
certbot certonly --manual --preferred-challenges=dns \
--manual-auth-hook /path/to/auth-hook --manual-cleanup-hook /path/to/cleanup-hook \
-d 'domain.com' -d '*.domain.com'If you need to do some testing add the staging flag to the certbot command:
--test-cert
To automatically renew your certificate add the Certbot renew command in a cron job so it runs at least monthly.
/usr/bin/certbot renewThere is also a docker container which you can use. You can either bind mount the config folder or use ENV variables.
These variables are available: TRANSIP_LOGIN, TRANSIP_PRIVATE_KEY, LOGLEVEL, LOGFILE.
Only the first two variables are required.
For information about values see config/config.php.example. Multiline values (the private key) can be a bit harder
to set. Make sure the entire private key is stored in the TRANSIP_PRIVATE_KEY variable!
The application runs in the /opt/certbot-dns-transip directory and the certificates are created in /etc/letsencrypt.
docker run -ti \
--mount type=bind,source="${PWD}"/letsencrypt,target="/etc/letsencrypt" \
--mount type=bind,source="${PWD}"/config,target="/opt/certbot-dns-transip/config" \
--mount type=bind,source="${PWD}"/logs,target="/opt/certbot-dns-transip/logs" \
rbongers/certbot-dns-transip \
certonly --manual --preferred-challenge=dns \
--manual-auth-hook=/opt/certbot-dns-transip/auth-hook \
--manual-cleanup-hook=/opt/certbot-dns-transip/cleanup-hook \
-d 'domain.com' -d '*.domain.com'And to renew certificates:
docker run -ti \
--mount type=bind,source="${PWD}"/letsencrypt,target="/etc/letsencrypt" \
--mount type=bind,source="${PWD}"/config,target="/opt/certbot-dns-transip/config" \
--mount type=bind,source="${PWD}"/logs,target="/opt/certbot-dns-transip/logs" \
rbongers/certbot-dns-transip \
renewThe code is tested on a Debian based Linux distribution (Ubuntu LTS) and currently supported PHP versions (>= 7.4). It probably works fine on other systems and versions of PHP but no guarantees are made.
Version 2.0 is a complete rewrite of the code base and breaks with the original version. Follow these steps to upgrade:
- Checkout the latest master branch
- Follow the installation guide
- Remove the
Transipfolder after copying your login and private key toconfig/config.php - You are ready to go!
When creating an issue please include a detailed description of what you are trying to execute and any output you receive. Feel free to fork the project and create a pull request. Make sure your code complies with the PSR-12 coding standards.