SSL certificate
Certbot for hosting that won’t let you run certbot. Type your domains, put one small file on the site, and take home the certificate, the key and the CA bundle.
Your browser talks straight to Let’s Encrypt; nothing goes through this site. The private key is made in this tab and never leaves it.
- 1Domains
- 2Proof
- 3Certificate
One per line. Up to 100 names on one certificate. Wildcards like *.example.com need the DNS proof.
A file needs the site to answer on port 80 already. A DNS record works for wildcards and for sites that aren’t live yet.
RSA works with every panel. ECDSA is smaller and faster.
Staging is a rehearsal: same steps, a fake untrusted certificate, much higher limits.
Put each file on the site so it opens at the address shown: a file named like the long token, no extension, one line of text inside. Then press Verify.
Add a TXT record for each name below. Some DNS panels add the domain themselves; then the name is just _acme-challenge (or _acme-challenge.www).
Unzip it in the web root: the .well-known/acme-challenge folders are already inside. In cPanel, upload the zip in File Manager and press Extract.
Have a terminal on the server?
Run this in the web root instead of uploading:
Certificate
This certifies that the following names belong to whoever holds the key:
Save the private key now. It was made in this tab and exists nowhere else: not on my server, not at Let’s Encrypt. Close the tab and it’s gone.
certificate.crtprivate.keyca_bundle.crtfullchain.pemFor Nginx and Apache 2.4: one file instead of CRT + CABUNDLE.
No reminder email will come: Let’s Encrypt stopped sending them. Put one in your calendar for about two months from now and come back.
- Must open at
- http://
- File name
- Contents
- Name
- Type
TXT- Value
How to use it
- Type the domains the certificate should cover, one per line. Add the
www.name too if people use it. - Pick how to prove the domains are yours: Upload a file (the site must already answer on port 80) or Add a DNS record (needed for wildcards like
*.example.com). - Press Get the challenge. For files, download the zip and unzip it in your web root (
public_html,www,htdocs), or download each file into.well-known/acme-challenge/. For DNS, add each TXT record. - Open each link to check that it shows the line of text, then press Verify. Let’s Encrypt fetches the files itself.
- Download the certificate, the private key and the CA bundle, and paste them into your hosting panel. Save the key before you close the tab.
What it does
This is the same ACME conversation certbot has with Let’s Encrypt, written as a small client that runs in this page. Let’s Encrypt’s API accepts requests from browsers, so the page talks to it directly: it creates an account key, orders a certificate, shows you the proof Let’s Encrypt asks for, tells it to check, and signs the certificate request when the check passes. Paid “free SSL” services like PunchSalad do the same steps; the certificate is the same Let’s Encrypt one.
What goes where, exactly. Let’s Encrypt gets your domain names, the public key and the signed request, which it would get from certbot too. The private key is generated with the browser’s Web Crypto API and never sent anywhere; open the Network tab and you will only see requests to acme-v02.api.letsencrypt.org. An unfinished order is kept in this tab’s sessionStorage so a reload while you upload files doesn’t lose it; closing the tab clears it. Check DNS is the one extra request: it asks Google Public DNS (dns.google) for the TXT record.
Limits, honestly. Let’s Encrypt certificates last 90 days (and are getting shorter over the next few years), and nothing here renews them. Put a reminder in the calendar for about day 60 and come back, or, if you can get a shell, let certbot do it: the SSL guide covers both, and if your host has an AutoSSL button, press that instead. Failed checks count against a limit of five per name per hour, so use Staging to rehearse: it runs the whole thing with a fake certificate and generous limits.
The downloads are named the way hosting panels ask for them. In cPanel’s SSL/TLS → Manage SSL sites, certificate.crt goes in CRT, private.key in KEY and ca_bundle.crt in CABUNDLE. Nginx wants ssl_certificate fullchain.pem; and ssl_certificate_key private.key;. Apache 2.4 takes SSLCertificateFile fullchain.pem and SSLCertificateKeyFile private.key.
Questions
Why did the check fail?
Read the message under the name, it quotes what Let’s Encrypt saw. A 404 means the file is not where it looked: wrong folder (it has to be the web root of that exact domain), or the file got a .txt extension on the way. A 403 is usually a security plugin or an .htaccess rule blocking dot-folders. Timeouts mean port 80 is closed. And a classic: if the domain has an AAAA (IPv6) record pointing at an old server, Let’s Encrypt checks that one first. Redirects to https are fine, it follows them.
Can I get a wildcard certificate?
Yes, with the DNS method only: a file can prove one host, a DNS record proves the whole zone. Add both example.com and *.example.com if you want the bare domain too. Both get a TXT record on the same name, _acme-challenge.example.com, so that name ends up with two values. That is expected; add both.
RSA or ECDSA?
RSA 2048 is the safe default: every panel, server and old client takes it. ECDSA P-256 keys are smaller and handshakes are faster, and nearly everything made in the last decade supports them. If your panel rejects the key, issue again with RSA.
The folder disappeared after I unzipped it on a Mac.
It is there, just hidden: macOS hides names that start with a dot, like .well-known. Press Cmd Shift . in Finder to show it, or upload the zip itself and extract it on the server (cPanel’s File Manager has an Extract button).
Is a free Let’s Encrypt certificate as good as a paid one?
For encryption, yes. The padlock is the same, and so is the TLS connection behind it. Let’s Encrypt only issues domain-validated (DV) certificates: they prove you control the domain and nothing more. Paid OV and EV certificates also check the company, but browsers stopped showing the company name in the address bar years ago, so visitors can’t tell. What the money buys is mostly fewer renewals, support, and a warranty you will probably never claim.