Timeout when attempting to issue certificate for cerb00apps.onesoft.es, but Let’s Debug can connect

Hi everyone,

We're having trouble issuing a certificate for the domain cerb00apps.onesoft.es (IP: 185.31.23.208). The process consistently fails due to a timeout error during the HTTP-01 challenge.

We’ve already run diagnostics using Let’s Debug, and it successfully reaches our server, indicating that connectivity from external systems (including Let’s Encrypt test tools) appears to be working.

However, during actual certificate issuance attempts, we don’t see any incoming connection attempts from Let’s Encrypt’s validation servers on our WAN interface. This is in contrast to traffic we do observe when using Let’s Debug. This makes us suspect the issue might not be on our side (e.g., firewall or local network), especially since:

  • Other domains hosted on the same infrastructure are issuing certificates without issues.
  • Our domain and IP are not listed in any public DNS-based blacklists.

We’re trying to determine if our domain or IP might be blocked, rate-limited, or otherwise restricted on Let’s Encrypt’s end.

Any guidance, similar experiences, or help from the community would be greatly appreciated!

Thanks in advance!

your domain is unreachable from my side, and as LE uses multi-perspective validation points, challenge would fail if you are using Geoblocking firewall.

Hi, thanks for checking!

You're right — we usually keep port 80 closed and only open it temporarily when issuing certificates. I’ve now opened it to avoid confusion and allow for proper testing from different locations.

Appreciate your help!

Thanks again!

https://check-host.net/check-http?host=http%3A%2F%2Fcerb00apps.onesoft.es&csrf_token=c9220ad4ae538ad5db6c6ae6ddf6fd45366876c6

it still looks globally down?

Working from here (Europe), but initially very slow. Maybe too slow for a relatively short timeout?

Also:

When you opened this thread in the Help section, you should have been provided with a questionnaire. Maybe you didn't get it somehow (which is weird), or you've decided to delete it (and make our life a lot harder). In any case, all the answers to this questionnaire are required:


Please fill out the fields below so we can help you better. Note: you must provide your domain name to get help. Domain names for issued certificates are all made public in Certificate Transparency logs (e.g. crt.sh | example.com), so withholding your domain name here does not increase secrecy, but only makes it harder for us to provide help.

My domain is:

I ran this command:

It produced this output:

My web server is (include version):

The operating system my web server runs on is (include version):

My hosting provider, if applicable, is:

