-
Notifications
You must be signed in to change notification settings - Fork 493
Description
Subject of the issue
Customized backdates seem to have no effect on ACME provisioners. I've attempted to increase the default backdate duration from it's hardcoded value of 1 minute to about 1 hour (like LE does), because there are devices out there that can't always keep their clock accurate to +- 1 minute.
I've therefore set a custom backdate value in ca.json
which does get applied when I use my JWK provisioner. However, when requesting certificates via ACME, they're always backdated by 1 minute, not by my value set in ca.json
Your environment
- OS - Debian 11 Bullseye (amd64 arch)
- Version - 0.19.0
Steps to reproduce
- Setup a new smallstep ca with both a JWK and an ACME provisioner
- Set a custom backdate value like this:
# ca.json
{
[snip]
"authority": {
"provisioners": [
{
"type": "ACME",
"name": "my-acme-provisioner",
"forceCN": true,
[snip]
},
{
"type": "JWK",
[snip]
}
],
"template": {},
"backdate": "1h0s"
},
[snip]
}
- Issue a certificate via the JWK provisioner, do not specify a NotBefore value. Compare the NotBefore on the issued certificate with the current time.
- Issue a certificate via ACME provisioner via any ACME client without specifying custom NotBefore values (if the client even supports it). Compare the NotBefore on the issued certificate with the current time.
Expected behaviour
Both certificates are backdated by ~1 hour.
Actual behaviour
The JWK-issued certificate is backdated by ~1 hour, while the ACME-issued certificate is backdated by ~1 minute.
Additional context
The ACME protocol can set customized NotBefore/NotAfter fields in the order. I haven't tested if smallstep supports these. For my tests I was using acme.sh 3.0.4, which to my knowledge does not set NotBefore/NotAfter fields in the ACME order (unlesss explicitly configured to do so), so the ACME order should have used the default backdate specified in ca.json, just like the JWK provisioner.
It looks like the ACME provisioner always uses it's hardcoded backdate value of 1 min and ignores whatever was set in ca.json.