My domain is: promo.cheapcows.com
I’m using the ACME.js library with a custom validation plugin, which I believe is working correctly now. However, it appears that the challenges I’m making are failing to authorize in a way that I’m not clear on how to resolve. I am using http-01 for authorization.
I have two sets of executions to share so that they can be cross referenced as I wanted to show the consistency of the issue.
Note: the error listed from ACME.js is misleading as it suggests the challenge must be in the pending state; it’s in the invalid state after attempting authorization (can be seen by following the link to the challenge)
It produced this output:
First:
{
"errorType": "Error",
"errorMessage": "[acme-v2] promo.cheapcows.com status:400 Unable to update challenge :: authorization must be pending",
"code": "E_ACME_UNKNOWN",
"auth": {
"identifier": {
"type": "dns",
"value": "promo.cheapcows.com"
},
"status": "pending",
"expires": "2019-11-24T02:06:30Z",
"challenges": [
{
"type": "http-01",
"status": "pending",
"url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/21509306/8nkPTg",
"token": "FHjUbUHD0Me3ln5GUZUCwhQ5pWyTjz4ZWoTsl49RaTs"
},
{
"type": "dns-01",
"status": "pending",
"url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/21509306/wAAS6Q",
"token": "FHjUbUHD0Me3ln5GUZUCwhQ5pWyTjz4ZWoTsl49RaTs"
},
{
"type": "tls-alpn-01",
"status": "pending",
"url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/21509306/4yyvxw",
"token": "FHjUbUHD0Me3ln5GUZUCwhQ5pWyTjz4ZWoTsl49RaTs"
}
],
"type": "http-01",
"url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/21509306/8nkPTg",
"token": "FHjUbUHD0Me3ln5GUZUCwhQ5pWyTjz4ZWoTsl49RaTs",
"hostname": "promo.cheapcows.com",
"altname": "promo.cheapcows.com",
"thumbprint": "5ie-PuXNSp6RgE_t1ObBi4O8oX4U-HMsgN2xB7MOjN0dgVp5dXnVdJDND8CcfC4giZSDYj5_cD1G8sfjO3W6yg",
"keyAuthorization": "FHjUbUHD0Me3ln5GUZUCwhQ5pWyTjz4ZWoTsl49RaTs.5ie-PuXNSp6RgE_t1ObBi4O8oX4U-HMsgN2xB7MOjN0dgVp5dXnVdJDND8CcfC4giZSDYj5_cD1G8sfjO3W6yg",
"challengeUrl": "http://promo.cheapcows.com/.well-known/acme-challenge/FHjUbUHD0Me3ln5GUZUCwhQ5pWyTjz4ZWoTsl49RaTs"
},
"altname": "promo.cheapcows.com",
"type": "http-01",
"stack": [
"Error: [acme-v2] promo.cheapcows.com status:400 Unable to update challenge :: authorization must be pending",
" at transformError (/opt/nodejs/node_modules/@root/acme/acme.js:819:10)",
" at process._tickCallback (internal/process/next_tick.js:68:7)"
]
}
Second:
{
"errorType": "Error",
"errorMessage": "[acme-v2] promo.cheapcows.com status:400 Unable to update challenge :: authorization must be pending",
"code": "E_ACME_UNKNOWN",
"auth": {
"identifier": {
"type": "dns",
"value": "promo.cheapcows.com"
},
"status": "pending",
"expires": "2019-11-24T02:40:07Z",
"challenges": [
{
"type": "http-01",
"status": "pending",
"url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/21513126/89PaBg",
"token": "8928kYRWus0cr48hw5FOu-fn75GHHLFfHTv9odG8Yrs"
},
{
"type": "dns-01",
"status": "pending",
"url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/21513126/1eCWBw",
"token": "8928kYRWus0cr48hw5FOu-fn75GHHLFfHTv9odG8Yrs"
},
{
"type": "tls-alpn-01",
"status": "pending",
"url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/21513126/MMC5Pg",
"token": "8928kYRWus0cr48hw5FOu-fn75GHHLFfHTv9odG8Yrs"
}
],
"type": "http-01",
"url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/21513126/89PaBg",
"token": "8928kYRWus0cr48hw5FOu-fn75GHHLFfHTv9odG8Yrs",
"hostname": "promo.cheapcows.com",
"altname": "promo.cheapcows.com",
"thumbprint": "5ie-PuXNSp6RgE_t1ObBi4O8oX4U-HMsgN2xB7MOjN0dgVp5dXnVdJDND8CcfC4giZSDYj5_cD1G8sfjO3W6yg",
"keyAuthorization": "8928kYRWus0cr48hw5FOu-fn75GHHLFfHTv9odG8Yrs.5ie-PuXNSp6RgE_t1ObBi4O8oX4U-HMsgN2xB7MOjN0dgVp5dXnVdJDND8CcfC4giZSDYj5_cD1G8sfjO3W6yg",
"challengeUrl": "http://promo.cheapcows.com/.well-known/acme-challenge/8928kYRWus0cr48hw5FOu-fn75GHHLFfHTv9odG8Yrs"
},
"altname": "promo.cheapcows.com",
"type": "http-01",
"stack": [
"Error: [acme-v2] promo.cheapcows.com status:400 Unable to update challenge :: authorization must be pending",
" at transformError (/opt/nodejs/node_modules/@root/acme/acme.js:819:10)",
" at process._tickCallback (internal/process/next_tick.js:68:7)"
]
}
My web server is (include version): It’s a bespoke server based on netty (Java)
The operating system my web server runs on is (include version): Ubuntu 18.04
My hosting provider, if applicable, is: AWS
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): ACME.js v3.0.8 (@root/acme@3.0.8)
As an example, when following this link: https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/21513126/89PaBg
I see the authorization failed: Invalid response from http://promo.cheapcows.com/.well-known/acme-challenge/8928kYRWus0cr48hw5FOu-fn75GHHLFfHTv9odG8Yrs [34.213.96.136]: "8928kYRWus0cr48hw5FOu-fn75GHHLFfHTv9odG8Yrs.5ie-PuXNSp6RgE_t1ObBi4O8oX4U-HMsgN2xB7MOjN0dgVp5dXnVdJDND8CcfC4giZSDYj5_cD1G8sfjO3W6"
However, when I query the URL myself:
curl -v 'http://promo.cheapcows.com/.well-known/acme-challenge/8928kYRWus0cr48hw5FOu-fn75GHHLFfHTv9odG8Yrs' -w '\n'
* Trying 34.213.96.136...
* TCP_NODELAY set
* Connected to promo.cheapcows.com (34.213.96.136) port 80 (#0)
> GET /.well-known/acme-challenge/8928kYRWus0cr48hw5FOu-fn75GHHLFfHTv9odG8Yrs HTTP/1.1
> Host: promo.cheapcows.com
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Sun, 17 Nov 2019 02:47:10 GMT
< Content-Type: application/octet-stream
< Content-Length: 130
< Connection: close
< P3P: CP="This is not a privacy policy."
< X-Proxy-Backend: page-server
<
* Closing connection 0
8928kYRWus0cr48hw5FOu-fn75GHHLFfHTv9odG8Yrs.5ie-PuXNSp6RgE_t1ObBi4O8oX4U-HMsgN2xB7MOjN0dgVp5dXnVdJDND8CcfC4giZSDYj5_cD1G8sfjO3W6yg
This is also with resolving the same address (the other address returns the same content).
It appears that the correct response is being received, but something is being truncated and I’m not clear why that would be the case. (the last two letters yg
appear to be missing in the authorization failure message)