Skip to content

Conversation

@CodeAdminDe
Copy link

Desc

This fixes issue #63, which is due to the following (partially planned) change at the ACME server implementation level:
https://community.letsencrypt.org/t/enabling-asynchronous-order-finalization/193522

Tests

I've tested it against LE Staging & LE Live successfully.

Implementation details

The getCertificate() method in the Client class has been updated to handle cases where the certificate is not immediately available and retries fetching the certificate until it becomes valid.
This also introduces a new (private) method getCertificateChain() in the Client class, which is used to fetch the certificate chain from the ACME API to avoid implementing the same code multiple times.
Additionally, the Order class has been updated to include the new certificate property and a corresponding getCertificate() getter method.

…alization is enabled on the ACME server-side. // see: https://community.letsencrypt.org/t/enabling-asynchronous-order-finalization/193522

Description: The `getCertificate()` method in the `Client` class has been updated to handle cases where the certificate is not immediately available and retries fetching the certificate until it becomes valid.
This commit also introduces a new (private) method `getCertificateChain()` in the `Client` class, which is used to fetch the certificate chain from the ACME API to avoid implementing the same code multiple times.
Additionally, the `Order` class has been updated to include the new `certificate` property and a corresponding `getCertificate()` getter method.
fixed typo `getCertficateChain` => `getCertificateChain`
statio added a commit to statio/yaac that referenced this pull request Mar 4, 2025
$chain = $this->getCertificateChain($data['certificate']);
} else {
if ('processing' == $data['status']) {
sleep(ceil(15 / $maxAttempts));
Copy link

@binsky08 binsky08 Jul 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure if sleep(ceil(15 / $maxAttempts)); is a good approach here. We should better use a timeout-interval or maxAttempts-interval configuration combination.

may adding $interval = 1 to the function header as third parameter offers more flexibility (and a more obvious linear sleep interval)

beside this, it looks like the sleep should be within the loop?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants