You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
|`dns_poll_interval`| Time the node SHOULD wait between of DNS queries | 1 second |
62
+
|`dns_timeout`| The maximum time a node SHOULD wait for DNS records to be set | 3 minutes |
63
+
|`acme_poll_interval`| Time the node SHOULD wait between ACME GET requests | 1 second |
64
+
|`acme_timeout`| The maximum time a node SHOULD wait for an ACME resource status to change |3 minutes |
65
65
66
66
## Requesting challenge from ACME server
67
67
1. The node starts a libp2p peer with public IPv4 and support for the [`identify`](https://github.com/libp2p/specs/blob/master/identify/README.md) protocol.
@@ -170,18 +170,19 @@ while "broker" and "AutoTLS broker", which are used interchangeably, refer to th
170
170
For example, if the node has two public IPv4 addresses `1.1.1.1` and `8.8.8.8`, and the broker dialed it through `1.1.1.1`, then the node SHOULD query the `A 1-1-1-1.{b36peerid}.libp2p.direct`.
171
171
For IPv6: Replace colons with dashes, handle leading/trailing colons as zeros (`2001:db8::1` → `2001-db8--1`, `2001:db8::` → `2001-db8--0`), and query `AAAA 2001-db8--1.{b36peerid}.libp2p.direct`.
172
172
173
-
**Note:** The node SHOULD NOT send more than `max_dns_retries` DNS requests.
174
-
After `max_dns_timeout`, the communication is considered failed.
175
-
What to do after `max_dns_timeout` has passed is left as an implementation decision.
173
+
**Note:** The node SHOULD NOT poll DNS for longer than `dns_timeout`.
174
+
After `dns_timeout`, the communication is considered failed.
175
+
What to do after `dns_timeout` has passed is left as an implementation decision.
176
176
177
177
2. Node notifies the ACME server about challenge completion so that the ACME server can lookup the DNS resource records that the AutoTLS broker has set. The notification is done in the form of a POST request to `chalUrl` with an empty HTTP body (`{}`).
178
178
1. Node sends an empty signed JSON payload (`{}`) to the ACME server using the `kid` obtained from the initial ACME registration and gets the response from the server (`completedResponse`).
179
179
2. Node extracts `url` field from `completedResponse`'s JSON body. The extracted URL is named `checkUrl` in this document.
180
180
3. The node polls the ACME server by sending a GET HTTP request to `checkUrl` with an empty body, and sign using the `kid` of the registered account. The node MUST poll the ACME server until it receives a response with `status: valid` or `status: invalid` field, meaning that the challenge checking was successful or not, respectively.
181
181
182
-
**Note:** The node SHOULD NOT send more than `max_acme_poll_retries` poll requests to the ACME server.
183
-
After `max_acme_timeout`, the communication has failed.
184
-
What to do after `max_acme_timeout` has passed is left as an implementation decision.
182
+
**Note:** The node SHOULD NOT send more than one request every `acme_interval` to the ACME server.
183
+
The node SHOULD use exponential backoff to increase time between retries.
184
+
After `acme_timeout`, the communication has failed.
185
+
What to do after `acme_timeout` has passed is left as an implementation decision.
185
186
186
187
187
188
@@ -192,9 +193,10 @@ What to do after `max_acme_timeout` has passed is left as an implementation deci
192
193
3. Send a `kid` signed POST request to `finalizeUrl` with JSON HTTP body of `{"csr": b64CSR}`.
193
194
2. Node MUST poll ACME server by sending GET requests to `orderUrl` until the ACME server's response contains a `status` field with a value different than `processing`.
194
195
195
-
**Note:** The node SHOULD NOT send more than `max_acme_poll_retries` poll requests to the ACME server.
196
-
After `max_acme_timeout`, the communication has failed.
197
-
What to do after `max_acme_timeout` has passed is left as an implementation decision.
196
+
**Note:** The node SHOULD NOT send more than one request every `acme_interval` to the ACME server.
197
+
The node SHOULD use exponential backoff to increase time between retries.
198
+
After `acme_timeout`, the communication has failed.
199
+
What to do after `acme_timeout` has passed is left as an implementation decision.
198
200
199
201
3. Node downloads finalized certificate by sending a GET request to `certDownloadUrl`.
200
202
`certDownloadUrl` is found in the `certificate` field of the JSON HTTP body of a response to a GET request to `orderUrl`.
0 commit comments