Let's Encrypt DomainFactory

Sommige shared hostingpakketten met cPanel bieden geen AutoSSL aan, of alleen in de duurdere abonnementen. Hierdoor kunt u geen gratis Let's Encrypt-certificaat aanvragen via de cPanel-interface en blijven alle domeinen verbonden aan een zelfondertekend certificaat. De browser geeft de pagina dan weer als 'niet beveiligd'. De oplossing: verkrijg zelf het certificaat met acme.sh en installeer het via de cPanel UAPI. Het certificaat wordt dan automatisch verlengd, zonder dat AutoSSL nodig is.


HTTPS is tegenwoordig verplicht: des te frustrerender is het dan ook als je eigen hostingpakket geen handige manier biedt om een gratis certificaat te verkrijgen. Dit gebeurt vaker dan je denkt – bijvoorbeeld bij goedkope instappakketten of na een wijziging in je abonnement waarbij een certificaat plotseling niet meer is inbegrepen. Deze lacune kan echter elegant en permanent worden opgevuld met slechts een paar regels code in de shell – het volledige proces wordt hieronder beschreven.

1. Log in via SSH

ssh -p <port> <cpanel-user>@<host>

2. Installeer acme.sh

curl https://get.acme.sh | sh -s email=du@example.com
source ~/.bashrc

3. Stel Let's Encrypt in als de certificeringsinstantie (CA).

acme.sh --set-default-ca --server letsencrypt

4. Certificaat uitreiken

acme.sh --issue -d example.com -d www.example.com -w ~/public_html

5. Installeren in cPanel

acme.sh --deploy -d example.com --deploy-hook cpanel_uapi

6. Controleer

uapi SSL installed_hosts
echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null \
     | openssl x509 -noout -issuer -dates

De hook schrijft het certificaat via de UAPI naar de juiste virtuele host. De implementatie-instellingen worden opgeslagen – vanaf nu zal cron alles automatisch vernieuwen en installeren vóór de vervaldatum. De uitgever moet "Let's Encrypt" zijn en de vervaldatum moet ongeveer 90 dagen in de toekomst liggen. Als het oude, zelfondertekende certificaat nog steeds wordt weergegeven, helpt een harde herlaadactie in de browser meestal – het vorige certificaat is mogelijk tijdelijk in de cache opgeslagen.

Sommige hostingproviders beheren hun eigen cPanel-hook. install_ssl en antwoordt met zoiets als adminbin Cpanel/hooks2/...: exit 255. acme.sh meldt nog steeds "succesvol geïmplementeerd" – en dat klopt meestal. In dit geval mislukt de hook door een volgende stap, zoals een interne notificatie of synchronisatietaak van de hostingprovider, en niet door de daadwerkelijke installatie.

Voor domeinen met umlauten slaat acme.sh het certificaat intern op in de Punycode-vorm (xn--…), terwijl de automatische matcher van de hook de Unicode-vorm vergelijkt. Resultaat: "uitgerold naar 0 van 0 sites" – er wordt niets geïnstalleerd. Het lastige is dat acme.sh hier ook "Succes" meldt, waardoor de fout gemakkelijk over het hoofd wordt gezien. Oplossing: werk direct met het Punycode-domein en schakel automatische matching uit.:

# Punycode-Form der Domain vorher ermitteln (z. B. via idn-Tool oder Online-Konverter)
acme.sh --issue -d xn--<punycode> -d www.xn--<punycode> -w ~/public_html
export DEPLOY_CPANEL_AUTO_ENABLED='false'
acme.sh --deploy -d xn--<punycode> --deploy-hook cpanel_uapi

Met SSH-toegang heb je geen AutoSSL nodig: acme.sh geeft het certificaat uit, dat cpanel_uapiDe -Hook installeert het, en de meegeleverde cronjob zorgt ervoor dat het automatisch wordt bijgewerkt. Eenmaal ingesteld, draait de gratis HTTPS-service continu op zichzelf. Wie de initiële inspanning levert, bespaart zich alle handmatige verlengingen in de toekomst – en kan dezelfde oplossing met één commando uitbreiden naar elk extra domein in hetzelfde account.

Terug