Ondersteunen jullie de DNS-01 challenge type van Acme voor Let's Encrypt aanvragen vanuit een externe server?
Ik wil graag een letsencrypt licentie aanvragen voor een server die niet bij Vimexx staat, maar waarop ik liever poort 80 niet wil openen. De beste oplossing zou dan zijn om de DNS-01 challenge type te gebruiken, maar dat kan alleen automatisch als de dns provider (hier: vimexx) een api heeft om geautomatiseerd dns records aan te passen.
Onderwerp: ACME DNS-01 Ondersteuning?
Op https://my.vimexx.nl/api kan je een WHMCS API project aanmaken. Je krijgt dan een client_id en client_secret. Hiermee kan je een access_token voor api.vimexx.nl aanvragen:
curl -X POST https://api.vimexx.nl/auth/token \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'grant_type=password&client_id=client_id&client_secret=client_secret&username=vimexx_username&password=vimexx_password&scope=whmcs-access'
Je krijgt dan een access_token en geldigheid terug:
{"token_type":"Bearer","expires_in":31536000,"access_token":"ey........", "refresh_token":"....."}
Met de API kan je DNS-records opvragen en aanpassen:
curl -X POST https://api.vimexx.nl/api/v1/whmcs/domain/dns \
-H 'Authorization: Bearer ey........' \
-H 'Content-Type: application/json' \
-d '{"body":{"sld":"example","tld":"nl"},"version":"8.4.0-release.1"}'
{
"message": "ok",
"result": true,
"data": {
"dns_records": [
{
"name": "www.example.nl.",
"type": "A",
"content": "185.104.29.1",
"prio": null
},
{
"name": "smtp.example.nl.",
"type": "A",
"content": "185.104.29.1",
"prio": null
}
]
}
}Met PUT kan je de records updaten:
curl -X PUT https://api.vimexx.nl/api/v1/whmcs/domain/dns \
-H 'Authorization: Bearer ey........' \
-H 'Content-Type: application/json' \
-d '{
"body":{
"sld": "example",
"tld": "nl",
"dns_records": [
{
"name": "www.example.nl.",
"type": "A",
"content": "185.104.29.1",
"prio": null
},
{
"name": "smtp.example.nl.",
"type": "A",
"content": "185.104.29.1",
"prio": null
},
{
"name": "_acme-challenge.example.nl.",
"type": "TXT",
"content": "abcdefghijklmnopqrstuvwxyz0123456789",
"prio": null
}
]
},
"version": "8.4.0-release.1"
}'Let op: je moet ook alle bestaande records mee sturen, anders worden ze verwijderd
Een makkelijkere manier:
Voeg een CNAME record toe op je domein bij Vimexx naar een domein wat wel ondersteund wordt:
_acme-challenge.example.com IN CNAME _acme-challenge.aliasDomainForValidationOnly.com.
Met acme.sh kan je dan een certificaat aanvragen via die alias:
https://github.com/acmesh-official/acme.sh/wiki/DNS-alias-mode
Is er een plan binnen Vimexx om de DNS-01 challenge api van acme.sh (Let's Encrypt) te ondersteunen?
Alias mode werkt helaas niet als al mijn domeinen bij Vimexx zitten.
De WHMCS API is voor zover ik heb kunnen ontdekken niet geschikt om zelf deze dnsapi te bouwen. De POST call levert bijvoorbeeld niet de correcte informatie om daarna een update via PUT te doen. En eigenlijk is het voor dnsapi ook niet wenselijk om eerst de dns records op te moeten vragen voor een update van een txt record.
Ondersteunt Vimexx acme-challenge in DirectAdmin?. voorbeeld :
_acme-challenge.gouden.nangsuurian.com. "Ybadfdfad0Q8F_7J0ghC1PyG_mHniE9GTdE9VRtg"
Ik probeer het vaak, maar nooit succes.
Als je een hosting pakket hebt bij Vimexx (en daar het domein aan gehangen hebt) dan worden de DNS entries beheerd door DirectAdmin. Persoonlijk gebruik ik Nginx Proxy Manager (NPM) als reverse proxy. Deze heeft voor de DNS challenge een DirectAdmin provider. Dat is een plugin die hier in Python gemaakt is. Als je handig bent met HTTP requests / APIs en een beetje Python kan lezen is het vrij eenvoudig uit te vogelen en na te maken in andere programmeertalen.
De synchronisatie tussen DirectAdmin en de daadwerkelijke DNS entries lijkt vrij traag, daarom kreeg ik het in eerste instantie niet voor elkaar. De 'magic sauce' is dat je in NPM de propagation seconds moet aanpassen. Ik heb hem aangepast naar 10800 (3 uur), en dat lijkt stabiel te werken.
Als je 2FA hebt ingeschakeld voor DirectAdmin moet je ook een login key maken met de rechten CMD_API_DNS_CONTROL en CMD_API_SHOW_DOMAINS.
De gebruikersnaam is dan je eigen DirectAdmin username en het wachtwoord de login key.Daarmee moet het mogelijk zijn om in NPM een wildcard cert aan te vragen via DNS-01.