I can login to a root shell on my machine (yes or no, or I don't know):

I'm using a control panel to manage my site (no, or provide the name and version of the control panel):

The version of my client is (e.g. output of certbot --version or certbot-auto --version if you're using Certbot):

Port 80 was previously closed, but it’s now open and accessible.

It’s true that we have some IP-based access restrictions in place, but those do not seem to affect other servers on our infrastructure — they’re issuing certificates without any problem. We’ll continue investigating on our side, but if there’s anything specific you’re seeing that might help pinpoint the issue, we’d really appreciate the input.

Thanks again for your help!

LE currently using few AWS for remote validation. and one from their own IP block for main. did you happen to block those?

Apologies for that — you're absolutely right.

My domain is: cerb00apps.onesoft.es

I ran this command: -- (see client version)

It produced this output: -- (see client version)

My web server is (include version): TSPlus

The operating system my web server runs on is (include version): Windows 2022

My hosting provider, if applicable, is: Jotelulu

I can login to a root shell on my machine (yes or no, or I don't know): Yes

I'm using a control panel to manage my site (no, or provide the name and version of the control panel): No

The version of my client is (e.g. output of certbot --version or certbot-auto --version if you're using Certbot): We are using GitHub - afosto/yaac: Yet another ACME client: a decoupled LetsEncrypt client

From our side, the server responds fairly quickly — around 200ms on average. Could you share what kind of response times you're seeing on your end? That might help us understand if there's any regional latency or routing issue affecting the validation process.

Thanks again!

Other servers behind the same firewall are working correctly, and this VM doesn’t have any special rules applied. So, as far as we can tell, there shouldn’t be any blocking specific to Let’s Encrypt’s validation IPs — but we’ll double-check just in case.

Thanks for the heads-up!

Hi again,

To help clarify the situation, I'm attaching two Wireshark captures taken from the WAN interface, before any local filtering or firewall rules are applied.

Both captures are the result of running Let’s Debug tests:

  • Capture 1 shows a successful inbound request from Let's Debug to one of our VMs that can successfully issue certificates.
  • Capture 2 shows traffic to the problematic VM (cerb00apps.onesoft.es), where no incoming request from Let's Debug is observed at all.

I don't see any command nor any literal output in the "client version" answer.

Please provide the exact error message from the ACME server, preferably verbatim from e.g. a log.

Sure, here’s the exact log output from the ACME client:

> GET https://acme-v02.api.letsencrypt.org/directory HTTP/1.1
> User-Agent: GuzzleHttp/7
> Host: acme-v02.api.letsencrypt.org
> 


< HTTP/1.1 200
< Server: nginx
< Date: Fri, 11 Jul 2025 13:24:04 GMT
< Content-Type: application/json
< Content-Length: 995
< Connection: keep-alive
< Cache-Control: public, max-age=0, no-cache
< X-Frame-Options: DENY
< Strict-Transport-Security: max-age=604800
< 
{
  "LC-OnWWd8x4": "https://community.letsencrypt.org/t/adding-random-entries-to-the-directory/33417",
  "keyChange": "https://acme-v02.api.letsencrypt.org/acme/key-change",
  "meta": {
    "caaIdentities": [
      "letsencrypt.org"
    ],
    "profiles": {
      "classic": "https://letsencrypt.org/docs/profiles#classic",
      "shortlived": "https://letsencrypt.org/docs/profiles#shortlived (not yet generally available)",
      "tlsserver": "https://letsencrypt.org/docs/profiles#tlsserver"
    },
    "termsOfService": "https://letsencrypt.org/documents/LE-SA-v1.5-February-24-2025.pdf",
    "website": "https://letsencrypt.org"
  },
  "newAccount": "https://acme-v02.api.letsencrypt.org/acme/new-acct",
  "newNonce": "https://acme-v02.api.letsencrypt.org/acme/new-nonce",
  "newOrder": "https://acme-v02.api.letsencrypt.org/acme/new-order",
  "renewalInfo": "https://acme-v02.api.letsencrypt.org/acme/renewal-info",
  "revokeCert": "https://acme-v02.api.letsencrypt.org/acme/revoke-cert"
}

> HEAD https://acme-v02.api.letsencrypt.org/acme/new-nonce HTTP/1.1
> User-Agent: GuzzleHttp/7
> Host: acme-v02.api.letsencrypt.org
> 


< HTTP/1.1 200
< Server: nginx
< Date: Fri, 11 Jul 2025 13:24:04 GMT
< Connection: keep-alive
< Cache-Control: public, max-age=0, no-cache
< Link: <https://acme-v02.api.letsencrypt.org/directory>;rel="index"
< Replay-Nonce: a-xDzxYJCiQ5r5ewJTB6kF5dLwjaYszq3cAYP92seC1mkIXh_Qw
< X-Frame-Options: DENY
< Strict-Transport-Security: max-age=604800
< 


> POST https://acme-v02.api.letsencrypt.org/acme/new-acct HTTP/1.1
> User-Agent: GuzzleHttp/7
> Host: acme-v02.api.letsencrypt.org
> Content-Type: application/jose+json
> 
####

< HTTP/1.1 200
< Server: nginx
< Date: Fri, 11 Jul 2025 13:24:04 GMT
< Content-Type: application/json
< Content-Length: 808
< Connection: keep-alive
< Boulder-Requester: 1011139337
< Cache-Control: public, max-age=0, no-cache
< Link: <https://acme-v02.api.letsencrypt.org/directory>;rel="index"
< Location: https://acme-v02.api.letsencrypt.org/acme/acct/1011139337
< Replay-Nonce: a-xDzxYJCZeoaiib6pwEaM_5Msk5hcvv2zsFknd2tHTPkC2HsrA
< X-Frame-Options: DENY
< Strict-Transport-Security: max-age=604800
< 
####


> HEAD https://acme-v02.api.letsencrypt.org/acme/new-nonce HTTP/1.1
> User-Agent: GuzzleHttp/7
> Host: acme-v02.api.letsencrypt.org
> 


< HTTP/1.1 200
< Server: nginx
< Date: Fri, 11 Jul 2025 13:24:04 GMT
< Connection: keep-alive
< Cache-Control: public, max-age=0, no-cache
< Link: <https://acme-v02.api.letsencrypt.org/directory>;rel="index"
< Replay-Nonce: a-xDzxYJWSLiYSSqw0fJTyQBhWtaHcbOuhvoU3qQHAMsQl56bbk
< X-Frame-Options: DENY
< Strict-Transport-Security: max-age=604800
< 


> POST https://acme-v02.api.letsencrypt.org/acme/new-order HTTP/1.1
> User-Agent: GuzzleHttp/7
> Host: acme-v02.api.letsencrypt.org
> Content-Type: application/jose+json
> 
####

< HTTP/1.1 201
< Server: nginx
< Date: Fri, 11 Jul 2025 13:24:05 GMT
< Content-Type: application/json
< Content-Length: 355
< Connection: keep-alive
< Boulder-Requester: 1011139337
< Cache-Control: public, max-age=0, no-cache
< Link: <https://acme-v02.api.letsencrypt.org/directory>;rel="index"
< Location: https://acme-v02.api.letsencrypt.org/acme/order/1011139337/405354058921
< Replay-Nonce: oG9lZsuD_Ue7G0NANl5vwyKuRSM4IqyM5yACmQ1FhbF3O1ppCL0
< X-Frame-Options: DENY
< Strict-Transport-Security: max-age=604800
< 
{
  "status": "pending",
  "expires": "2025-07-18T13:24:05Z",
  "identifiers": [
    {
      "type": "dns",
      "value": "cerb00apps.onesoft.es"
    }
  ],
  "authorizations": [
    "https://acme-v02.api.letsencrypt.org/acme/authz/1011139337/551071931581"
  ],
  "finalize": "https://acme-v02.api.letsencrypt.org/acme/finalize/1011139337/405354058921"
}

> HEAD https://acme-v02.api.letsencrypt.org/acme/new-nonce HTTP/1.1
> User-Agent: GuzzleHttp/7
> Host: acme-v02.api.letsencrypt.org
> 


< HTTP/1.1 200
< Server: nginx
< Date: Fri, 11 Jul 2025 13:24:05 GMT
< Connection: keep-alive
< Cache-Control: public, max-age=0, no-cache
< Link: <https://acme-v02.api.letsencrypt.org/directory>;rel="index"
< Replay-Nonce: oG9lZsuDTbdeyfps6zMp-Mp1p2OdIBb_rm-xHI1yf6UMNjm4KJA
< X-Frame-Options: DENY
< Strict-Transport-Security: max-age=604800
< 


> POST https://acme-v02.api.letsencrypt.org/acme/authz/1011139337/551071931581 HTTP/1.1
> User-Agent: GuzzleHttp/7
> Host: acme-v02.api.letsencrypt.org
> Content-Type: application/jose+json
> 
####

< HTTP/1.1 200
< Server: nginx
< Date: Fri, 11 Jul 2025 13:24:05 GMT
< Content-Type: application/json
< Content-Length: 829
< Connection: keep-alive
< Boulder-Requester: 1011139337
< Cache-Control: public, max-age=0, no-cache
< Link: <https://acme-v02.api.letsencrypt.org/directory>;rel="index"
< Replay-Nonce: oG9lZsuDqJqs8ofwF_VKtqYZeuYrNLgfDqUcOOuKCxGSCfB0VgA
< X-Frame-Options: DENY
< Strict-Transport-Security: max-age=604800
< 
{
  "identifier": {
    "type": "dns",
    "value": "cerb00apps.onesoft.es"
  },
  "status": "pending",
  "expires": "2025-07-18T13:24:05Z",
  "challenges": [
    {
      "type": "http-01",
      "url": "https://acme-v02.api.letsencrypt.org/acme/chall/1011139337/551071931581/LF4cJw",
      "status": "pending",
      "token": "Mnpq3VkNIs68n4qU43wa9TL5gQAeactkiOBRnw4LTYc"
    },
    {
      "type": "tls-alpn-01",
      "url": "https://acme-v02.api.letsencrypt.org/acme/chall/1011139337/551071931581/LRdDwg",
      "status": "pending",
      "token": "Mnpq3VkNIs68n4qU43wa9TL5gQAeactkiOBRnw4LTYc"
    },
    {
      "type": "dns-01",
      "url": "https://acme-v02.api.letsencrypt.org/acme/chall/1011139337/551071931581/dcxJOQ",
      "status": "pending",
      "token": "Mnpq3VkNIs68n4qU43wa9TL5gQAeactkiOBRnw4LTYc"
    }
  ]
}


> HEAD https://acme-v02.api.letsencrypt.org/acme/new-nonce HTTP/1.1
> User-Agent: GuzzleHttp/7
> Host: acme-v02.api.letsencrypt.org
> 


< HTTP/1.1 200
< Server: nginx
< Date: Fri, 11 Jul 2025 13:24:09 GMT
< Connection: keep-alive
< Cache-Control: public, max-age=0, no-cache
< Link: <https://acme-v02.api.letsencrypt.org/directory>;rel="index"
< Replay-Nonce: a-xDzxYJL78zPDtZYuO5PaJw1xt7gx2LPDPPq2eMSjx5pb_0K3E
< X-Frame-Options: DENY
< Strict-Transport-Security: max-age=604800
< 


> POST https://acme-v02.api.letsencrypt.org/acme/chall/1011139337/551071931581/LF4cJw HTTP/1.1
> User-Agent: GuzzleHttp/7
> Host: acme-v02.api.letsencrypt.org
> Content-Type: application/jose+json
> 
####

< HTTP/1.1 200
< Server: nginx
< Date: Fri, 11 Jul 2025 13:24:10 GMT
< Content-Type: application/json
< Content-Length: 195
< Connection: keep-alive
< Boulder-Requester: 1011139337
< Cache-Control: public, max-age=0, no-cache
< Link: <https://acme-v02.api.letsencrypt.org/directory>;rel="index",<https://acme-v02.api.letsencrypt.org/acme/authz/1011139337/551071931581>;rel="up"
< Location: https://acme-v02.api.letsencrypt.org/acme/chall/1011139337/551071931581/LF4cJw
< Replay-Nonce: a-xDzxYJDBHI1y7IA8g7R-WMPZsm1vysaJ9GmiNX3L98BpYn_M8
< X-Frame-Options: DENY
< Strict-Transport-Security: max-age=604800
< 
{
  "type": "http-01",
  "url": "https://acme-v02.api.letsencrypt.org/acme/chall/1011139337/551071931581/LF4cJw",
  "status": "pending",
  "token": "Mnpq3VkNIs68n4qU43wa9TL5gQAeactkiOBRnw4LTYc"
}

> HEAD https://acme-v02.api.letsencrypt.org/acme/new-nonce HTTP/1.1
> User-Agent: GuzzleHttp/7
> Host: acme-v02.api.letsencrypt.org
> 


< HTTP/1.1 200
< Server: nginx
< Date: Fri, 11 Jul 2025 13:24:10 GMT
< Connection: keep-alive
< Cache-Control: public, max-age=0, no-cache
< Link: <https://acme-v02.api.letsencrypt.org/directory>;rel="index"
< Replay-Nonce: a-xDzxYJSzVbwYYomcU0B_7p8FRwkEBsbC22m8rI29fbMIVa0-g
< X-Frame-Options: DENY
< Strict-Transport-Security: max-age=604800
< 


> POST https://acme-v02.api.letsencrypt.org/acme/authz/1011139337/551071931581 HTTP/1.1
> User-Agent: GuzzleHttp/7
> Host: acme-v02.api.letsencrypt.org
> Content-Type: application/jose+json
> 
####

< HTTP/1.1 200
< Server: nginx
< Date: Fri, 11 Jul 2025 13:24:10 GMT
< Content-Type: application/json
< Content-Length: 829
< Connection: keep-alive
< Boulder-Requester: 1011139337
< Cache-Control: public, max-age=0, no-cache
< Link: <https://acme-v02.api.letsencrypt.org/directory>;rel="index"
< Replay-Nonce: oG9lZsuDwLL760pqC3RoRzoR-5n-lIvn4dY_dh_eMTQByNj9xrM
< X-Frame-Options: DENY
< Strict-Transport-Security: max-age=604800
< 
{
  "identifier": {
    "type": "dns",
    "value": "cerb00apps.onesoft.es"
  },
  "status": "pending",
  "expires": "2025-07-18T13:24:05Z",
  "challenges": [
    {
      "type": "dns-01",
      "url": "https://acme-v02.api.letsencrypt.org/acme/chall/1011139337/551071931581/dcxJOQ",
      "status": "pending",
      "token": "Mnpq3VkNIs68n4qU43wa9TL5gQAeactkiOBRnw4LTYc"
    },
    {
      "type": "tls-alpn-01",
      "url": "https://acme-v02.api.letsencrypt.org/acme/chall/1011139337/551071931581/LRdDwg",
      "status": "pending",
      "token": "Mnpq3VkNIs68n4qU43wa9TL5gQAeactkiOBRnw4LTYc"
    },
    {
      "type": "http-01",
      "url": "https://acme-v02.api.letsencrypt.org/acme/chall/1011139337/551071931581/LF4cJw",
      "status": "pending",
      "token": "Mnpq3VkNIs68n4qU43wa9TL5gQAeactkiOBRnw4LTYc"
    }
  ]
}

> HEAD https://acme-v02.api.letsencrypt.org/acme/new-nonce HTTP/1.1
> User-Agent: GuzzleHttp/7
> Host: acme-v02.api.letsencrypt.org
> 


< HTTP/1.1 200
< Server: nginx
< Date: Fri, 11 Jul 2025 13:24:11 GMT
< Connection: keep-alive
< Cache-Control: public, max-age=0, no-cache
< Link: <https://acme-v02.api.letsencrypt.org/directory>;rel="index"
< Replay-Nonce: oG9lZsuDg3ncDL0ggm5iwHwGU-6MkW7zJnEHsvq3VRXwZjAWezc
< X-Frame-Options: DENY
< Strict-Transport-Security: max-age=604800
< 


> POST https://acme-v02.api.letsencrypt.org/acme/authz/1011139337/551071931581 HTTP/1.1
> User-Agent: GuzzleHttp/7
> Host: acme-v02.api.letsencrypt.org
> Content-Type: application/jose+json
> 
####

< HTTP/1.1 200
< Server: nginx
< Date: Fri, 11 Jul 2025 13:24:11 GMT
< Content-Type: application/json
< Content-Length: 829
< Connection: keep-alive
< Boulder-Requester: 1011139337
< Cache-Control: public, max-age=0, no-cache
< Link: <https://acme-v02.api.letsencrypt.org/directory>;rel="index"
< Replay-Nonce: oG9lZsuDtIY7ZkAnbGK04SGZt9pfVlk-zLjTzuxTlVBEaw_2MhU
< X-Frame-Options: DENY
< Strict-Transport-Security: max-age=604800
< 
{
  "identifier": {
    "type": "dns",
    "value": "cerb00apps.onesoft.es"
  },
  "status": "pending",
  "expires": "2025-07-18T13:24:05Z",
  "challenges": [
    {
      "type": "http-01",
      "url": "https://acme-v02.api.letsencrypt.org/acme/chall/1011139337/551071931581/LF4cJw",
      "status": "pending",
      "token": "Mnpq3VkNIs68n4qU43wa9TL5gQAeactkiOBRnw4LTYc"
    },
    {
      "type": "dns-01",
      "url": "https://acme-v02.api.letsencrypt.org/acme/chall/1011139337/551071931581/dcxJOQ",
      "status": "pending",
      "token": "Mnpq3VkNIs68n4qU43wa9TL5gQAeactkiOBRnw4LTYc"
    },
    {
      "type": "tls-alpn-01",
      "url": "https://acme-v02.api.letsencrypt.org/acme/chall/1011139337/551071931581/LRdDwg",
      "status": "pending",
      "token": "Mnpq3VkNIs68n4qU43wa9TL5gQAeactkiOBRnw4LTYc"
    }
  ]
}

> HEAD https://acme-v02.api.letsencrypt.org/acme/new-nonce HTTP/1.1
> User-Agent: GuzzleHttp/7
> Host: acme-v02.api.letsencrypt.org
> 


< HTTP/1.1 200
< Server: nginx
< Date: Fri, 11 Jul 2025 13:24:13 GMT
< Connection: keep-alive
< Cache-Control: public, max-age=0, no-cache
< Link: <https://acme-v02.api.letsencrypt.org/directory>;rel="index"
< Replay-Nonce: a-xDzxYJK5auoTyBNdM5VjJAyBACy1P4lcb2mqdzdVy_O4DxaXQ
< X-Frame-Options: DENY
< Strict-Transport-Security: max-age=604800
< 


> POST https://acme-v02.api.letsencrypt.org/acme/authz/1011139337/551071931581 HTTP/1.1
> User-Agent: GuzzleHttp/7
> Host: acme-v02.api.letsencrypt.org
> Content-Type: application/jose+json
> 
####

< HTTP/1.1 200
< Server: nginx
< Date: Fri, 11 Jul 2025 13:24:14 GMT
< Content-Type: application/json
< Content-Length: 829
< Connection: keep-alive
< Boulder-Requester: 1011139337
< Cache-Control: public, max-age=0, no-cache
< Link: <https://acme-v02.api.letsencrypt.org/directory>;rel="index"
< Replay-Nonce: a-xDzxYJcJ5vR4W0ev8n9Tl6POXGmx78Zpba9ilHz0uqeRH7mQI
< X-Frame-Options: DENY
< Strict-Transport-Security: max-age=604800
< 
{
  "identifier": {
    "type": "dns",
    "value": "cerb00apps.onesoft.es"
  },
  "status": "pending",
  "expires": "2025-07-18T13:24:05Z",
  "challenges": [
    {
      "type": "tls-alpn-01",
      "url": "https://acme-v02.api.letsencrypt.org/acme/chall/1011139337/551071931581/LRdDwg",
      "status": "pending",
      "token": "Mnpq3VkNIs68n4qU43wa9TL5gQAeactkiOBRnw4LTYc"
    },
    {
      "type": "http-01",
      "url": "https://acme-v02.api.letsencrypt.org/acme/chall/1011139337/551071931581/LF4cJw",
      "status": "pending",
      "token": "Mnpq3VkNIs68n4qU43wa9TL5gQAeactkiOBRnw4LTYc"
    },
    {
      "type": "dns-01",
      "url": "https://acme-v02.api.letsencrypt.org/acme/chall/1011139337/551071931581/dcxJOQ",
      "status": "pending",
      "token": "Mnpq3VkNIs68n4qU43wa9TL5gQAeactkiOBRnw4LTYc"
    }
  ]
}

> HEAD https://acme-v02.api.letsencrypt.org/acme/new-nonce HTTP/1.1
> User-Agent: GuzzleHttp/7
> Host: acme-v02.api.letsencrypt.org
> 


< HTTP/1.1 200
< Server: nginx
< Date: Fri, 11 Jul 2025 13:24:16 GMT
< Connection: keep-alive
< Cache-Control: public, max-age=0, no-cache
< Link: <https://acme-v02.api.letsencrypt.org/directory>;rel="index"
< Replay-Nonce: a-xDzxYJx-pcho4pmYFmCBO0QzH1MPA5bEHX_eXNLAJwPM_6bKw
< X-Frame-Options: DENY
< Strict-Transport-Security: max-age=604800
< 


> POST https://acme-v02.api.letsencrypt.org/acme/authz/1011139337/551071931581 HTTP/1.1
> User-Agent: GuzzleHttp/7
> Host: acme-v02.api.letsencrypt.org
> Content-Type: application/jose+json
> 
####

< HTTP/1.1 200
< Server: nginx
< Date: Fri, 11 Jul 2025 13:24:16 GMT
< Content-Type: application/json
< Content-Length: 829
< Connection: keep-alive
< Boulder-Requester: 1011139337
< Cache-Control: public, max-age=0, no-cache
< Link: <https://acme-v02.api.letsencrypt.org/directory>;rel="index"
< Replay-Nonce: a-xDzxYJZiu_Y_MBe_41MMrZJqh-qIKnihyAVsHw4hMS_BAVN8s
< X-Frame-Options: DENY
< Strict-Transport-Security: max-age=604800
< 
{
  "identifier": {
    "type": "dns",
    "value": "cerb00apps.onesoft.es"
  },
  "status": "pending",
  "expires": "2025-07-18T13:24:05Z",
  "challenges": [
    {
      "type": "http-01",
      "url": "https://acme-v02.api.letsencrypt.org/acme/chall/1011139337/551071931581/LF4cJw",
      "status": "pending",
      "token": "Mnpq3VkNIs68n4qU43wa9TL5gQAeactkiOBRnw4LTYc"
    },
    {
      "type": "dns-01",
      "url": "https://acme-v02.api.letsencrypt.org/acme/chall/1011139337/551071931581/dcxJOQ",
      "status": "pending",
      "token": "Mnpq3VkNIs68n4qU43wa9TL5gQAeactkiOBRnw4LTYc"
    },
    {
      "type": "tls-alpn-01",
      "url": "https://acme-v02.api.letsencrypt.org/acme/chall/1011139337/551071931581/LRdDwg",
      "status": "pending",
      "token": "Mnpq3VkNIs68n4qU43wa9TL5gQAeactkiOBRnw4LTYc"
    }
  ]
}

> HEAD https://acme-v02.api.letsencrypt.org/acme/new-nonce HTTP/1.1
> User-Agent: GuzzleHttp/7
> Host: acme-v02.api.letsencrypt.org
> 


< HTTP/1.1 200
< Server: nginx
< Date: Fri, 11 Jul 2025 13:24:18 GMT
< Connection: keep-alive
< Cache-Control: public, max-age=0, no-cache
< Link: <https://acme-v02.api.letsencrypt.org/directory>;rel="index"
< Replay-Nonce: a-xDzxYJ-eEuE_bS94kEyJpx6KzRbuVctDw9fBI8VCmmxtw2HiM
< X-Frame-Options: DENY
< Strict-Transport-Security: max-age=604800
< 


> POST https://acme-v02.api.letsencrypt.org/acme/authz/1011139337/551071931581 HTTP/1.1
> User-Agent: GuzzleHttp/7
> Host: acme-v02.api.letsencrypt.org
> Content-Type: application/jose+json
> 
####

< HTTP/1.1 200
< Server: nginx
< Date: Fri, 11 Jul 2025 13:24:18 GMT
< Content-Type: application/json
< Content-Length: 829
< Connection: keep-alive
< Boulder-Requester: 1011139337
< Cache-Control: public, max-age=0, no-cache
< Link: <https://acme-v02.api.letsencrypt.org/directory>;rel="index"
< Replay-Nonce: oG9lZsuD_VeLLHZIqmdWLAkaW1D2DQ93bbLkIsqormB5EGPkJfY
< X-Frame-Options: DENY
< Strict-Transport-Security: max-age=604800
< 
{
  "identifier": {
    "type": "dns",
    "value": "cerb00apps.onesoft.es"
  },
  "status": "pending",
  "expires": "2025-07-18T13:24:05Z",
  "challenges": [
    {
      "type": "http-01",
      "url": "https://acme-v02.api.letsencrypt.org/acme/chall/1011139337/551071931581/LF4cJw",
      "status": "pending",
      "token": "Mnpq3VkNIs68n4qU43wa9TL5gQAeactkiOBRnw4LTYc"
    },
    {
      "type": "tls-alpn-01",
      "url": "https://acme-v02.api.letsencrypt.org/acme/chall/1011139337/551071931581/LRdDwg",
      "status": "pending",
      "token": "Mnpq3VkNIs68n4qU43wa9TL5gQAeactkiOBRnw4LTYc"
    },
    {
      "type": "dns-01",
      "url": "https://acme-v02.api.letsencrypt.org/acme/chall/1011139337/551071931581/dcxJOQ",
      "status": "pending",
      "token": "Mnpq3VkNIs68n4qU43wa9TL5gQAeactkiOBRnw4LTYc"
    }
  ]
}

> HEAD https://acme-v02.api.letsencrypt.org/acme/new-nonce HTTP/1.1
> User-Agent: GuzzleHttp/7
> Host: acme-v02.api.letsencrypt.org
> 


< HTTP/1.1 200
< Server: nginx
< Date: Fri, 11 Jul 2025 13:24:20 GMT
< Connection: keep-alive
< Cache-Control: public, max-age=0, no-cache
< Link: <https://acme-v02.api.letsencrypt.org/directory>;rel="index"
< Replay-Nonce: a-xDzxYJBwWAnH7ot8-pAoTHEYAHkJlB5Cr26t4Cru_prriU2OE
< X-Frame-Options: DENY
< Strict-Transport-Security: max-age=604800
< 


> POST https://acme-v02.api.letsencrypt.org/acme/authz/1011139337/551071931581 HTTP/1.1
> User-Agent: GuzzleHttp/7
> Host: acme-v02.api.letsencrypt.org
> Content-Type: application/jose+json
> 
####

< HTTP/1.1 200
< Server: nginx
< Date: Fri, 11 Jul 2025 13:24:21 GMT
< Content-Type: application/json
< Content-Length: 829
< Connection: keep-alive
< Boulder-Requester: 1011139337
< Cache-Control: public, max-age=0, no-cache
< Link: <https://acme-v02.api.letsencrypt.org/directory>;rel="index"
< Replay-Nonce: oG9lZsuD01aMaMjIcVh0gBKGxxG5LanvH_rFHOmUkjZ5I6I5-gE
< X-Frame-Options: DENY
< Strict-Transport-Security: max-age=604800
< 
{
  "identifier": {
    "type": "dns",
    "value": "cerb00apps.onesoft.es"
  },
  "status": "pending",
  "expires": "2025-07-18T13:24:05Z",
  "challenges": [
    {
      "type": "http-01",
      "url": "https://acme-v02.api.letsencrypt.org/acme/chall/1011139337/551071931581/LF4cJw",
      "status": "pending",
      "token": "Mnpq3VkNIs68n4qU43wa9TL5gQAeactkiOBRnw4LTYc"
    },
    {
      "type": "tls-alpn-01",
      "url": "https://acme-v02.api.letsencrypt.org/acme/chall/1011139337/551071931581/LRdDwg",
      "status": "pending",
      "token": "Mnpq3VkNIs68n4qU43wa9TL5gQAeactkiOBRnw4LTYc"
    },
    {
      "type": "dns-01",
      "url": "https://acme-v02.api.letsencrypt.org/acme/chall/1011139337/551071931581/dcxJOQ",
      "status": "pending",
      "token": "Mnpq3VkNIs68n4qU43wa9TL5gQAeactkiOBRnw4LTYc"
    }
  ]
}

> HEAD https://acme-v02.api.letsencrypt.org/acme/new-nonce HTTP/1.1
> User-Agent: GuzzleHttp/7
> Host: acme-v02.api.letsencrypt.org
> 


< HTTP/1.1 200
< Server: nginx
< Date: Fri, 11 Jul 2025 13:24:23 GMT
< Connection: keep-alive
< Cache-Control: public, max-age=0, no-cache
< Link: <https://acme-v02.api.letsencrypt.org/directory>;rel="index"
< Replay-Nonce: oG9lZsuDyDpjEHI7QvakEgxMpha816vplZIxansSfpdcJtXvq4M
< X-Frame-Options: DENY
< Strict-Transport-Security: max-age=604800
< 


> POST https://acme-v02.api.letsencrypt.org/acme/authz/1011139337/551071931581 HTTP/1.1
> User-Agent: GuzzleHttp/7
> Host: acme-v02.api.letsencrypt.org
> Content-Type: application/jose+json
> 
####

< HTTP/1.1 200
< Server: nginx
< Date: Fri, 11 Jul 2025 13:24:23 GMT
< Content-Type: application/json
< Content-Length: 1090
< Connection: keep-alive
< Boulder-Requester: 1011139337
< Cache-Control: public, max-age=0, no-cache
< Link: <https://acme-v02.api.letsencrypt.org/directory>;rel="index"
< Replay-Nonce: a-xDzxYJG5YrZGY_EDekuH_XXBnPPIK0Kc6eQeftVBshXhazARI
< X-Frame-Options: DENY
< Strict-Transport-Security: max-age=604800
< 
{
  "identifier": {
    "type": "dns",
    "value": "cerb00apps.onesoft.es"
  },
  "status": "invalid",
  "expires": "2025-07-18T13:24:05Z",
  "challenges": [
    {
      "type": "http-01",
      "url": "https://acme-v02.api.letsencrypt.org/acme/chall/1011139337/551071931581/LF4cJw",
      "status": "invalid",
      "validated": "2025-07-11T13:24:10Z",
      "error": {
        "type": "urn:ietf:params:acme:error:connection",
        "detail": "185.31.23.208: Fetching http://cerb00apps.onesoft.es/.well-known/acme-challenge/Mnpq3VkNIs68n4qU43wa9TL5gQAeactkiOBRnw4LTYc: Timeout during connect (likely firewall problem)",
        "status": 400
      },
      "token": "Mnpq3VkNIs68n4qU43wa9TL5gQAeactkiOBRnw4LTYc",
      "validationRecord": [
        {
          "url": "http://cerb00apps.onesoft.es/.well-known/acme-challenge/Mnpq3VkNIs68n4qU43wa9TL5gQAeactkiOBRnw4LTYc",
          "hostname": "cerb00apps.onesoft.es",
          "port": "80",
          "addressesResolved": [
            "185.31.23.208"
          ],
          "addressUsed": "185.31.23.208"
        }
      ]
    }
  ]
}

Let me know if you need the full log or any additional context.

Thanks again for your help!

did you handcrafted the ACME client? GuzzleHttp/7 is some PHP HTTP client GitHub - guzzle/guzzle: Guzzle, an extensible PHP HTTP client to build on not a acme client by itself

Have you kept port 80 open? It's still looking like nothing can connect to me:

If you're looking in logs, whenever you ask Let's Encrypt to validate your challenge (whether directly, or Let's Debug asking the Let's Encrypt staging system), you should be seeing at least 5 requests coming in. If you're not seeing them, then something is blocking them. If it's not on the server you're looking at, maybe it's a firewall or network further upstream.

You mention that you do intentionally block some IPs, so here's some information on blocking in general and how Let's Encrypt needs to check from multiple places around the world, in case that's helpful to your understanding of how the process works:

1 Like

Yes, as mentioned earlier, we're using the afosto/yaac library, which is a PHP ACME client that builds on top of Guzzle for HTTP requests. So while Guzzle appears in the logs, it's just the underlying HTTP client — not something we’re using directly to interact with the ACME server.

Apologies — our system is configured to open port 80 only during the certificate request process, and it closes it immediately afterward. I've now opened it again and will keep it open to avoid further issues.

As I mentioned earlier, we’ve captured all incoming traffic directed to the server before any firewall rules are applied, and we’re not seeing any requests coming from Let’s Encrypt during validation attempts. In contrast, we do see requests coming in when using Let’s Debug.

This makes us think the requests from Let’s Encrypt’s validation servers are not even reaching our infrastructure, possibly being blocked or dropped upstream — but we’re still investigating.

Thanks again for your help and suggestions!

So running this same test now that you've opened it up, it seems that some locations have trouble, though not always the same ones each time I try. I'm guessing there might be some sort of rate limiting or intermittent connectivity involved.

But I don't have a more concrete suggestion for you.

1 Like

That’s what’s puzzling — those same IPs are also blocked on our other domains, yet they’re issuing certificates without any issues.

What’s even stranger is that this particular domain has been consistently failing since March, despite daily attempts. The issue doesn’t seem intermittent from our side — it’s been persistently failing while others on the same infrastructure succeed.

We’re definitely open to any suggestions on what could cause this specific behavior.

Thanks again for your continued support!