Enabling SSL certificates with automated renewals for Traefik in my Homelab setup turned out to be quite straightforward. All I had to do was configure Let’s Encrypt as the Certificate Authority (CA) with Cloudflare as the DNS provider in Traefik’s config files, and then activate it for services in the Docker Compose file. Once all the configurations were in place, Let’s Encrypt promptly issued certificates for the specified subdomains as outlined in the Traefik config. It left me in a bit of a ‘what just happened’ state.
While the Traefik container logs include info on some key events, it was not sufficient to understand the ACME protocol flow. I wanted to see API interactions between Traefik, the Let’s Encrypt server, and Cloudflare in order to understand the complete ACME flow. To gain a better understanding, I redirected the Traefik container’s traffic via BurpSuite proxy. This captured a comprehensive list of the APIs involved, aligning perfectly with the ACME flow specified in RFC 8555.
In this post, I’m sharing the configurations used and a rundown of the captured APIs in the ACME flow, giving you a peek into the process of generating a new Let’s Encrypt SSL certificate.
Traefik setup without SSL Let’s assume the Traefik VM has the IP192.168.0.123
. There are four URLs representing different services (arbitrarily chosen for this post) that need to be routed through Traefik:
Traefik Dashboard
: An internal service of Traefik running on port 8080.whoami
: A Docker container residing in the same VM.Dozzle
: Service in another VM within the same network.example.com
: Represents an external URL.Service Before After Traefik dashboard http://192.168.0.123:8080
http://192.168.0.123:8080
whoami http://192.168.0.123/whoami
http://192.168.0.123/whoami
Dozzle https://192.168.0.124:2443/dozzle
http://192.168.0.123/dozzle
example.com https://example.com
http://192.168.0.123/example
As you can see, we are unifying all services to be accessible via the Trafik VM IP with HTTP. Services except Traefik dashboard are now available on the specified paths.
fig 1: Traefik HTTP Setup Here are the docker compose file and Traefik static & dynamic configuration files for the HTTP setup:
Docker Compose file: traefik/docker-compose.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
services : traefik : image : "traefik:v2.11" container_name : "traefik" ports : -"80:80" -"8080:8080" volumes : -"/var/run/docker.sock:/var/run/docker.sock:ro" -"/home/ubuntu/traefik/etc/traefik:/etc/traefik" whoami : image : "traefik/whoami" container_name : "whoami" labels : -"traefik.enable=true" -"traefik.http.routers.whoami.rule=PathPrefix(`/whoami`)" -"traefik.http.routers.whoami.entrypoints=web"
Traefik Static Configuration file: traefik/etc/traefik/traefik.yml
1 2 3 4 5 6 7 8 9 10 11 12 13
log : level : DEBUG api : insecure : true accessLog : false providers : docker : exposedByDefault : false file : directory : "/etc/traefik/sites" entryPoints : web : address : ":80"
Traefik Dynamic Configuration files: traefik/etc/traefik/sites/dozzle.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
http : routers : dozzle : rule : PathPrefix(`/dozzle`) entryPoints : web service : dozzle@file services : dozzle : loadBalancer : serversTransport : dozzle servers : -url : "https://192.168.0.124:2443/dozzle" serversTransports : dozzle : insecureSkipVerify : true
traefik/etc/traefik/sites/example.yml
1 2 3 4 5 6 7 8 9 10 11 12
http : routers : example : rule : PathPrefix(`/example`) entryPoints : web service : example@file services : example : loadBalancer : passHostHeader : false servers : -url : "https://example.com"
Traefik setup with SSL Our next goal is to establish SSL - all URLs will be directed to port443
.
We also need to setup automated certificate renewals using Let’s Encrypt certificates for mitigating the overhead of managing the SSL certificate manually.
Here is the plan:
Service Before After Traefik dashboard http://192.168.0.123:8080
https://nas.mycustomservice.local/dashboard
whoami http://192.168.0.123/whoami
https://nas.mycustomservice.local/whoami
Dozzle https://192.168.0.123/dozzle
https://nas.mycustomservice.local/dozzle
example.com http://192.168.0.123/example
https://nas.mycustomservice.local/example
Note that the Traefik dashboard is no longer bound to a port, but under a URL path.
fig 2: Traefik HTTPS Setup We will attach the domain namenas.mycustomservice.local
instead of the IP192.168.0.123
. Additionally, for demo purposes, I’m planning to addtest1.test2.mycustomservice.local
as an alias for this domain and also*.nas.mycustomservice.local
to make the services available with subdomain access in case if required.
Here are the DNS records, local network IPs will make the services to be available within the Homelab network:
A nas 192.168.0.123A test.local 192.168.0.123CNAME *.nas nas.mycustomservice.local
Here are the docker compose file and Traefik static & dynamic configuration files for the HTTPS setup. Additional lines are highlighted:
Docker Compose file: traefik/docker-compose.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
services : traefik : image : "traefik:v2.11" container_name : "traefik" ports : -"80:80" -"8080:8080" -"443:443" volumes : -"/var/run/docker.sock:/var/run/docker.sock:ro" -"/home/ubuntu/traefik/etc/traefik:/etc/traefik" environment : CLOUDFLARE_DNS_API_TOKEN : "<token>" CLOUDFLARE_ZONE_API_TOKEN : "<token>" whoami : image : "traefik/whoami" container_name : "whoami" labels : -"traefik.enable=true" -"traefik.http.routers.whoami.rule=PathPrefix(`/whoami`)" -"traefik.http.routers.whoami.entrypoints=web" -"traefik.http.routers.whoami.middlewares=http2https@file" -"traefik.http.routers.whoami-secure.rule=PathPrefix(`/whoami`)" -"traefik.http.routers.whoami-secure.entrypoints=websecure" -"traefik.http.routers.whoami-secure.tls=true"
To generate Cloudflare API tokens, refer tohttps://go-acme.github.io/lego/dns/cloudflare/#api-tokens
Traefik Static Configuration file: traefik/etc/traefik/traefik.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
log : level : DEBUG api : insecure : true accessLog : false providers : docker : exposedByDefault : false file : directory : "/etc/traefik/sites" entryPoints : web : address : ":80" websecure : address : ":443" certificatesResolvers : letEncryptStagingResolver : acme : caServer : https://acme-staging-v02.api.letsencrypt.org/directory email : [email protected] storage : /etc/traefik/acme.json dnsChallenge : provider : cloudflare letEncryptProductionResolver : acme : email : [email protected] storage : /etc/traefik/acme.json dnsChallenge : provider : cloudflare
Traefik Dynamic Configuration files: Note: UseletEncryptStagingResolver
during testing, and switch toletEncryptProductionResolver
once finalized.
traefik/etc/traefik/sites/letsencrypt.yml
1 2 3 4 5 6 7 8 9 10
tls : stores : default : defaultGeneratedCert : resolver : letEncryptProductionResolver domain : main : "nas.mycustomservice.local" sans : -"*.nas.mycustomservice.local" -"test1.test2.mycustomservice.local"
traefik/etc/traefik/sites/dozzle.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
http : routers : dozzle : rule : PathPrefix(`/dozzle`) entryPoints : web service : dozzle@file middlewares : -http2https dozzle-secure : rule : PathPrefix(`/dozzle`) entryPoints : websecure service : dozzle@file tls : {}services : dozzle : loadBalancer : serversTransport : dozzle servers : -url : "https://192.168.0.124:2443/dozzle" serversTransports : dozzle : insecureSkipVerify : true middlewares : http2https : redirectScheme : scheme : https
traefik/etc/traefik/sites/example.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
http : routers : example : rule : PathPrefix(`/example`) entryPoints : web service : example@file middlewares : -http2https example-secure : rule : PathPrefix(`/example`) entryPoints : websecure service : example@file tls : {}services : example : loadBalancer : passHostHeader : false servers : -url : "https://example.com"
Once saved, Traefik would contact Let’s Encrypt server to issue SSL certificates. If you monitor DNS records, you could see temporary DNS records getting created in Cloudflare.
This completes the SSL certificate setup,https://nas.mycustomservice.local/<service_path>
would give the service access.
The generated SSL certificate can be viewed at/etc/traefik/acme.json
:
/etc/traefik/acme.json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
{"letEncryptStagingResolver": {"Account": {"Email": "[email protected] " , "Registration": {"body": {"status": "valid" , "contact": [ "mailto:[email protected] " ] }, "uri": "https://acme-staging-v02.api.letsencrypt.org/acme/acct/123456789" }, "PrivateKey": "MIIJKQIB...F9t44KnJ" , "KeyType": "4096" }, "Certificates": [ {"domain": {"main": "*.nas.mycustomservice.local" , "sans": [ "nas.mycustomservice.local" , "test1.test2.mycustomservice.local" ] }, "certificate": "LS0tLS1...LS0tLS0K" , "key": "LS0tLS1...S0tLS0tCg==" , "Store": "default" }] }, "letEncryptProductionResolver": {"Account": null , "Certificates": null } }
What’s happening internally? The diagram below depicts the typical sequence of requests for SSL certificate issuance by Traefik using the ACME protocol (Let’s Encrypt as Certificate Authority) and with DNS challenge type (Cloudflare as DNS provider).
fig 3: SSL certificate issuance process with ACME [Debugging] How to view API requests? Burp Suite proxy was utilized to capture these API requests. Initially, the proxy was enabled, and the CA certificate was exported in DER format. Subsequently, it was converted to PEM format using the following command:
openssl x509 -in /path/to/burp_ca.der -out /path/to/burp_ca.pem -outform pem
This file was then transferred to the VM hosting the Traefik container, and the docker-compose file was updated as shown below. This enabled to view all the APIs in BurpSuite’sProxy > HTTP History
.
traefik/docker-compose.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
services : traefik : image : "traefik:v2.11" container_name : "traefik" ports : -"80:80" -"8080:8080" -"443:443" volumes : -"/var/run/docker.sock:/var/run/docker.sock:ro" -"/home/ubuntu/traefik/etc/traefik:/etc/traefik" -"/home/ubuntu/traefik/burp_ca.pem:/etc/ssl/certs/burp_ca.pem" environment : CLOUDFLARE_DNS_API_TOKEN : "<token>" CLOUDFLARE_ZONE_API_TOKEN : "<token>" HTTP_PROXY : "<IP_of_the_machine_with_burpsuite_proxy>" HTTPS_PROXY : "<IP_of_the_machine_with_burpsuite_proxy>" whoami : image : "traefik/whoami" container_name : "whoami" labels : -"traefik.enable=true" -"traefik.http.routers.whoami.rule=PathPrefix(`/whoami`)" -"traefik.http.routers.whoami.entrypoints=web" -"traefik.http.routers.whoami.middlewares=http2https@file" -"traefik.http.routers.whoami-secure.rule=PathPrefix(`/whoami`)" -"traefik.http.routers.whoami-secure.entrypoints=websecure" -"traefik.http.routers.whoami-secure.tls=true"
Cloudflare ↔ Traefik ↔ Let’s Encrypt API Interaction Here’s the expanded version with request and response details for each API call recorded in BurpSuite: (click on each request to expand details)
GET /directory Request
1 2 3 4 5
GET /directory HTTP/1.1 Host : acme-staging-v02.api.letsencrypt.org User-Agent : containous-traefik/2.11.0 xenolf-acme/4.15.0 (release; linux; amd64) Accept-Encoding : gzip, deflate, br Connection : close
Response
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
HTTP/2 200 OK Server : nginx Date : Mon, 15 Apr 2024 22:44:23 GMT Content-Type : application/json Content-Length : 821 Cache-Control : public, max-age=0, no-cache X-Frame-Options : DENY Strict-Transport-Security : max-age=604800 {"aXXX5so4OUM": "https://community.letsencrypt.org/t/adding-random-entries-to-the-directory/33417" , "keyChange": "https://acme-staging-v02.api.letsencrypt.org/acme/key-change" , "meta": {"caaIdentities": [ "letsencrypt.org" ], "termsOfService": "https://letsencrypt.org/documents/LE-SA-v1.4-April-3-2024.pdf" , "website": "https://letsencrypt.org/docs/staging-environment/" }, "newAccount": "https://acme-staging-v02.api.letsencrypt.org/acme/new-acct" , "newNonce": "https://acme-staging-v02.api.letsencrypt.org/acme/new-nonce" , "newOrder": "https://acme-staging-v02.api.letsencrypt.org/acme/new-order" , "renewalInfo": "https://acme-staging-v02.api.letsencrypt.org/draft-ietf-acme-ari-02/renewalInfo/" , "revokeCert": "https://acme-staging-v02.api.letsencrypt.org/acme/revoke-cert" }
HEAD /acme/new-nonce Request
1 2 3
HEAD /acme/new-nonce HTTP/2 Host : acme-staging-v02.api.letsencrypt.org User-Agent : containous-traefik/2.11.0 xenolf-acme/4.15.0 (release; linux; amd64)
Response
1 2 3 4 5 6 7 8
HTTP/2 200 OK Server : nginx Date : Mon, 15 Apr 2024 22:44:23 GMT Cache-Control : public, max-age=0, no-cache Link : <https://acme-staging-v02.api.letsencrypt.org/directory>;rel="index" Replay-Nonce : <nonce_1> X-Frame-Options : DENY Strict-Transport-Security : max-age=604800
POST /acme/new-acct Request
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
POST /acme/new-acct HTTP/2 Host : acme-staging-v02.api.letsencrypt.org User-Agent : containous-traefik/2.11.0 xenolf-acme/4.15.0 (release; linux; amd64) Content-Length : 1979 Content-Type : application/jose+json Accept-Encoding : gzip, deflate, br {"payload": {"contact": [ "mailto:[email protected] " ], "termsOfServiceAgreed": true }, "protected": {"alg": "RS256" , "jwk": {"kty": "RSA" , "n": "txHVs5DnkevYfwsxT...qJRoxmQYVNdo-Gp0G5MeIFaAk" , "e": "AQAB" }, "nonce": "<nonce_1>" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/new-acct" }, "signature": "PkiNgKlURafo...8V2yQRzibY" }
Response
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
HTTP/2 201 Created Server : nginx Date : Mon, 15 Apr 2024 22:44:24 GMT Content-Type : application/json Content-Length : 907 Boulder-Requester : 123456789 Cache-Control : public, max-age=0, no-cache Link : <https://acme-staging-v02.api.letsencrypt.org/directory>;rel="index" Link : <https://letsencrypt.org/documents/LE-SA-v1.4-April-3-2024.pdf>;rel="terms-of-service" Location : https://acme-staging-v02.api.letsencrypt.org/acme/acct/123456789 Replay-Nonce : <nonce_2> X-Frame-Options : DENY Strict-Transport-Security : max-age=604800 {"key": {"kty": "RSA" , "n": "txHVs5DnkevYfwsxTSndw...Gp0G5MeIFaAk" , "e": "AQAB" }, "contact": [ "mailto:[email protected] " ], "initialIp": "<server_ip>" , "createdAt": "2024-04-15T22:44:24.238667243Z" , "status": "valid" }
POST /acme/new-order Request
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
POST /acme/new-order HTTP/2 Host : acme-staging-v02.api.letsencrypt.org User-Agent : containous-traefik/2.11.0 xenolf-acme/4.15.0 (release; linux; amd64) Content-Length : 1210 Content-Type : application/jose+json Accept-Encoding : gzip, deflate, br {"payload": {"identifiers": [ {"type": "dns" , "value": "*.nas.mycustomservice.local" }, {"type": "dns" , "value": "nas.mycustomservice.local" }, {"type": "dns" , "value": "test1.test2.mycustomservice.local" }] }, "protected": {"alg": "RS256" , "kid": "https://acme-staging-v02.api.letsencrypt.org/acme/acct/123456789" , "nonce": "<nonce_2>" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/new-order" }, "signature" : "iHW7BjmDfBxv6hO...m3B2BPtUxk_7Jzw" }
Response
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
HTTP/2 201 Created Server : nginx Date : Mon, 15 Apr 2024 22:44:24 GMT Content-Type : application/json Content-Length : 648 Boulder-Requester : 123456789 Cache-Control : public, max-age=0, no-cache Link : <https://acme-staging-v02.api.letsencrypt.org/directory>;rel="index" Location : https://acme-staging-v02.api.letsencrypt.org/acme/order/123456789/11122233344 Replay-Nonce : <nonce_3> X-Frame-Options : DENY Strict-Transport-Security : max-age=604800 {"status": "pending" , "expires": "2024-04-22T22:44:24Z" , "identifiers": [ {"type": "dns" , "value": "*.nas.mycustomservice.local" }, {"type": "dns" , "value": "nas.mycustomservice.local" }, {"type": "dns" , "value": "test1.test2.mycustomservice.local" }], "authorizations": [ "https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/11111111111" , "https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/22222222222" , "https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/33333333333" ], "finalize": "https://acme-staging-v02.api.letsencrypt.org/acme/finalize/123456789/11122233344" }
POST /acme/authz-v3/11111111111 Request
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
POST /acme/authz-v3/11111111111 HTTP/2 Host : acme-staging-v02.api.letsencrypt.org User-Agent : containous-traefik/2.11.0 xenolf-acme/4.15.0 (release; linux; amd64) Content-Length : 1033 Content-Type : application/jose+json Accept-Encoding : gzip, deflate, br {"payload" : "" , "protected": {"alg": "RS256" , "kid": "https://acme-staging-v02.api.letsencrypt.org/acme/acct/123456789" , "nonce": "<nonce_3>" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/11111111111" }, "signature" : "pYj8p8yW2FCFJrr...fLpx4jtFAHjFFM2-SA" }
Response
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
HTTP/2 200 OK Server : nginx Date : Mon, 15 Apr 2024 22:44:25 GMT Content-Type : application/json Content-Length : 392 Boulder-Requester : 123456789 Cache-Control : public, max-age=0, no-cache Link : <https://acme-staging-v02.api.letsencrypt.org/directory>;rel="index" Replay-Nonce : <nonce_4> X-Frame-Options : DENY Strict-Transport-Security : max-age=604800 {"identifier": {"type": "dns" , "value": "nas.mycustomservice.local" }, "status": "pending" , "expires": "2024-04-22T22:44:24Z" , "challenges": [ {"type": "dns-01" , "status": "pending" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/11111111111/aaaAAA" , "token": "<token_1>" }], "wildcard": true }
HEAD /acme/new-nonce Request
1 2 3
HEAD /acme/new-nonce HTTP/2 Host : acme-staging-v02.api.letsencrypt.org User-Agent : containous-traefik/2.11.0 xenolf-acme/4.15.0 (release; linux; amd64)
Response
1 2 3 4 5 6 7 8
HTTP/2 200 OK Server : nginx Date : Mon, 15 Apr 2024 22:44:25 GMT Cache-Control : public, max-age=0, no-cache Link : <https://acme-staging-v02.api.letsencrypt.org/directory>;rel="index" Replay-Nonce : <nonce_5> X-Frame-Options : DENY Strict-Transport-Security : max-age=604800
HEAD /acme/new-nonce Request
1 2 3
HEAD /acme/new-nonce HTTP/2 Host : acme-staging-v02.api.letsencrypt.org User-Agent : containous-traefik/2.11.0 xenolf-acme/4.15.0 (release; linux; amd64)
Response
1 2 3 4 5 6 7 8
HTTP/2 200 OK Server : nginx Date : Mon, 15 Apr 2024 22:44:25 GMT Cache-Control : public, max-age=0, no-cache Link : <https://acme-staging-v02.api.letsencrypt.org/directory>;rel="index" Replay-Nonce : <nonce_6> X-Frame-Options : DENY Strict-Transport-Security : max-age=604800
POST /acme/authz-v3/22222222222 Request
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
POST /acme/authz-v3/22222222222 HTTP/2 Host : acme-staging-v02.api.letsencrypt.org User-Agent : containous-traefik/2.11.0 xenolf-acme/4.15.0 (release; linux; amd64) Content-Length : 1033 Content-Type : application/jose+json Accept-Encoding : gzip, deflate, br {"payload" : "" , "protected": {"alg": "RS256" , "kid": "https://acme-staging-v02.api.letsencrypt.org/acme/acct/123456789" , "nonce": "<nonce_5>" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/22222222222" }, "signature" : "Hh2nnXUaDQe...Kqvz5Tliq19FRNpg5Q" }
Response
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
HTTP/2 200 OK Server : nginx Date : Mon, 15 Apr 2024 22:44:25 GMT Content-Type : application/json Content-Length : 816 Boulder-Requester : 123456789 Cache-Control : public, max-age=0, no-cache Link : <https://acme-staging-v02.api.letsencrypt.org/directory>;rel="index" Replay-Nonce : <nonce_7> X-Frame-Options : DENY Strict-Transport-Security : max-age=604800 {"identifier": {"type": "dns" , "value": "nas.mycustomservice.local" }, "status": "pending" , "expires": "2024-04-22T22:44:24Z" , "challenges": [ {"type": "http-01" , "status": "pending" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/22222222222/eeeEEE" , "token": "<token_2>" }, {"type": "dns-01" , "status": "pending" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/22222222222/bbbBBB" , "token": "<token_2>" }, {"type": "tls-alpn-01" , "status": "pending" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/22222222222/dddDDD" , "token": "<token_2>" }] }
POST /acme/authz-v3/33333333333 Request
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
POST /acme/authz-v3/33333333333 HTTP/2 Host : acme-staging-v02.api.letsencrypt.org User-Agent : containous-traefik/2.11.0 xenolf-acme/4.15.0 (release; linux; amd64) Content-Length : 1033 Content-Type : application/jose+json Accept-Encoding : gzip, deflate, br {"payload" : "" , "protected": {"alg": "RS256" , "kid": "https://acme-staging-v02.api.letsencrypt.org/acme/acct/123456789" , "nonce": "<nonce_6>" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/33333333333" }, "signature" : "O3i3GhFrvTjBsWp...iWgkXuJJ1u7TR8g4" }
Response
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
HTTP/2 200 OK Server : nginx Date : Mon, 15 Apr 2024 22:44:25 GMT Content-Type : application/json Content-Length : 830 Boulder-Requester : 123456789 Cache-Control : public, max-age=0, no-cache Link : <https://acme-staging-v02.api.letsencrypt.org/directory>;rel="index" Replay-Nonce : <nonce_8> X-Frame-Options : DENY Strict-Transport-Security : max-age=604800 {"identifier": {"type": "dns" , "value": "test1.test2.mycustomservice.local" }, "status": "pending" , "expires": "2024-04-22T22:44:24Z" , "challenges": [ {"type": "http-01" , "status": "pending" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/33333333333/fffFFF" , "token": "<token_3>" }, {"type": "dns-01" , "status": "pending" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/33333333333/cccCCC" , "token": "<token_3>" }, {"type": "tls-alpn-01" , "status": "pending" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/33333333333/gggGGG" , "token": "<token_3>" }] }
GET /client/v4/zones?name=example.com&per_page=50 Request
1 2 3 4 5 6 7
GET /client/v4/zones?name=example.com&per_page=50 HTTP/1.1 Host : api.cloudflare.com Authorization : Bearer <bearer_token_1> User-Agent : cloudflare-go/v4 Content-Type : application/json Accept-Encoding : gzip, deflate, br Connection : close
Response
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
HTTP/2 200 OK Date : Mon, 15 Apr 2024 22:44:26 GMT Content-Type : application/json Cf-Ray : 4ba0722d24fb3b1b-SFO Cf-Cache-Status : DYNAMIC Cache-Control : no -store, no-cache, must-revalidate, post-check=0, pre-check=0 Expires : Sun, 25 Jan 1981 05:00:00 GMT Set-Cookie : __cflb=0...D; SameSite=Lax; path=/; expires=Tue, 16-Apr-24 01:14:27 GMT; HttpOnly Strict-Transport-Security : max-age=31536000 Pragma : no -cache X-Content-Type-Options : nosniff X-Frame-Options : SAMEORIGIN Vary : Accept-Encoding Set-Cookie : __cfruid=f...6; path=/; domain=.api.cloudflare.com; HttpOnly; Secure; SameSite=None Server : cloudflare {"result": [ {"id": "zzzzzzzzzzzzzzzzZZZZZZZZZZZZZZZZ" , "name": "example.com" , "status": "active" , "paused": false , "type": "full" , "development_mode": 0 , "name_servers": [ "dina.ns.cloudflare.com" , "phil.ns.cloudflare.com" ], "original_name_servers": null , "original_registrar": null , "original_dnshost": null , "modified_on": "2024-04-02T19:46:42.072328Z" , "created_on": "2022-12-19T05:26:53.707734Z" , "activated_on": "2022-12-19T05:38:03.856067Z" , "meta": {"step": 2 , "custom_certificate_quota": 0 , "page_rule_quota": 3 , "phishing_detected": false , "multiple_railguns_allowed": false }, "owner": {"id": null , "type": "user" , "email": null }, "account": {"id": "<acc_id>" , "name": "<acc_name>" }, "tenant": {"id": null , "name": null }, "tenant_unit": {"id": null }, "permissions": [ "#zone:read" , "#zone_settings:read" ], "plan": {"id": "0feeeeeeeeeeeeeeeeeeeeeeeeeeeeee" , "name": "Free Website" , "price": 0 , "currency": "USD" , "frequency": "" , "is_subscribed": false , "can_subscribe": false , "legacy_id": "free" , "legacy_discount": false , "externally_managed": false } }], "result_info": {"page": 1 , "per_page": 50 , "total_pages": 1 , "count": 1 , "total_count": 1 }, "success": true , "errors": [], "messages": [] }
POST /client/v4/zones/zzzzzzzzzzzzzzzzZZZZZZZZZZZZZZZZ/dns_records Request
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
POST /client/v4/zones/zzzzzzzzzzzzzzzzZZZZZZZZZZZZZZZZ/dns_records HTTP/2 Host : api.cloudflare.com Authorization : Bearer <bearer_token_2> User-Agent : cloudflare-go/v4 Content-Type : application/json Content-Length : 174 Accept-Encoding : gzip, deflate, br {"created_on": "0001-01-01T00:00:00Z" , "modified_on": "0001-01-01T00:00:00Z" , "type": "TXT" , "name": "nas.mycustomservice.local" , "content": "BbR...E1I" , "ttl": 120 }
Response
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
HTTP/2 200 OK Date : Mon, 15 Apr 2024 22:44:27 GMT Content-Type : application/json Cf-Ray : 874f75d4c9b73c12-SFO Cf-Cache-Status : DYNAMIC Set-Cookie : __cflb=0...F; SameSite=Lax; path=/; expires=Tue, 16-Apr-24 01:14:28 GMT; HttpOnly Vary : Accept-Encoding Set-Cookie : __cfruid=7...7; path=/; domain=.api.cloudflare.com; HttpOnly; Secure; SameSite=None Server : cloudflare {"result": {"id": "aAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaA" , "zone_id": "zzzzzzzzzzzzzzzzZZZZZZZZZZZZZZZZ" , "zone_name": "example.com" , "name": "nas.mycustomservice.local" , "type": "TXT" , "content": "BbR...E1I" , "proxiable": false , "proxied": false , "ttl": 120 , "locked": false , "meta": {"auto_added": false , "managed_by_apps": false , "managed_by_argo_tunnel": false }, "comment": null , "tags": [], "created_on": "2024-04-15T22:44:27.736818Z" , "modified_on": "2024-04-15T22:44:27.736818Z" }, "success": true , "errors": [], "messages": [] }
POST /client/v4/zones/zzzzzzzzzzzzzzzzZZZZZZZZZZZZZZZZ/dns_records Request
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
POST /client/v4/zones/zzzzzzzzzzzzzzzzZZZZZZZZZZZZZZZZ/dns_records HTTP/2 Host : api.cloudflare.com Authorization : Bearer <bearer_token_2> User-Agent : cloudflare-go/v4 Content-Type : application/json Content-Length : 174 Accept-Encoding : gzip, deflate, br {"created_on": "0001-01-01T00:00:00Z" , "modified_on": "0001-01-01T00:00:00Z" , "type": "TXT" , "name": "nas.mycustomservice.local" , "content": "_SN...xi0" , "ttl": 120 }
Response
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
HTTP/2 200 OK Date : Mon, 15 Apr 2024 22:44:28 GMT Content-Type : application/json Cf-Ray : 874f75dabaee3c12-SFO Cf-Cache-Status : DYNAMIC Set-Cookie : __cflb=0...F; SameSite=Lax; path=/; expires=Tue, 16-Apr-24 01:14:29 GMT; HttpOnly Vary : Accept-Encoding Set-Cookie : __cfruid=1...; path=/; domain=.api.cloudflare.com; HttpOnly; Secure; SameSite=None Server : cloudflare {"result": {"id": "bBbBbBbBbBbBbBbBbBbBbBbBbBbBbBbB" , "zone_id": "zzzzzzzzzzzzzzzzZZZZZZZZZZZZZZZZ" , "zone_name": "example.com" , "name": "nas.mycustomservice.local" , "type": "TXT" , "content": "_SN...xi0" , "proxiable": false , "proxied": false , "ttl": 120 , "locked": false , "meta": {"auto_added": false , "managed_by_apps": false , "managed_by_argo_tunnel": false , }, "comment": null , "tags": [], "created_on": "2024-04-15T22:44:28.444277Z" , "modified_on": "2024-04-15T22:44:28.444277Z" , }, "success": true , "errors": [], "messages": [], }
POST /client/v4/zones/zzzzzzzzzzzzzzzzZZZZZZZZZZZZZZZZ/dns_records Request
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
POST /client/v4/zones/zzzzzzzzzzzzzzzzZZZZZZZZZZZZZZZZ/dns_records HTTP/2 Host : api.cloudflare.com Authorization : Bearer <bearer_token_2> User-Agent : cloudflare-go/v4 Content-Type : application/json Content-Length : 204 Accept-Encoding : gzip, deflate, br {"created_on": "0001-01-01T00:00:00Z" , "modified_on": "0001-01-01T00:00:00Z" , "type": "TXT" , "name": "_acme-challenge.test1.test2.mycustomservice.local" , "content": "g4K...Prg" , "ttl": 120 }
Response
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
HTTP/2 200 OK Date : Mon, 15 Apr 2024 22:44:29 GMT Content-Type : application/json Cf-Ray : 874f75dfcc0a3c12-SFO Cf-Cache-Status : DYNAMIC Set-Cookie : __cflb=0...m; SameSite=Lax; path=/; expires=Tue, 16-Apr-24 01:14:30 GMT; HttpOnly Vary : Accept-Encoding Set-Cookie : __cfruid=1...9; path=/; domain=.api.cloudflare.com; HttpOnly; Secure; SameSite=None Server : cloudflare {"result": {"id": "cCcCcCcCcCcCcCcCcCcCcCcCcCcCcCcC" , "zone_id": "zzzzzzzzzzzzzzzzZZZZZZZZZZZZZZZZ" , "zone_name": "example.com" , "name": "_acme-challenge.test1.test2.mycustomservice.local" , "type": "TXT" , "content": "g4K...Prg" , "proxiable": false , "proxied": false , "ttl": 120 , "locked": false , "meta": {"auto_added": false , "managed_by_apps": false , "managed_by_argo_tunnel": false }, "comment": null , "tags": [], "created_on": "2024-04-15T22:44:29.294042Z" , "modified_on": "2024-04-15T22:44:29.294042Z" }, "success": true , "errors": [], "messages": [] }
POST /acme/chall-v3/11111111111/aaaAAA Request
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
POST /acme/chall-v3/11111111111/aaaAAA HTTP/2 Host : acme-staging-v02.api.letsencrypt.org User-Agent : containous-traefik/2.11.0 xenolf-acme/4.15.0 (release; linux; amd64) Content-Length : 1045 Content-Type : application/jose+json Accept-Encoding : gzip, deflate, br {"payload" : "e30" , "protected": {"alg": "RS256" , "kid": "https://acme-staging-v02.api.letsencrypt.org/acme/acct/123456789" , "nonce": "<nonce_8>" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/11111111111/aaaAAA" }, "signature": "YpujTx3RiJszf3D...wfdef6KmEFfFrrQ" }
Response
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
HTTP/2 200 OK Server : nginx Date : Mon, 15 Apr 2024 22:44:31 GMT Content-Type : application/json Content-Length : 193 Boulder-Requester : 123456789 Cache-Control : public, max-age=0, no-cache Link : <https://acme-staging-v02.api.letsencrypt.org/directory>;rel="index" Link : <https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/11111111111>;rel="up" Location : https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/11111111111/aaaAAA Replay-Nonce : <nonce_9> X-Frame-Options : DENY Strict-Transport-Security : max-age=604800 {"type": "dns-01" , "status": "pending" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/11111111111/aaaAAA" , "token": "<token_1>" }
POST /acme/authz-v3/11111111111 Request
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
POST /acme/authz-v3/11111111111 HTTP/2 Host : acme-staging-v02.api.letsencrypt.org User-Agent : containous-traefik/2.11.0 xenolf-acme/4.15.0 (release; linux; amd64) Content-Length : 1033 Content-Type : application/jose+json Accept-Encoding : gzip, deflate, br {"payload" : "" , "protected": {"alg": "RS256" , "kid": "https://acme-staging-v02.api.letsencrypt.org/acme/acct/123456789" , "nonce": "<nonce_9>" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/11111111111" }, "signature": "nJBPLq2Lds321...oGvkZANUXIm284" }
Response
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
HTTP/2 200 OK Server : nginx Date : Mon, 15 Apr 2024 22:44:32 GMT Content-Type : application/json Content-Length : 392 Boulder-Requester : 123456789 Cache-Control : public, max-age=0, no-cache Link : <https://acme-staging-v02.api.letsencrypt.org/directory>;rel="index" Replay-Nonce : <nonce_10> X-Frame-Options : DENY Strict-Transport-Security : max-age=604800 {"identifier": {"type": "dns" , "value": "nas.mycustomservice.local" }, "status": "pending" , "expires": "2024-04-22T22:44:24Z" , "challenges": [ {"type": "dns-01" , "status": "pending" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/11111111111/aaaAAA" , "token": "<token_1>" }], "wildcard": true }
POST /acme/authz-v3/11111111111 Request
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
POST /acme/authz-v3/11111111111 HTTP/2 Host : acme-staging-v02.api.letsencrypt.org User-Agent : containous-traefik/2.11.0 xenolf-acme/4.15.0 (release; linux; amd64) Content-Length : 1033 Content-Type : application/jose+json Accept-Encoding : gzip, deflate, br {"payload" : "" , "protected": {"alg": "RS256" , "kid": "https://acme-staging-v02.api.letsencrypt.org/acme/acct/123456789" , "nonce": "<nonce_10>" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/11111111111" }, "signature": "r-N9y58zlB9i2r...CIW-Y8w8qwo1_ws" }
Response
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
HTTP/2 200 OK Server : nginx Date : Mon, 15 Apr 2024 22:44:35 GMT Content-Type : application/json Content-Length : 392 Boulder-Requester : 123456789 Cache-Control : public, max-age=0, no-cache Link : <https://acme-staging-v02.api.letsencrypt.org/directory>;rel="index" Replay-Nonce : <nonce_11> X-Frame-Options : DENY Strict-Transport-Security : max-age=604800 {"identifier": {"type": "dns" , "value": "nas.mycustomservice.local" }, "status": "pending" , "expires": "2024-04-22T22:44:24Z" , "challenges": [ {"type": "dns-01" , "status": "pending" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/11111111111/aaaAAA" , "token": "<token_1>" }], "wildcard": true }
POST /acme/authz-v3/11111111111 Request
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
POST /acme/authz-v3/11111111111 HTTP/2 Host : acme-staging-v02.api.letsencrypt.org User-Agent : containous-traefik/2.11.0 xenolf-acme/4.15.0 (release; linux; amd64) Content-Length : 1033 Content-Type : application/jose+json Accept-Encoding : gzip, deflate, br {"payload" : "" , "protected": {"alg": "RS256" , "kid": "https://acme-staging-v02.api.letsencrypt.org/acme/acct/123456789" , "nonce": "<nonce_11>" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/11111111111" }, "signature": "sKKxfXxd8eVYmvLf...KSO9jzvdLA0VRk" }
Response
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
HTTP/2 200 OK Server : nginx Date : Mon, 15 Apr 2024 22:44:45 GMT Content-Type : application/json Content-Length : 392 Boulder-Requester : 123456789 Cache-Control : public, max-age=0, no-cache Link : <https://acme-staging-v02.api.letsencrypt.org/directory>;rel="index" Replay-Nonce : <nonce_12> X-Frame-Options : DENY Strict-Transport-Security : max-age=604800 {"identifier": {"type": "dns" , "value": "nas.mycustomservice.local" }, "status": "pending" , "expires": "2024-04-22T22:44:24Z" , "challenges": [ {"type": "dns-01" , "status": "pending" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/11111111111/aaaAAA" , "token": "<token_1>" }], "wildcard": true }
POST /acme/authz-v3/11111111111 Request
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
POST /acme/authz-v3/11111111111 HTTP/2 Host : acme-staging-v02.api.letsencrypt.org User-Agent : containous-traefik/2.11.0 xenolf-acme/4.15.0 (release; linux; amd64) Content-Length : 1033 Content-Type : application/jose+json Accept-Encoding : gzip, deflate, br {"payload" : "" , "protected": {"alg": "RS256" , "kid": "https://acme-staging-v02.api.letsencrypt.org/acme/acct/123456789" , "nonce": "<nonce_12>" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/11111111111" }, "signature": "m8VMj7Mdv8jI3...GbLqTZJEuqKYYE" }
Response
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
HTTP/2 200 OK Server : nginx Date : Mon, 15 Apr 2024 22:44:56 GMT Content-Type : application/json Content-Length : 597 Boulder-Requester : 123456789 Cache-Control : public, max-age=0, no-cache Link : <https://acme-staging-v02.api.letsencrypt.org/directory>;rel="index" Replay-Nonce : <nonce_13> X-Frame-Options : DENY Strict-Transport-Security : max-age=604800 {"identifier": {"type": "dns" , "value": "nas.mycustomservice.local" }, "status": "valid" , "expires": "2024-05-15T22:44:51Z" , "challenges": [ {"type": "dns-01" , "status": "valid" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/11111111111/aaaAAA" , "token": "<token_1>" , "validationRecord": [ {"hostname": "nas.mycustomservice.local" , "resolverAddrs": [ "10.0.32.85:28460" ] }], "validated": "2024-04-15T22:44:31Z" }], "wildcard": true }
POST /acme/chall-v3/22222222222/bbbBBB Request
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
POST /acme/chall-v3/22222222222/bbbBBB HTTP/2 Host : acme-staging-v02.api.letsencrypt.org User-Agent : containous-traefik/2.11.0 xenolf-acme/4.15.0 (release; linux; amd64) Content-Length : 1045 Content-Type : application/jose+json Accept-Encoding : gzip, deflate, br {"payload" : "e30" , "protected": {"alg": "RS256" , "kid": "https://acme-staging-v02.api.letsencrypt.org/acme/acct/123456789" , "nonce": "<nonce_13>" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/22222222222/bbbBBB" }, "signature": "KoR8Npq7IbAosgLUX...Ua9S_ai78uno4" }
Response
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
HTTP/2 200 OK Server : nginx Date : Mon, 15 Apr 2024 22:44:59 GMT Content-Type : application/json Content-Length : 193 Boulder-Requester : 123456789 Cache-Control : public, max-age=0, no-cache Link : <https://acme-staging-v02.api.letsencrypt.org/directory>;rel="index" Link : <https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/22222222222>;rel="up" Location : https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/22222222222/bbbBBB Replay-Nonce : <nonce_14> X-Frame-Options : DENY Strict-Transport-Security : max-age=604800 {"type": "dns-01" , "status": "pending" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/22222222222/bbbBBB" , "token": "<token_2>" }
POST /acme/authz-v3/22222222222 Request
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
POST /acme/authz-v3/22222222222 HTTP/2 Host : acme-staging-v02.api.letsencrypt.org User-Agent : containous-traefik/2.11.0 xenolf-acme/4.15.0 (release; linux; amd64) Content-Length : 1033 Content-Type : application/jose+json Accept-Encoding : gzip, deflate, br {"payload" : "" , "protected": {"alg": "RS256" , "kid": "https://acme-staging-v02.api.letsencrypt.org/acme/acct/123456789" , "nonce": "<nonce_14>" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/22222222222" }, "signature" : "W8SCrjEIrr6o...fAr4Bs0kiU1uIaw" }
Response
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
HTTP/2 200 OK Server : nginx Date : Mon, 15 Apr 2024 22:44:59 GMT Content-Type : application/json Content-Length : 816 Boulder-Requester : 123456789 Cache-Control : public, max-age=0, no-cache Link : <https://acme-staging-v02.api.letsencrypt.org/directory>;rel="index" Replay-Nonce : <nonce_15> X-Frame-Options : DENY Strict-Transport-Security : max-age=604800 {"identifier": {"type": "dns" , "value": "nas.mycustomservice.local" }, "status": "pending" , "expires": "2024-04-22T22:44:24Z" , "challenges": [ {"type": "http-01" , "status": "pending" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/22222222222/eeeEEE" , "token": "<token_2>" }, {"type": "dns-01" , "status": "pending" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/22222222222/bbbBBB" , "token": "<token_2>" }, {"type": "tls-alpn-01" , "status": "pending" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/22222222222/dddDDD" , "token": "<token_2>" }] }
POST /acme/authz-v3/22222222222 Request
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
POST /acme/authz-v3/22222222222 HTTP/2 Host : acme-staging-v02.api.letsencrypt.org User-Agent : containous-traefik/2.11.0 xenolf-acme/4.15.0 (release; linux; amd64) Content-Length : 1033 Content-Type : application/jose+json Accept-Encoding : gzip, deflate, br {"payload" : "" , "protected": {"alg": "RS256" , "kid": "https://acme-staging-v02.api.letsencrypt.org/acme/acct/123456789" , "nonce": "<nonce_15>" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/22222222222" }, "signature" : "NH-TaMdUBCoG9N...IMeHGs8LxRnSj-4s" }
Response
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
HTTP/2 200 OK Server : nginx Date : Mon, 15 Apr 2024 22:45:07 GMT Content-Type : application/json Content-Length : 816 Boulder-Requester : 123456789 Cache-Control : public, max-age=0, no-cache Link : <https://acme-staging-v02.api.letsencrypt.org/directory>;rel="index" Replay-Nonce : <nonce_16> X-Frame-Options : DENY Strict-Transport-Security : max-age=604800 {"identifier": {"type": "dns" , "value": "nas.mycustomservice.local" }, "status": "pending" , "expires": "2024-04-22T22:44:24Z" , "challenges": [ {"type": "http-01" , "status": "pending" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/22222222222/eeeEEE" , "token": "<token_2>" }, {"type": "dns-01" , "status": "pending" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/22222222222/bbbBBB" , "token": "<token_2>" }, {"type": "tls-alpn-01" , "status": "pending" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/22222222222/dddDDD" , "token": "<token_2>" }] }
POST /acme/authz-v3/22222222222 Request
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
POST /acme/authz-v3/22222222222 HTTP/2 Host : acme-staging-v02.api.letsencrypt.org User-Agent : containous-traefik/2.11.0 xenolf-acme/4.15.0 (release; linux; amd64) Content-Length : 1033 Content-Type : application/jose+json Accept-Encoding : gzip, deflate, br {"payload": "" , "protected": {"alg": "RS256" , "kid": "https://acme-staging-v02.api.letsencrypt.org/acme/acct/123456789" , "nonce": "<nonce_16>" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/22222222222" }, "signature": "Rrl0vQb083f3qY6mr...56fDga--8YhSpk" }
Response
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
HTTP/2 200 OK Server : nginx Date : Mon, 15 Apr 2024 22:45:12 GMT Content-Type : application/json Content-Length : 577 Boulder-Requester : 123456789 Cache-Control : public, max-age=0, no-cache Link : <https://acme-staging-v02.api.letsencrypt.org/directory>;rel="index" Replay-Nonce : <nonce_17> X-Frame-Options : DENY Strict-Transport-Security : max-age=604800 {"identifier": {"type": "dns" , "value": "nas.mycustomservice.local" }, "status": "valid" , "expires": "2024-05-15T22:45:09Z" , "challenges": [ {"type": "dns-01" , "status": "valid" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/22222222222/bbbBBB" , "token": "<token_2>" , "validationRecord": [ {"hostname": "nas.mycustomservice.local" , "resolverAddrs": [ "10.0.32.82:23095" ] }], "validated": "2024-04-15T22:44:59Z" }] }
POST /acme/chall-v3/33333333333/cccCCC Request
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
POST /acme/chall-v3/33333333333/cccCCC HTTP/2 Host : acme-staging-v02.api.letsencrypt.org User-Agent : containous-traefik/2.11.0 xenolf-acme/4.15.0 (release; linux; amd64) Content-Length : 1045 Content-Type : application/jose+json Accept-Encoding : gzip, deflate, br {"payload" : "e30" , "protected": {"alg": "RS256" , "kid": "https://acme-staging-v02.api.letsencrypt.org/acme/acct/123456789" , "nonce": "<nonce_17>" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/33333333333/cccCCC" }, "signature" : "pPaeqBiq4HqW5...QBSi3l87xrdUM" }
Response
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
HTTP/2 200 OK Server : nginx Date : Mon, 15 Apr 2024 22:45:14 GMT Content-Type : application/json Content-Length : 193 Boulder-Requester : 123456789 Cache-Control : public, max-age=0, no-cache Link : <https://acme-staging-v02.api.letsencrypt.org/directory>;rel="index" Link : <https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/33333333333>;rel="up" Location : https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/33333333333/cccCCC Replay-Nonce : <nonce_18> X-Frame-Options : DENY Strict-Transport-Security : max-age=604800 {"type": "dns-01" , "status": "pending" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/33333333333/cccCCC" , "token": "<token_3>" }
POST /acme/authz-v3/33333333333 Request
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
POST /acme/authz-v3/33333333333 HTTP/2 Host : acme-staging-v02.api.letsencrypt.org User-Agent : containous-traefik/2.11.0 xenolf-acme/4.15.0 (release; linux; amd64) Content-Length : 1033 Content-Type : application/jose+json Accept-Encoding : gzip, deflate, br {"payload" : "" , "protected": {"alg": "RS256" , "kid": "https://acme-staging-v02.api.letsencrypt.org/acme/acct/123456789" , "nonce": "<nonce_18>" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/33333333333" }, "signature" : "HiH3Yh5hdLdQhm...qgYF1AM_1AC3Qo" }
Response
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
HTTP/2 200 OK Server : nginx Date : Mon, 15 Apr 2024 22:45:15 GMT Content-Type : application/json Content-Length : 830 Boulder-Requester : 123456789 Cache-Control : public, max-age=0, no-cache Link : <https://acme-staging-v02.api.letsencrypt.org/directory>;rel="index" Replay-Nonce : <nonce_18> X-Frame-Options : DENY Strict-Transport-Security : max-age=604800 {"identifier": {"type": "dns" , "value": "test1.test2.mycustomservice.local" }, "status": "pending" , "expires": "2024-04-22T22:44:24Z" , "challenges": [ {"type": "http-01" , "status": "pending" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/33333333333/fffFFF" , "token": "<token_3>" }, {"type": "dns-01" , "status": "pending" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/33333333333/cccCCC" , "token": "<token_3>" }, {"type": "tls-alpn-01" , "status": "pending" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/33333333333/gggGGG" , "token": "<token_3>" }] }
POST /acme/authz-v3/33333333333 Request
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
POST /acme/authz-v3/33333333333 HTTP/2 Host : acme-staging-v02.api.letsencrypt.org User-Agent : containous-traefik/2.11.0 xenolf-acme/4.15.0 (release; linux; amd64) Content-Length : 1033 Content-Type : application/jose+json Accept-Encoding : gzip, deflate, br {"payload" : "" , "protected": {"alg": "RS256" , "kid": "https://acme-staging-v02.api.letsencrypt.org/acme/acct/123456789" , "nonce": "<nonce_18>" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/33333333333" }, "signature" : "SMKKc-Da_EE...nxmjwTgJiNYqQc" }
Response
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
HTTP/2 200 OK Server : nginx Date : Mon, 15 Apr 2024 22:45:22 GMT Content-Type : application/json Content-Length : 830 Boulder-Requester : 123456789 Cache-Control : public, max-age=0, no-cache Link : <https://acme-staging-v02.api.letsencrypt.org/directory>;rel="index" Replay-Nonce : <nonce_19> X-Frame-Options : DENY Strict-Transport-Security : max-age=604800 {"identifier": {"type": "dns" , "value": "test1.test2.mycustomservice.local" }, "status": "pending" , "expires": "2024-04-22T22:44:24Z" , "challenges": [ {"type": "http-01" , "status": "pending" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/33333333333/fffFFF" , "token": "<token_3>" }, {"type": "dns-01" , "status": "pending" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/33333333333/cccCCC" , "token": "<token_3>" }, {"type": "tls-alpn-01" , "status": "pending" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/33333333333/gggGGG" , "token": "<token_3>" }] }
POST /acme/authz-v3/33333333333 Request
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
POST /acme/authz-v3/33333333333 HTTP/2 Host : acme-staging-v02.api.letsencrypt.org User-Agent : containous-traefik/2.11.0 xenolf-acme/4.15.0 (release; linux; amd64) Content-Length : 1033 Content-Type : application/jose+json Accept-Encoding : gzip, deflate, br {"payload" : "" , "protected": {"alg": "RS256" , "kid": "https://acme-staging-v02.api.letsencrypt.org/acme/acct/123456789" , "nonce": "<nonce_19>" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/33333333333" }, "signature" : "fSjTHehqqfWz...bVvaG2uH4DXf7h74o" }
Response
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
HTTP/2 200 OK Server : nginx Date : Mon, 15 Apr 2024 22:45:30 GMT Content-Type : application/json Content-Length : 830 Boulder-Requester : 123456789 Cache-Control : public, max-age=0, no-cache Link : <https://acme-staging-v02.api.letsencrypt.org/directory>;rel="index" Replay-Nonce : <nonce_20> X-Frame-Options : DENY Strict-Transport-Security : max-age=604800 {"identifier": {"type": "dns" , "value": "test1.test2.mycustomservice.local" }, "status": "pending" , "expires": "2024-04-22T22:44:24Z" , "challenges": [ {"type": "http-01" , "status": "pending" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/33333333333/fffFFF" , "token": "<token_3>" }, {"type": "dns-01" , "status": "pending" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/33333333333/cccCCC" , "token": "<token_3>" }, {"type": "tls-alpn-01" , "status": "pending" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/33333333333/gggGGG" , "token": "<token_3>" }] }
POST /acme/authz-v3/33333333333 Request
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
POST /acme/authz-v3/33333333333 HTTP/2 Host : acme-staging-v02.api.letsencrypt.org User-Agent : containous-traefik/2.11.0 xenolf-acme/4.15.0 (release; linux; amd64) Content-Length : 1033 Content-Type : application/jose+json Accept-Encoding : gzip, deflate, br {"payload" : "" , "protected": {"alg": "RS256" , "kid": "https://acme-staging-v02.api.letsencrypt.org/acme/acct/123456789" , "nonce": "<nonce_20>" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/33333333333" }, "signature" : "axHJF6HwVPlLDNDj...blbKDbI6BpV_Gz0" }
Response
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
HTTP/2 200 OK Server : nginx Date : Mon, 15 Apr 2024 22:45:41 GMT Content-Type : application/json Content-Length : 605 Boulder-Requester : 123456789 Cache-Control : public, max-age=0, no-cache Link : <https://acme-staging-v02.api.letsencrypt.org/directory>;rel="index" Replay-Nonce : <nonce_21> X-Frame-Options : DENY Strict-Transport-Security : max-age=604800 {"identifier": {"type": "dns" , "value": "test1.test2.mycustomservice.local" }, "status": "valid" , "expires": "2024-05-15T22:45:34Z" , "challenges": [ {"type": "dns-01" , "status": "valid" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/33333333333/cccCCC" , "token": "<token_3>" , "validationRecord": [ {"hostname": "test1.test2.mycustomservice.local" , "resolverAddrs": [ "10.0.32.82:23095" ] }], "validated": "2024-04-15T22:45:14Z" }] }
DELETE /client/v4/zones/zzzzzzzzzzzzzzzzZZZZZZZZZZZZZZZZ/dns_records/aAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaA Request
1 2 3 4 5 6
DELETE /client/v4/zones/zzzzzzzzzzzzzzzzZZZZZZZZZZZZZZZZ/dns_records/aAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaA HTTP/2 Host : api.cloudflare.com Authorization : Bearer <bearer_token_2> User-Agent : cloudflare-go/v4 Content-Type : application/json Accept-Encoding : gzip, deflate, br
Response
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
HTTP/2 200 OK Date : Mon, 15 Apr 2024 22:45:42 GMT Content-Type : application/json Cf-Ray : 874f77a6998e3c07-SFO Cf-Cache-Status : DYNAMIC Set-Cookie : __cflb=0...D; SameSite=Lax; path=/; expires=Tue, 16-Apr-24 01:15:43 GMT; HttpOnly Vary : Accept-Encoding Set-Cookie : __cfruid=c...2; path=/; domain=.api.cloudflare.com; HttpOnly; Secure; SameSite=None Server : cloudflare {"result": {"id": "aAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaA" }, "success": true , "errors": [], "messages": [] }
DELETE /client/v4/zones/zzzzzzzzzzzzzzzzZZZZZZZZZZZZZZZZ/dns_records/bBbBbBbBbBbBbBbBbBbBbBbBbBbBbBbB Request
1 2 3 4 5 6
DELETE /client/v4/zones/zzzzzzzzzzzzzzzzZZZZZZZZZZZZZZZZ/dns_records/bBbBbBbBbBbBbBbBbBbBbBbBbBbBbBbB HTTP/2 Host : api.cloudflare.com Authorization : Bearer <bearer_token_2> User-Agent : cloudflare-go/v4 Content-Type : application/json Accept-Encoding : gzip, deflate, br
Response
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
HTTP/2 200 OK Date : Mon, 15 Apr 2024 22:45:43 GMT Content-Type : application/json Cf-Ray : 21d51a9896374f07-SFO Cf-Cache-Status : DYNAMIC Set-Cookie : __cflb=0...j; SameSite=Lax; path=/; expires=Tue, 16-Apr-24 01:15:44 GMT; HttpOnly Vary : Accept-Encoding Set-Cookie : __cfruid=7...3; path=/; domain=.api.cloudflare.com; HttpOnly; Secure; SameSite=None Server : cloudflare {"result": {"id": "bBbBbBbBbBbBbBbBbBbBbBbBbBbBbBbB" }, "success": true , "errors": [], "messages": [] }
DELETE /client/v4/zones/zzzzzzzzzzzzzzzzZZZZZZZZZZZZZZZZ/dns_records/cCcCcCcCcCcCcCcCcCcCcCcCcCcCcCcC Request
1 2 3 4 5 6
DELETE /client/v4/zones/zzzzzzzzzzzzzzzzZZZZZZZZZZZZZZZZ/dns_records/cCcCcCcCcCcCcCcCcCcCcCcCcCcCcCcC HTTP/2 Host : api.cloudflare.com Authorization : Bearer <bearer_token_2> User-Agent : cloudflare-go/v4 Content-Type : application/json Accept-Encoding : gzip, deflate, br
Response
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
HTTP/2 200 OK Date : Mon, 15 Apr 2024 22:45:43 GMT Content-Type : application/json Cf-Ray : 35084b19144de3bf-SFO Cf-Cache-Status : DYNAMIC Set-Cookie : __cflb=0...F; SameSite=Lax; path=/; expires=Tue, 16-Apr-24 01:15:44 GMT; HttpOnly Vary : Accept-Encoding Set-Cookie : __cfruid=7...3; path=/; domain=.api.cloudflare.com; HttpOnly; Secure; SameSite=None Server : cloudflare {"result": {"id": "cCcCcCcCcCcCcCcCcCcCcCcCcCcCcCcC" }, "success": true , "errors": [], "messages": [] }
POST /acme/finalize/123456789/11122233344 Request
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
POST /acme/finalize/123456789/11122233344 HTTP/2 Host : acme-staging-v02.api.letsencrypt.org User-Agent : containous-traefik/2.11.0 xenolf-acme/4.15.0 (release; linux; amd64) Content-Length : 3201 Content-Type : application/jose+json Accept-Encoding : gzip, deflate, br {"payload": {"csr": "MIIEsDCCApgCAQAwGDE...fmxnNbbWYA" }, "protected": {"alg": "RS256" , "kid": "https://acme-staging-v02.api.letsencrypt.org/acme/acct/123456789" , "nonce": "<nonce_21>" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/finalize/123456789/11122233344" }, "signature" : "nqtwaW8gJo...KhY5w6SljCto" }
Response
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
HTTP/2 200 OK Server : nginx Date : Mon, 15 Apr 2024 22:45:47 GMT Content-Type : application/json Content-Length : 651 Boulder-Requester : 123456789 Cache-Control : public, max-age=0, no-cache Link : <https://acme-staging-v02.api.letsencrypt.org/directory>;rel="index" Location : https://acme-staging-v02.api.letsencrypt.org/acme/order/123456789/11122233344 Replay-Nonce : <nonce_22> Retry-After : 3 X-Frame-Options : DENY Strict-Transport-Security : max-age=604800 {"status": "processing" , "expires": "2024-04-22T22:44:24Z" , "identifiers": [ {"type": "dns" , "value": "*.nas.mycustomservice.local" }, {"type": "dns" , "value": "nas.mycustomservice.local" }, {"type": "dns" , "value": "test1.test2.mycustomservice.local" }], "authorizations": [ "https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/11111111111" , "https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/22222222222" , "https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/33333333333" ], "finalize": "https://acme-staging-v02.api.letsencrypt.org/acme/finalize/123456789/11122233344" }
POST /acme/order/123456789/11122233344 Request
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
POST /acme/order/123456789/11122233344 HTTP/2 Host : acme-staging-v02.api.letsencrypt.org User-Agent : containous-traefik/2.11.0 xenolf-acme/4.15.0 (release; linux; amd64) Content-Length : 1042 Content-Type : application/jose+json Accept-Encoding : gzip, deflate, br {"payload" : "" , "protected": {"alg": "RS256" , "kid": "https://acme-staging-v02.api.letsencrypt.org/acme/acct/123456789" , "nonce": "<nonce_22>" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/order/123456789/11122233344" }, "signature" : "K_ngn_c-LJUxr...bBE4wQHO0" }
Response
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
HTTP/2 200 OK Server : nginx Date : Mon, 15 Apr 2024 22:45:47 GMT Content-Type : application/json Content-Length : 651 Cache-Control : public, max-age=0, no-cache Link : <https://acme-staging-v02.api.letsencrypt.org/directory>;rel="index" Replay-Nonce : <nonce_23> Retry-After : 3 X-Frame-Options : DENY Strict-Transport-Security : max-age=604800 {"status": "processing" , "expires": "2024-04-22T22:44:24Z" , "identifiers": [ {"type": "dns" , "value": "*.nas.mycustomservice.local" }, {"type": "dns" , "value": "nas.mycustomservice.local" }, {"type": "dns" , "value": "test1.test2.mycustomservice.local" }], "authorizations": [ "https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/11111111111" , "https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/22222222222" , "https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/33333333333" ], "finalize": "https://acme-staging-v02.api.letsencrypt.org/acme/finalize/123456789/11122233344" }
POST /acme/order/123456789/11122233344 Request
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
POST /acme/order/123456789/11122233344 HTTP/2 Host : acme-staging-v02.api.letsencrypt.org User-Agent : containous-traefik/2.11.0 xenolf-acme/4.15.0 (release; linux; amd64) Content-Length : 1042 Content-Type : application/jose+json Accept-Encoding : gzip, deflate, br {"payload" : "" , "protected": {"alg": "RS256" , "kid": "https://acme-staging-v02.api.letsencrypt.org/acme/acct/123456789" , "nonce": "<nonce_23>" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/order/123456789/11122233344" }, "signature" : "RhBRVl87HQ4...osLPyPjw" }
Response
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
HTTP/2 200 OK Server : nginx Date : Mon, 15 Apr 2024 22:45:48 GMT Content-Type : application/json Content-Length : 758 Cache-Control : public, max-age=0, no-cache Link : <https://acme-staging-v02.api.letsencrypt.org/directory>;rel="index" Replay-Nonce : <nonce_24> X-Frame-Options : DENY Strict-Transport-Security : max-age=604800 {"status": "valid" , "expires": "2024-04-22T22:44:24Z" , "identifiers": [ {"type": "dns" , "value": "*.nas.mycustomservice.local" }, {"type": "dns" , "value": "nas.mycustomservice.local" }, {"type": "dns" , "value": "test1.test2.mycustomservice.local" }], "authorizations": [ "https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/11111111111" , "https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/22222222222" , "https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/33333333333" ], "finalize": "https://acme-staging-v02.api.letsencrypt.org/acme/finalize/123456789/11122233344" , "certificate": "https://acme-staging-v02.api.letsencrypt.org/acme/cert/xxxxXXXXxxxxXXXXxxxxXXXXxxxxXXXX" }
POST /acme/cert/xxxxXXXXxxxxXXXXxxxxXXXXxxxxXXXX Request
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
POST /acme/cert/xxxxXXXXxxxxXXXXxxxxXXXXxxxxXXXX HTTP/2 Host : acme-staging-v02.api.letsencrypt.org User-Agent : containous-traefik/2.11.0 xenolf-acme/4.15.0 (release; linux; amd64) Content-Length : 1061 Content-Type : application/jose+json Accept-Encoding : gzip, deflate, br {"payload" : "" , "protected": {"alg": "RS256" , "kid": "https://acme-staging-v02.api.letsencrypt.org/acme/acct/123456789" , "nonce": "<nonce_24>" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/cert/xxxxXXXXxxxxXXXXxxxxXXXXxxxxXXXX" }, "signature" : "bE2kWcDPuwJ...ZNGgjUDY" }
Response
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
HTTP/2 200 OK Server : nginx Date : Mon, 15 Apr 2024 22:45:48 GMT Content-Type : application/pem-certificate-chain Content-Length : 4144 Cache-Control : public, max-age=0, no-cache Link : <https://acme-staging-v02.api.letsencrypt.org/directory>;rel="index" Link : <https://acme-staging-v02.api.letsencrypt.org/acme/cert/xxxxXXXXxxxxXXXXxxxxXXXXxxxxXXXX/1>;rel="alternate" Replay-Nonce : <nonce_25> X-Frame-Options : DENY Strict-Transport-Security : max-age=604800 --- --BEGIN CERTIFICATE----- MIIGPjCC...gYPhj1xAP5jqa --- --END CERTIFICATE----- --- --BEGIN CERTIFICATE----- MIIFWzCCA0...O1aw0PpQBPDQ== --- --END CERTIFICATE-----
POST /acme/cert/xxxxXXXXxxxxXXXXxxxxXXXXxxxxXXXX/1 Request
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
POST /acme/cert/xxxxXXXXxxxxXXXXxxxxXXXXxxxxXXXX/1 HTTP/2 Host : acme-staging-v02.api.letsencrypt.org User-Agent : containous-traefik/2.11.0 xenolf-acme/4.15.0 (release; linux; amd64) Content-Length : 1063 Content-Type : application/jose+json Accept-Encoding : gzip, deflate, br {"payload" : "" , "protected": {"alg": "RS256" , "kid": "https://acme-staging-v02.api.letsencrypt.org/acme/acct/123456789" , "nonce": "<nonce_25>" , "url": "https://acme-staging-v02.api.letsencrypt.org/acme/cert/xxxxXXXXxxxxXXXXxxxxXXXXxxxxXXXX/1" }, "signature" : "SWchkpGL7GUk...1zprNvJoVsAAIng" }
Response
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
HTTP/2 200 OK Server : nginx Date : Mon, 15 Apr 2024 22:45:49 GMT Content-Type : application/pem-certificate-chain Content-Length : 6052 Cache-Control : public, max-age=0, no-cache Link : <https://acme-staging-v02.api.letsencrypt.org/directory>;rel="index" Link : <https://acme-staging-v02.api.letsencrypt.org/acme/cert/xxxxXXXXxxxxXXXXxxxxXXXXxxxxXXXX/0>;rel="alternate" Replay-Nonce : <nonce_26> X-Frame-Options : DENY Strict-Transport-Security : max-age=604800 --- --BEGIN CERTIFICATE----- MIIGPj...BgYPhj1xAP5jqa --- --END CERTIFICATE----- --- --BEGIN CERTIFICATE----- MIIFWz...O1aw0PpQBPDQ== --- --END CERTIFICATE----- --- --BEGIN CERTIFICATE----- MIIFVD...0BPHtenfhKj5 --- --END CERTIFICATE-----
To view the certificate content, store the above response in a PEM file and run command:
while openssl x509 -noout -text; do :; done < cert.pem
Output:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Certificate : Data : Subject : CN=*.nas.mycustomservice.local.Info X509v3 extensions : X509v3 Subject Alternative Name : DNS:*.nas.mycustomservice.local, DNS:nas.mycustomservice.local, DNS:test1.test2.mycustomservice.local ... ... Certificate : Data : Subject : C=US, O=(STAGING) Let's Encrypt, CN=(STAGING) Artificial Apricot R3 ... Certificate : Data : Subject : C=US, O=(STAGING) Internet Security Research Group, CN=(STAGING) Pretend Pear X1 ...
Now check outRFC 8555 , you would be able to map these APIs and understand it very easily!
References RFC 8555: Automatic Certificate Management Environment (ACME) LEGO DNS Providers > Cloudflare (or,Github link )Cloudflare API