mirror of
https://github.com/dehydrated-io/dehydrated.git
synced 2026-01-14 23:53:39 +01:00
RFC 8738 support? #510
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @strophy on GitHub (Nov 30, 2020).
Does/will dehydrated support RFC 8738 to issue certificates to IP addresses over ACME? ZeroSSL currently supports this over their REST API, but I am unable to test it with ACME because I am unable to find a client that supports both RFC 8738 and the EAB now requried by ZeroSSL. Looks dehydrated might be a possible choice, is this feature planned? Thanks!
@lukas2511 commented on GitHub (Dec 1, 2020):
This will be integrated for the upcoming release 👍
But I'm not sure if ZeroSSL supports it on their ACME API.
@strophy commented on GitHub (Dec 2, 2020):
Thanks! I have confirmed ZeroSSL only supports it over their REST API but not ACME yet. Either way, it's great to see more client support for this feature 👍
@lukas2511 commented on GitHub (Dec 10, 2020):
I have an experimental implementation locally but since I want to release the new version today and didn't yet have an opportunity to test the code I'll postpone it for the next release (which will follow much quicker than the current one).
@kousu commented on GitHub (Apr 20, 2021):
So that I understand, that would mean this would work?
@lukas2511 commented on GitHub (Apr 21, 2021):
Wrong thread. RFC 8738 is about getting certificates signed directly for IP addresses instead of domains. If you're having issues with zerossl please make sure to have the newest dehydrated version and open a new issue if the problem persists.
@kousu commented on GitHub (Apr 23, 2021):
Thank you @lukas2511, installing 0.7.0 made ZeroSSL work. Debian stable has 0.6.5 packaged; testing has 0.7.0 so in like a year when the next Debian stable comes around this will work more easily.
For reference for anyone who stumbles across this thread, my install script is now:
And this seems to work fine for getting ZeroSSL working on Debian stable.
@lukas2511 commented on GitHub (Apr 7, 2022):
RFC 8738 support is now implemented on the rfc8738 branch. There are still a few issues, e.g. comparison on already signed certificates is missing normalization for now so certificates especially for IPv6 addresses might be refreshed on every run. Also signing of external CSRs hasn't been tested yet.
I don't think any public CA supports this feature yet, but e.g. step-ca can be used for testing or whatever internal use-cases one might have (e.g. etcd or ssh).
@fragolinux commented on GitHub (Apr 14, 2022):
zerossl allows to have ip based certificates, but probably only in rest api...
anyway, can you please share a command line example? Thanks in advance
@lukas2511 commented on GitHub (Apr 15, 2022):
Unfortunately they are not supporting ip certs via acme.
Example usage (for now) would be
dehydrated -c -d IP:192.0.2.42 --ca zerossl(but it will fail). TheIP:prefix may be dropped, not entirely sure about that yet.@suhastm19 commented on GitHub (Feb 22, 2023):
@lukas2511 Is this done or its still in implementation stage? I have a similar requirement where both ip and fqdn are being added as SANS in a certificate.
@lukas2511 commented on GitHub (Feb 22, 2023):
It's implemented, but basically untested as afaik there are no public CAs supporting this (yet). It should probably work fine with private CAs like smallstep. Also the normalization issue with IPv6 addresses still exists but that can be worked around.
@suhastm19 commented on GitHub (Mar 2, 2023):
Is this code available in v0.7.1 release?
@lukas2511 commented on GitHub (Mar 2, 2023):
Yes.
@quite commented on GitHub (Jun 15, 2023):
@lukas2511 I think there is a typo here in the code:
https://github.com/dehydrated-io/dehydrated/blob/master/dehydrated#L1812
Should probably be
( Address)*. This showed up inshellcheck, which you really should be running.@candlerb commented on GitHub (Jul 3, 2025):
This is almost working out-of-the-box with Letsencrypt Staging, which now offers IP SANs.
The challenge validation is successful, but the final stage fails:
This is with dehydrated 0.7.2. Relevant config:
domains.txt (with addresses masked):
The solution is to request an empty subject (note that empty string or
//are rejected byopenssl req, but/is OK)Any garbage subject like
/DC=example/also works; in either case the issued certificate has an empty subject.The fact that LetsEncrypt accepts and ignores almost any subject except one which contains a commonName IP address seems weird. I have raised it with LetsEncrypt here.
@candlerb commented on GitHub (Jul 3, 2025):
I think that one-line fix I gave is correct: for LetsEncrypt, if you provide a subject commonName, it is only allowed to match a DNS SAN in the same CSR.
(Although Subject is obsolete anyway, and it would probably be fine to set an empty subject for all certificates)
@jobe1986 commented on GitHub (Jul 3, 2025):
Of additional note, the initial IP cert Let'sEncrypt issued uses an empty Subject too as can be seen at https://crt.sh/?id=19376952215
@lukas2511 commented on GitHub (Jul 5, 2025):
Thanks for the suggestion, I've added the change to the script. And yes, normally subjects are obsolete and an empty subject should be fine, but since some CAs are really weird I think it's better for now to just keep the old behaviour for non-ip names.