Let's Encrypt DomainFactory

Sommige shared hostingpakketten met cPanel bieden geen AutoSSL aan of bieden deze alleen tegen hogere tarieven aan. Het resultaat: u kunt geen gratis Let's Encrypt-certificaat uitgeven via de cPanel-interface en alle domeinen zitten vast op een zelfondertekend certificaat. De browser geeft de pagina weer als ‘niet beveiligd’. De uitweg: haal zelf het certificaat op met acme.sh en installeer het via de cPanel UAPI - automatisch vernieuwend, zonder AutoSSL.


HTTPS is al lange tijd verplicht. Het is dan ook des te frustrerender wanneer 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 van je abonnement waarbij een certificaat plotseling niet meer is inbegrepen. Deze lacune kan echter elegant en permanent worden opgelost met slechts een paar regels code in de shell – het volledige proces wordt hieronder beschreven.

1. Log in via SSH

ssh -p <port> <user>@example.com

2. Installeer acme.sh

curl https://get.acme.sh | sh -s email=me@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 UAPI naar de juiste vHost. De implementatie-instelling wordt opgeslagen - vanaf nu vernieuwt en installeert de cron alles onafhankelijk voordat deze verloopt. De uitgever is “Let’s Encrypt” en de vervaldatum ligt ongeveer 90 dagen in de toekomst. Als in plaats daarvan het oude, zelfondertekende certificaat verschijnt, helpt meestal een harde herlaadbeurt in de browser - het vorige certificaat kan tijdelijk worden opgeslagen.

Sommige hostingproviders beheren hun eigen cPanel-hook. install_ssl en antwoordt met zoiets als adminbin Cpanel/hooks2/...: exit 255. acme.sh rapporteert nog steeds “succesvol geïmplementeerd” – en dat klopt. In dit geval mislukt de hook vanwege een volgende stap (bijvoorbeeld een interne meldings- of synchronisatietaak van de host), en niet vanwege de daadwerkelijke installatie.

Voor domeinen met umlauten slaat acme.sh het certificaat intern op in de Punycode-vorm (xn--…), terwijl de auto-matcher van de hook het Unicode-formulier vergelijkt. Resultaat: “geïmplementeerd op 0 van 0 sites” – er is niets geïnstalleerd. Het lastige is dat acme.sh hier ook “Succes” rapporteert, waardoor de fout gemakkelijk over het hoofd wordt gezien. Oplossing: Werk rechtstreeks met het Punycode-domein en schakel de automatische modus uit:

python3 -c "import sys;print(sys.argv[1].encode('idna').decode())" hallöle.de
acme.sh --issue -d xn--hallle-zxa.de -d www.xn--hallle-zxa.de -w ~/public_html
export DEPLOY_CPANEL_AUTO_ENABLED='false'
acme.sh --deploy -d xn--hallle-zxa.de --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