Does anybody have a guide to setting up the DNS-01 challenge on NS8, and incorporating the resulting certificates into Traefik for HTTPS routing?
I have HTTP-01 working, but it requires that services are exposed to the Internet via HTTP in the first instance, and I have internal services accessed via DNS name that I do not want exposed to the internet.
Searching the forum provides some references to doing this on NS7, but I am unsure about the applicability to NS8.
I am assuming I could replicate the wildcard certificate/key into redis to match the mail hostname, but that would require additional steps when the certificate is updated.
It would be more better for the script to check for a wildcard domain match first and use that rather than just checking ${MAIL_HOSTNAME}.
I’ll see if I can figure out some code to do that.
As there have been no updates on this matter, I manually replaced the certificate files (selfsigned.crt and selfsigned.key) with the wildcard certificate in the following directory:
/home/traefik1/.config/state/
This solution is functioning correctly on all nodes and remains effective even after a reboot.
Note:
I also updated the certificates for Dovecot and Postfix at the following locations:
The trickiest part was to set the environment variable INFOMANIAK_ACCESS_TOKEN for my DNS provider Infomaniak.
I have added the environment variable for the token to the service ../systemd/user/traefik.service as described here: Custom ACME Server - tls error to server - #6 by Tbaile
--env=INFOMANIAK_ACCESS_TOKEN=<my-token> \
Reload systemd with systemctl --user daemon-reload
Restart traefik service with systemctl --user restart traefik
Finally I was able to create the certificate (I had to increase the default timeout):
[root@test ~]# api-cli run module/traefik1/set-certificate --data '{"fqdn":"test1.mydomain.com", "sync_timeout":120}'
Warning: using user "cluster" credentials from the environment
{"obtained": true}
However, I don’t like the part with editing the service file. Does anybody know a better way?
The solution for issue 7300 is not limited to custom CA certificates. You can pass any environment variable to Traefik with it, including the provider’s token. And this is exactly what we need to make DNS-01 work.
This approach is better than exposing the token in the container command line.
If this works, somebody could write a complete Howto post with detailed steps.
From the API point of view (set-acme-server/get-acme-server), we probably need to handle the DNS-01 challenge beside HTTP-01 and the new default, TLS-ALPN-01.
Hello Davide
You are welcome and thank you for your input! It was fun to dive into new technologies and to provide some information to a great product.
After removing the token from ../systemd/user/traefik.service and following your two steps, I can confirm this is working now:
[root@test ~]# api-cli run module/traefik1/set-certificate --data '{"fqdn":"test3.mydomain.com", "sync_timeout":120}'
Warning: using user "cluster" credentials from the environment
{"obtained": true}
However, sometimes I ran into a timeout obtaining a certificate and I don’t know why. How can I get more verbose log information apart from the UI traefik1 app log?
Can someone please describe the current status?
The switch to DNS-01 is actually becoming more and more necessary.
Are wildcard certificates supported now?
If a temporary solution is currently the only option… would that at least be update-proof?
My DNS Helper module isn’t an ACME client, and I don’t intend to add that feature. But it can be used by an ACME client, and it even includes an access preset for that purpose.
The way this would work would be that you give Traefik access, in DNShelper, using the Certificates preset, to whichever zones you want it to be able to do this for (or all of them). Traefik then asks DNShelper to create and destroy the TXT records used for validation, which it does. In this way, Traefik doesn’t need to know how to deal directly with any of the DNS hosts, nor provide any UI to deal with their credentials.
The wrinkle here, of course, is that Traefik already does know how to deal with many DNS hosts, but it doesn’t (yet) know how to deal with DNShelper. OTOH, the Traefik module doesn’t have any UI for dealing with their credentials, zones, etc. It’s going to take some modification to the Traefik module either way,
Thanks for the explanation.
I still have two questions: Are the manual configurations update-proof? Will the configuration survive a restore/recovery from the backup? And why isn’t this a standard feature in the NS8?
As far as I can see, these are persistent changes. I have definitely upgraded since setting this up and switching to traefik for SNI routing. The PODMAN_RUN_OPTS setting is stored in the configuration database, and the env file is in the traefik pod settings directory. These are things that will be left in place during an upgrade and also stored in a backup.
The created certificate definition will also persist.
I agree that an WebUI interface to make these changes would be helpful, but some of it is likely to be complex and only occasionally required. Setting environmental variables within the traefik pod would be useful for setting the relevant DNS API keys. Creating a wildcard certificate in the TLS Certificates list is the other thing that needs to be added.
It really isn’t. It’s unique to each DNS host (the nature and name of the credentials vary), but it’s not particularly complex. I’ve been able to build it out (which is to say I’ve been able to direct Claude to build it out) for 14 hosts so far, as well as PowerDNS and RFC2136, with a full UI, validity and capability checking, and zone listing for most of them. Adding another one takes about an hour and credentials I can use to test, and more often than not involves coding an entirely new adapter.
The missing UI elements are a Web-based mechanism to set the DNS API provider for DNS-01 challenges in the ACME server config, as well as the necessary API tokens (environmental variables) for the selected DNS API provider.
Then the TLS Certificate interface has to alow the entry of a wildcard SAN “*.your,domain” as type “fqdn”.
Yes, my confusion stems solely from the fact that there have apparently already been some developments, but they don’t seem to have been incorporated into the system yet. @davidep Am I wrong?