Example hook script using Dynamic DNS update utility for dns-01 challenge
This hook script uses the nsupdate utility from the bind package to solve dns-01 challenges.
Code
The file /path/to/Kdnsupdatekey.private looks like this:
To avoid making your entire production DNS subject to dynamic DNS updates, then for each certificate domain you want:
- In your main DNS infrastructure create a delegation:
_acme-challenge.<domain>. NS <your-nameserver>.
- Create a new zone
_acme-challenge.<domain> on <your-nameserver>, with an empty zonefile (just an SOA and NS record), writeable by the nameserver
- Create a new TSIG key:
tsig-keygen -a sha512 <keyname>
- Enable dynamic updates on the
_acme-challenge.<domain> zone with this key
e.g. for bind9:
This is a secure approach because each host will have its own key, and hence can only obtain certificates for those domains you have explicitly authorized it for.
An alternative approach is to use CNAMEs to put all your dynamic updates into a single zone. You will need to modify the script:
You then only need to create a single zone acme.mydomain.com which accepts dynamic DNS updates, but you will need to add static CNAMEs for _acme-challenge.<certname> pointing at _acme-challenge.<certname>.acme.mydomain.com for each certificate you want to issue.