Implement RFC 8555 async order finalization to fix read timeout issue with some ACME clients#2636
Open
netops2devops wants to merge 2 commits intosmallstep:masterfrom
Open
Conversation
with ACME clients FinalizeOrder now immediately returns status=processing with Retry-After instead of blocking until the external CA responds. This prevents certbot's hardcoded 45s & cert-manager's 60s read timeout from firing when certificate signing takes longer. Certbot's poll_finalization loop handles the processing state natively. Tracked upstream: smallstep#2056
|
|
orphans a processing order, acme client polls will eventually get invalid once ExpiresAt passes — at which point acme client can start a fresh order.
netops2devops
added a commit
to esnet/certificates
that referenced
this pull request
Apr 3, 2026
RFC 8555 Section 7.4 explicitly defines "processing" as a distinct order state to decouple the finalize request (submit CSR) from certificate issuance (CA signing). This async handoff lets ACME servers back slow CAs without blocking the client. Current ACME implementation in step-ca skips this state which causes issues when an external CA sometimes takes a long time to return a signed certificate. With this change, FinalizeOrder now immediately returns status=processing with Retry-After instead of blocking until the external CA responds. This prevents certbot's 45s & cert-manager's 60s default read timeout from firing when certificate signing takes longer. Certbot's poll_finalization loop handles the processing state natively. esnet/acme-proxy#22 smallstep#2636
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Name of feature:
Pain or issue this feature alleviates:
RFC 8555 Section 7.4 explicitly defines "processing" as a distinct order state to decouple the finalize request (submit CSR) from certificate issuance (CA signing). This async handoff lets ACME servers back slow CAs without blocking the client. Current ACME implementation in step-ca skips this state which causes issues when an external CA sometimes takes a long time to return a signed certificate.
With this change, FinalizeOrder now immediately returns status=processing with Retry-After instead of blocking until the external CA responds. This prevents certbot's 45s & cert-manager's 60s default read timeout from firing when certificate signing takes longer. Certbot's poll_finalization loop handles the processing state natively.
Why is this important to the project (if not answered above):
Is there documentation on how to use this feature? If so, where?
This isn't a new feature. It fixes an existing issue #2056
In what environments or workflows is this feature supported?
In what environments or workflows is this feature explicitly NOT supported (if any)?
Supporting links/other PRs/issues:
#2056
💔Thank you!