This plugin is based on the strato-certbot by Buxdehuda.
flixma / certbot-dns-strato Goto Github PK
View Code? Open in Web Editor NEWAllows for completing ACME challenges with strato.de domain names.
License: MIT License
Allows for completing ACME challenges with strato.de domain names.
License: MIT License
This plugin is based on the strato-certbot by Buxdehuda.
RegEx to search for package ID does not work in my sitiation.
See following image of my Strato UI:
There are two domains under one package. And in HTML I see data-sortValue="xxx.me"
. However if I need to update second doman (xxx.online
), it will never find it.
HTML for this kind of UI looks like this:
<td data-label="Auftragsnummer">1234567 </td>
<td data-label="Kennung" data-sortValue="xxx.me">
<div id="package_information_1234567" class="package-information">
<p>xxx.me </p>
<p>xxx.online </p>
<p class="toggle mb-2 text-primary">
<span class="show-more">
<i class="fa fa-caret-right"></i>
alle anzeigen
</span>
<span class="show-less">
<i class="fa fa-caret-up"></i>
weniger anzeigen
</span>
</p>
</div>
</td>
<td>
<div class="btn-group" role="group">
<div class="dropdown">
<button type="button" class="btn btn-default dropdown-toggle" data-bs-toggle="dropdown" type="button" aria-expanded="false">
<i class="fa fa-ellipsis-h"></i>
</button>
<label id="dLabel" class="d-none">Dropdown fuer Aktionen </label>
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="dLabel">
<li>
<a class="dropdown-item" href="/apps/CustomerService?sessionID=abc123&cID=1&node=kds_Vertragsbetreuung_2">
<i class="fa fa-cubes"></i>
Ihr Paket
</a>
</li>
<li>
<a class="dropdown-item" href="/apps/CustomerService?sessionID=abc123&cID=1&node=DomainOverview">
<i class="fa fa-globe"></i>
Domains verwalten
</a>
</li>
<li>
<a class="dropdown-item" href="/apps/CustomerService?sessionID=abc123&cID=1&node=EMailManagement">
<i class="fa fa-envelope"></i>
E-Mails verwalten
</a>
</li>
<li>
<a class="dropdown-item" href="/apps/CustomerService?sessionID=abc123&cID=1&node=DomainSearch">
<i class="fa fa-plus"></i>
Domains bestellen
</a>
</li>
<li>
<a class="dropdown-item" href="/apps/CustomerService?sessionID=abc123&cID=1&node=PackageChange&type=upgrade">
<i class="fa fa-arrow-up"></i>
Paket upgraden
</a>
</li>
<li>
<a class="dropdown-item piwik_eventtracker" data-piwik-category="cancelation_dropdown_package" data-piwik-action="CustomerEntryPage" href="/apps/CustomerService?sessionID=abc123&cID=0&node=Cancelation&action_select_package=1234567">
<i class="fa fa-file-text"></i>
Paket kündigen
</a>
</li>
</ul>
</div>
</div>
</td>
I was getting 403 on login for both GET and POST for https://www.strato.de/apps/CustomerService
.
<html>
<head>
<title>STRATO - Access denied</title>
<meta charset="utf-8" />
</head>
<body style="background-color: #fff; font-family: Open Sans, sans-serif; padding: 0; margin: 0;">
<div style="background-color: #f3f3f3; padding: 40px 0; width: 100%;">
<div style="width: 150px; margin-left: auto; margin-right: auto;">
<a href="https://www.strato.de" rel="nofollow" style="border: 0;">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 157.4 33.7"><defs><style>.a{fill:#f80;}.b{fill:#f80;}</style></defs><title>STRATO</title><path class="a" d="M17.8,7a4.69,4.69,0,0,1-4.7-4.7H29.6A4.69,4.69,0,0,1,34.3,7V23.5a4.69,4.69,0,0,1-4.7-4.7V9.4A2.37,2.37,0,0,0,27.2,7Z" transform="translate(-1.3 -2.3)"/><path class="b" d="M57.7,32.9c-1.3,2.5-4.7,2.6-7.3,2.6-2.1,0-4-.1-5.2-.2-1.5-.1-1.8-.5-1.8-1.3V32.9c0-1.3.2-1.7,1.4-1.7,2.1,0,3.1.2,6.2.2,2.4,0,2.9-.2,2.9-2.3,0-2.4,0-2.5-1.3-3.1a42.2,42.2,0,0,0-4.5-1.8c-3.7-1.6-4.4-2.3-4.4-6.5,0-2.6.5-4.8,3.4-5.7a14,14,0,0,1,4.9-.6c1.6,0,2.5.1,4,.2s1.8.5,1.8,1.3V14c0,1.3-.2,1.7-1.4,1.7s-1.4-.2-6.3-.2c-2,0-2,.8-2,2.5,0,1.3,0,1.6,1.3,2.1.9.5,2,.8,2.9,1.3,4.9,2.1,6,2.5,6,6.7a10.12,10.12,0,0,1-.6,4.8M77.1,15.7c-2.1,0-3.7,0-5.2-.1v18a1.4,1.4,0,0,1-1.5,1.6H69c-1.1,0-1.7-.3-1.7-1.6V15.7c-1.5,0-3.2.1-5.3.1-1.5,0-1.5-.9-1.5-1.6v-.9A1.36,1.36,0,0,1,62,11.8H77.2c.8,0,1.5.2,1.5,1.5v.9c-.1.6-.2,1.5-1.6,1.5M97.2,35.2H95.1a2.46,2.46,0,0,1-2.2-.9l-6-7.6H85.8v7a1.4,1.4,0,0,1-1.5,1.6H82.8c-1.1,0-1.7-.3-1.7-1.6V13.2c0-1.4.9-1.5,1.7-1.5h6.5c3.7,0,4.7.2,6.1,1.6s1.8,3.6,1.8,6.7c0,2.9-.8,4.7-2.3,5.7a4.58,4.58,0,0,1-2.4.8L97.8,33c.8.9,1,2.2-.6,2.2M91.6,16a12.74,12.74,0,0,0-2.8-.2,28.12,28.12,0,0,0-3,.1v6.9h4c1.3,0,2-.2,2.3-.7a3.88,3.88,0,0,0,.5-2.3c-.1-1.6-.2-3.4-1-3.8m28.6,19.2h-2a1.48,1.48,0,0,1-1.6-1.3L115,29.5h-8.3l-1.4,4.1c-.3.9-.6,1.5-1.8,1.5h-1.6c-1.1,0-1.4-.3-1.4-.8a6.53,6.53,0,0,1,.2-1.1L108,13a1.84,1.84,0,0,1,2.1-1.6h1.5c1.3,0,1.7.5,2.1,1.6l7.6,20.5a1.08,1.08,0,0,1,.1.6c0,1-.7,1.1-1.2,1.1m-9.5-17.6L107.8,26h5.6Zm25.4-1.9c-2.1,0-3.7,0-5.2-.1v18a1.4,1.4,0,0,1-1.5,1.6H128c-1.1,0-1.7-.3-1.7-1.6V15.7c-1.5,0-3.2.1-5.3.1-1.5,0-1.5-.9-1.5-1.6v-.9a1.36,1.36,0,0,1,1.5-1.5h15.2c.8,0,1.5.2,1.5,1.5v.9c-.1.6-.2,1.5-1.6,1.5m20,17.3c-1.7,2.1-4,3-7.5,3-3.3,0-5.7-.9-7.5-3-2.1-2.5-2.6-5.9-2.6-9.5s.6-7.1,2.6-9.5c1.7-2.1,4.1-3,7.5-3s5.7.9,7.5,3c2.1,2.5,2.6,5.9,2.6,9.5s-.6,7.1-2.6,9.5M153,17.4c-.8-1.6-2.4-2.3-4.4-2.3s-3.6.6-4.4,2.3c-.7,1.5-.8,4.4-.8,6.1s.1,4.6.8,6.1,2.4,2.3,4.4,2.3,3.6-.7,4.4-2.3.8-4.2.8-6.1-.1-4.6-.8-6.1" transform="translate(-1.3 -2.3)"/><path class="a" d="M24.9,14a2.26,2.26,0,0,0-2.3-2.3H3.6A2.26,2.26,0,0,0,1.3,14V32.7A2.26,2.26,0,0,0,3.6,35H22.4a2.26,2.26,0,0,0,2.3-2.3C24.8,32.7,24.9,14,24.9,14Z" transform="translate(-1.3 -2.3)"/></svg>
</a>
</div>
</div>
<div style="color:#333;font-size: 18px; max-width: 60ch; margin-left: auto; margin-right: auto; padding: 60px 24px;">
<div style="padding-bottom: 30px" lang="en">
<span style="font-size: 14px; color: #777; font-weight: bold;">English</span>
<br>
For security reasons, we are unable to grant access from your network to this site.
</div>
<div style="padding-bottom: 30px" lang="de">
<span style="font-size: 14px; color: #777; font-weight: bold;">Deutsch</span>
<br>
Aus Sicherheitsgründen können wir leider den Zugriff auf diese Seite aus Ihrem Netzwerk nicht erlauben.
</div>
<div style="padding-bottom: 30px" lang="es">
<span style="font-size: 14px; color: #777; font-weight: bold;">Español</span>
<br>
Lamentablemente, por razones de seguridad, no podemos permitir el acceso a esta página desde su red.
</div>
<div style="padding-bottom: 30px" lang="nl">
<span style="font-size: 14px; color: #777; font-weight: bold;">Nederlands</span>
<br>
Om veiligheidsredenen kunnen wij helaas geen toegang tot deze pagina toestaan vanaf uw netwerk.
</div>
<div style="padding-bottom: 30px" lang="fr">
<span style="font-size: 14px; color: #777; font-weight: bold;">Français</span>
<br>
Pour des raisons de sécurité, nous ne pouvons malheureusement pas autoriser l'accès à cette page depuis votre réseau.
</div>
<div style="padding-bottom: 30px" lang="sv">
<span style="font-size: 14px; color: #777; font-weight: bold;">Svenska</span>
<br>
Av säkerhetsskäl kan vi tyvärr inte tillåta åtkomst till den här sidan från ditt nätverk.
</div>
</div>
<div style="padding: 40px 0 250px 0; width: 100%; color: #fff; background-color: #ff8800; font-size: 16px; text-align: center;">
<a href="https://www.strato.de" rel="nofollow" style="color: #fff; text-decoration: none;">Powered by STRATO</a>
</div>
</body>
</html>
Started to debug and found that providing User-Agent
fixes and issue.
self.http_session = requests.session()
self.http_session.headers.update({
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36'
})
When requesting wildcard certificates for my .de domain, i´m running into issues. The cert request just aborts, with no visible error message. This problem only comes up for .de domains, found my .com and .eu domains from same strato account are working fine. Any idea, what could block me here?
Using Nginx Proxy Manager v2.11.1, certbot-dns-strato v0.2.1
2024-05-02 16:18:38,612:DEBUG:certbot._internal.main:certbot version: 2.1.0
2024-05-02 16:18:38,612:DEBUG:certbot._internal.main:Location of certbot entry point: /usr/bin/certbot
2024-05-02 16:18:38,612:DEBUG:certbot._internal.main:Arguments: ['--config', '/etc/letsencrypt.ini', '--work-dir', '/tmp/letsencrypt-lib', '--logs-dir', '/tmp/letsencrypt-log', '--cert-name', 'npm-52', '--agree-tos', '--email', '[email protected]', '--domains', 'domain.de', '--authenticator', 'dns-strato', '--dns-strato-credentials', '/etc/letsencrypt/credentials/credentials-52']
2024-05-02 16:18:38,612:DEBUG:certbot._internal.main:Discovered plugins: PluginsRegistry(PluginEntryPoint#dns-cloudflare,PluginEntryPoint#dns-duckdns,PluginEntryPoint#dns-porkbun,PluginEntryPoint#dns-strato,PluginEntryPoint#manual,PluginEntryPoint#null,PluginEntryPoint#standalone,PluginEntryPoint#webroot)
2024-05-02 16:18:38,619:DEBUG:certbot._internal.log:Root logging level set at 30
2024-05-02 16:18:38,619:DEBUG:certbot._internal.plugins.selection:Requested authenticator dns-strato and installer None
2024-05-02 16:18:38,620:DEBUG:certbot._internal.plugins.selection:Single candidate plugin: * dns-strato
Description: Obtain certificates using a DNS TXT record (if you are using Strato for DNS).
Interfaces: Authenticator, Plugin
Entry point: dns-strato = certbot_dns_strato.dns_strato:Authenticator
Initialized: <certbot_dns_strato.dns_strato.Authenticator object at 0x7e703bb94090>
Prep: True
2024-05-02 16:18:38,620:DEBUG:certbot._internal.plugins.selection:Selected authenticator <certbot_dns_strato.dns_strato.Authenticator object at 0x7e703bb94090> and installer None
2024-05-02 16:18:38,620:INFO:certbot._internal.plugins.selection:Plugins selected: Authenticator dns-strato, Installer None
2024-05-02 16:18:38,658:DEBUG:certbot._internal.main:Picked account: <Account(RegistrationResource(body=Registration(key=None, contact=(), agreement=None, status=None, terms_of_service_agreed=None, only_return_existing=None, external_account_binding=None), uri='https://acme-v02.api.letsencrypt.org/acme/acct/1598501227', new_authzr_uri=None, terms_of_service=None), 307c450e4e4c8df29a05c7f1e282d970, Meta(creation_dt=datetime.datetime(2024, 3, 2, 14, 50, 24, tzinfo=<UTC>), creation_host='reverse-proxy.localdomain', register_to_eff=None))>
2024-05-02 16:18:38,658:DEBUG:acme.client:Sending GET request to https://acme-v02.api.letsencrypt.org/directory.
2024-05-02 16:18:39,085:DEBUG:acme.client:Received response:
HTTP 200
Server: nginx
Date: Thu, 02 May 2024 14:18:39 GMT
Content-Type: application/json
Content-Length: 747
Connection: keep-alive
Cache-Control: public, max-age=0, no-cache
X-Frame-Options: DENY
Strict-Transport-Security: max-age=604800
{
"OCi65trDFA8": "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"
],
"termsOfService": "https://letsencrypt.org/documents/LE-SA-v1.4-April-3-2024.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/draft-ietf-acme-ari-02/renewalInfo/",
"revokeCert": "https://acme-v02.api.letsencrypt.org/acme/revoke-cert"
}
2024-05-02 16:18:39,086:DEBUG:certbot._internal.display.obj:Notifying user: Requesting a certificate for domain.de
2024-05-02 16:18:39,097:DEBUG:certbot.crypto_util:Generating ECDSA key (2048 bits): /etc/letsencrypt/keys/0064_key-certbot.pem
2024-05-02 16:18:39,107:DEBUG:certbot.crypto_util:Creating CSR: /etc/letsencrypt/csr/0064_csr-certbot.pem
2024-05-02 16:18:39,110:DEBUG:acme.client:Requesting fresh nonce
2024-05-02 16:18:39,111:DEBUG:acme.client:Sending HEAD request to https://acme-v02.api.letsencrypt.org/acme/new-nonce.
2024-05-02 16:18:39,251:DEBUG:acme.client:Received response:
HTTP 200
Server: nginx
Date: Thu, 02 May 2024 14:18:39 GMT
Connection: keep-alive
Cache-Control: public, max-age=0, no-cache
Link: <https://acme-v02.api.letsencrypt.org/directory>;rel="index"
Replay-Nonce: O0afatDIUYo_tvD0qKgcSxmqX1tK9R_NX45BGoQ8WT4UCWOsn-U
X-Frame-Options: DENY
Strict-Transport-Security: max-age=604800
2024-05-02 16:18:39,252:DEBUG:acme.client:Storing nonce: O0afatDIUYo_tvD0qKgcSxmqX1tK9R_NX45BGoQ8WT4UCWOsn-U
2024-05-02 16:18:39,252:DEBUG:acme.client:JWS payload:
b'{\n "identifiers": [\n {\n "type": "dns",\n "value": "domain.de"\n }\n ]\n}'
2024-05-02 16:18:39,260:DEBUG:acme.client:Sending POST request to https://acme-v02.api.letsencrypt.org/acme/new-order:
{
"protected": "eyJhbGciOiAiUlMyNTYiLCAia2lkIjogImh0dHBzOi8vYWNtZS12MDIuYXBpLmxldHNlbmNyeXB0Lm9yZy9hY21lL2FjY3QvMTU5ODUwMTIyNyIsICJub25jZSI6ICJPMGFmYXRESVVZb190dkQwcUtnY1N4bXFYMXRLOVJfTlg0NUJHb1E4V1Q0VUNXT3NuLVUiLCAidXJsIjogImh0dHBzOi8vYWNtZS12MDIuYXBpLmxldHNlbmNyeXB0Lm9yZy9hY21lL25ldy1vcmRlciJ9",
"signature": "TNaLqp0iX0oneAfzg9KFPB5WFMIwk-983BR1hw2ProTI74Str79_tfoXWjx40wIBPFiIG5eQkohC93KrX6iPNFIo9se4OlTJwpYxolUYDehXtyY6yULfpOMXQBcDUxkUARB0cW5ERoyRVz16CHi8oiCxOkYGRwB3St_EOPCYPKNAxAiRSjT-hb4ONIe_9iSRcgeDBGfqwrp104cRnNJB9qVPVOCpqtoM9WzX5pF9TIY6pKI-uX47FPQR9fcZ3_lbFm53a5Iz9Byt7_Bav1wKvZmZf_noK3u66AAHMjSg05bb3hqS2FoJqR1TB0Kc4YIPF_BSX_3CA-ronONwE4dfhA",
"payload": "ewogICJpZGVudGlmaWVycyI6IFsKICAgIHsKICAgICAgInR5cGUiOiAiZG5zIiwKICAgICAgInZhbHVlIjogIndvbGV3aWVuc2tpLmRlIgogICAgfQogIF0KfQ"
}
2024-05-02 16:18:39,414:DEBUG:acme.client:Received response:
HTTP 201
Server: nginx
Date: Thu, 02 May 2024 14:18:39 GMT
Content-Type: application/json
Content-Length: 340
Connection: keep-alive
Boulder-Requester: 1598501227
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/1598501227/265980151337
Replay-Nonce: Y_7AIQuUkd3e3_rcDcX4pgPvzO4_O7YtbF9-GNnBAG3kkijVcoA
X-Frame-Options: DENY
Strict-Transport-Security: max-age=604800
{
"status": "pending",
"expires": "2024-05-09T14:10:50Z",
"identifiers": [
{
"type": "dns",
"value": "domain.de"
}
],
"authorizations": [
"https://acme-v02.api.letsencrypt.org/acme/authz-v3/345790981617"
],
"finalize": "https://acme-v02.api.letsencrypt.org/acme/finalize/1598501227/265980151337"
}
2024-05-02 16:18:39,415:DEBUG:acme.client:Storing nonce: Y_7AIQuUkd3e3_rcDcX4pgPvzO4_O7YtbF9-GNnBAG3kkijVcoA
2024-05-02 16:18:39,415:DEBUG:acme.client:JWS payload:
b''
2024-05-02 16:18:39,417:DEBUG:acme.client:Sending POST request to https://acme-v02.api.letsencrypt.org/acme/authz-v3/345790981617:
{
"protected": "eyJhbGciOiAiUlMyNTYiLCAia2lkIjogImh0dHBzOi8vYWNtZS12MDIuYXBpLmxldHNlbmNyeXB0Lm9yZy9hY21lL2FjY3QvMTU5ODUwMTIyNyIsICJub25jZSI6ICJZXzdBSVF1VWtkM2UzX3JjRGNYNHBnUHZ6TzRfTzdZdGJGOS1HTm5CQUcza2tpalZjb0EiLCAidXJsIjogImh0dHBzOi8vYWNtZS12MDIuYXBpLmxldHNlbmNyeXB0Lm9yZy9hY21lL2F1dGh6LXYzLzM0NTc5MDk4MTYxNyJ9",
"signature": "PNZq4tTE50GX_sy3ClPHI4W9tjzlHLWdvZEpCcHHVUfNxTFCGFPXQNLV-XApHrRlhytrTU6GhuVR7l378zqCOV2z4r5nXQe75t0ZqEeHJ-HE70PGhV6uD3bdpNhKdGSpZ4jmEV50oWUpWEL_AG-WjJx4E_5KV5BC3Xlno-0i9OYRlQqTmi4eki2_8NQAmJMfZliUoqiukSLyuLk126OJqGVdhiiF7Q2G4i36e1VH9VbyadoLbtfv3OAn87dJjpFJM_TBVb2X9HsA_0NnUIFp8YTYOimmRRA4--PZdlFfND0KSR4TdPlDeQoiKnlAJ-fVeA7eXyvybYqYJwyONpUWZw",
"payload": ""
}
2024-05-02 16:18:39,553:DEBUG:acme.client:Received response:
HTTP 200
Server: nginx
Date: Thu, 02 May 2024 14:18:39 GMT
Content-Type: application/json
Content-Length: 798
Connection: keep-alive
Boulder-Requester: 1598501227
Cache-Control: public, max-age=0, no-cache
Link: <https://acme-v02.api.letsencrypt.org/directory>;rel="index"
Replay-Nonce: O0afatDI0RLN73rcITo_-Hrn3IjJ_80RKuQsTqncpUMtaf7q9jk
X-Frame-Options: DENY
Strict-Transport-Security: max-age=604800
{
"identifier": {
"type": "dns",
"value": "domain.de"
},
"status": "pending",
"expires": "2024-05-09T14:10:50Z",
"challenges": [
{
"type": "http-01",
"status": "pending",
"url": "https://acme-v02.api.letsencrypt.org/acme/chall-v3/345790981617/e0m2DA",
"token": "-4gozKMezPVXlBOFkulRMXBDmxXUlwEYdnkEjx8gSak"
},
{
"type": "dns-01",
"status": "pending",
"url": "https://acme-v02.api.letsencrypt.org/acme/chall-v3/345790981617/coLV5g",
"token": "-4gozKMezPVXlBOFkulRMXBDmxXUlwEYdnkEjx8gSak"
},
{
"type": "tls-alpn-01",
"status": "pending",
"url": "https://acme-v02.api.letsencrypt.org/acme/chall-v3/345790981617/2sm9nQ",
"token": "-4gozKMezPVXlBOFkulRMXBDmxXUlwEYdnkEjx8gSak"
}
]
}
2024-05-02 16:18:39,553:DEBUG:acme.client:Storing nonce: O0afatDI0RLN73rcITo_-Hrn3IjJ_80RKuQsTqncpUMtaf7q9jk
2024-05-02 16:18:39,554:INFO:certbot._internal.auth_handler:Performing the following challenges:
2024-05-02 16:18:39,555:INFO:certbot._internal.auth_handler:dns-01 challenge for domain.de
Only difference i found is, that .de domain is trying way more challenges and stays on status "pending" compared to .com. But all domais are routed to my homelab via dyndns and can be used/pinged & i have used the exact same credentials for both.
HTTP 200
Server: nginx
Date: Thu, 02 May 2024 14:18:39 GMT
Content-Type: application/json
Content-Length: 798
Connection: keep-alive
Boulder-Requester: 1598501227
Cache-Control: public, max-age=0, no-cache
Link: <https://acme-v02.api.letsencrypt.org/directory>;rel="index"
Replay-Nonce: O0afatDI0RLN73rcITo_-Hrn3IjJ_80RKuQsTqncpUMtaf7q9jk
X-Frame-Options: DENY
Strict-Transport-Security: max-age=604800
{
"identifier": {
"type": "dns",
"value": "domain.de"
},
"status": "pending",
"expires": "2024-05-09T14:10:50Z",
"challenges": [
{
"type": "http-01",
"status": "pending",
"url": "https://acme-v02.api.letsencrypt.org/acme/chall-v3/345790981617/e0m2DA",
"token": "-4gozKMezPVXlBOFkulRMXBDmxXUlwEYdnkEjx8gSak"
},
{
"type": "dns-01",
"status": "pending",
"url": "https://acme-v02.api.letsencrypt.org/acme/chall-v3/345790981617/coLV5g",
"token": "-4gozKMezPVXlBOFkulRMXBDmxXUlwEYdnkEjx8gSak"
},
{
"type": "tls-alpn-01",
"status": "pending",
"url": "https://acme-v02.api.letsencrypt.org/acme/chall-v3/345790981617/2sm9nQ",
"token": "-4gozKMezPVXlBOFkulRMXBDmxXUlwEYdnkEjx8gSak"
}
]
}
2024-05-02 16:18:39,553:DEBUG:acme.client:Storing nonce: O0afatDI0RLN73rcITo_-Hrn3IjJ_80RKuQsTqncpUMtaf7q9jk
2024-05-02 16:18:39,554:INFO:certbot._internal.auth_handler:Performing the following challenges:
2024-05-02 16:18:39,555:INFO:certbot._internal.auth_handler:dns-01 challenge for domain.de
HTTP 200
Server: nginx
Date: Thu, 02 May 2024 15:07:11 GMT
Content-Type: application/json
Content-Length: 572
Connection: keep-alive
Boulder-Requester: 1598501227
Cache-Control: public, max-age=0, no-cache
Link: <https://acme-v02.api.letsencrypt.org/directory>;rel="index"
Replay-Nonce: O0afatDIdLAdBXwvNoaYXhbL05VSQ_hxdNdTa93qwsZcu146X04
X-Frame-Options: DENY
Strict-Transport-Security: max-age=604800
{
"identifier": {
"type": "dns",
"value": "domain.com"
},
"status": "valid",
"expires": "2024-06-01T14:08:39Z",
"challenges": [
{
"type": "dns-01",
"status": "valid",
"url": "https://acme-v02.api.letsencrypt.org/acme/chall-v3/345789827577/3hjyKg",
"token": "YIgmMMYgKo7si214ERMxND-lVFb80uxq2TIMyoeHJ4k",
"validationRecord": [
{
"hostname": "domain.com",
"resolverAddrs": [
"10.1.12.85:30182"
]
}
],
"validated": "2024-05-02T14:08:39Z"
}
]
}
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.