1. The problem I’m having:
The issue is that the certificate is never issued for a domain.
The only similar issue I found was this one from Cory few years back:
Note: my system handles thousands of domains and this doesn’t seem to happen often. I only found 3-4 domains affected by this.
2. Error messages and/or full log output:
My logs are a bit different to Cory’s and mention that users
is invalid email:
{"level":"info","ts":"2025-03-21T10:19:30.279Z","logger":"tls.obtain","msg":"obtaining certificate","identifier":"partners.portaone.com"}
{"level":"error","ts":"2025-03-21T10:19:30.949Z","logger":"tls.obtain","msg":"could not get certificate from issuer","identifier":"partners.portaone.com","issuer":"acme-v02.api.letsencrypt.org-directory","error":"HTTP 400 urn:ietf:params:acme:error:invalidContact - Error creating new account :: unable to parse email address"}
{"level":"error","ts":"2025-03-21T10:19:30.949Z","logger":"tls.obtain","msg":"will retry","error":"[partners.portaone.com] Obtain: registering account [mailto:users] with server: attempt 1: https://acme-staging-v02.api.letsencrypt.org/acme/new-acct: HTTP 400 urn:ietf:params:acme:error:invalidContact - Error creating new account :: unable to parse email address","attempt":2,"retrying_in":120,"elapsed":61.233585642,"max_duration":2592000}
3. Caddy version:
2.8.4
4. How I installed and ran Caddy:
a. System environment:
Docker (Linux)
b. Command:
caddy run --config /etc/caddy/caddy.json
d. My complete Caddy config:
{
"apps": {
"http": {
"servers": {
"proxy_status_server": {
"listen": [
":8082"
],
"automatic_https": {
"disable": true,
"disable_redirects": true
},
"routes": [
{
"match": [
{
"path": [
"/custom-domains-proxy-status"
]
}
],
"handle": [
{
"handler": "static_response",
"status_code": 200,
"body": "OK"
}
],
"terminal": true
}
]
},
"tls_terminator": {
"listen": [
":443"
],
"routes": [
{
"match": [
{
"host": [
"partners.portaone.com"
]
}
],
"handle": [
{
"handler": "reverse_proxy",
"upstreams": [
{
"dial": "domain.com:443"
}
],
"transport": {
"protocol": "http",
"tls": {}
},
"headers": {
"request": {
"set": {
"Host": [
"{http.reverse_proxy.upstream.host}"
]
}
}
}
}
],
"terminal": true
}
],
"logs": {}
}
}
},
"tls": {
"automation": {
"policies": [
{
"on_demand": true
}
],
"on_demand": {
"ask": "https://[redacted_domain]/control/caddy/ask",
"rate_limit": {
"interval": "10m",
"burst": 100
}
}
},
"cache": {
"capacity": 100000
}
}
},
"admin": {
"identity": {
"issuers": [
{
"module": "acme",
"email": "[redacted]"
}
]
}
},
"logging": {
"logs": {
"default": {
"exclude": [
"http.log.access"
],
"writer": {
"output": "file",
"filename": "/var/log/caddy/caddy.log",
"roll": true,
"roll_size_mb": 64,
"roll_keep": 20
},
"encoder": {
"format": "json",
"time_format": "iso8601"
}
},
"log0": {
"writer": {
"output": "file",
"filename": "/var/log/caddy/access.log",
"roll": true,
"roll_size_mb": 64,
"roll_keep": 20
},
"encoder": {
"format": "json",
"time_format": "iso8601"
},
"include": [
"http.log.access"
]
}
}
},
"storage": {
"module": "s3",
"host": "s3.amazonaws.com",
"bucket": "[redacted_bucket_name]",
"prefix": "[redacted]",
"insecure": false
}
}
I don’t understand where is that mailto:users
coming from?
Thank you all for any help you can give me!