Install free SSL in cPanel and force HTTPS
Every domain on our cPanel hosting gets a free certificate from AutoSSL. This guide gets it issued, sends every visitor to the https:// address and clears the mixed-content warnings that keep the padlock from appearing. The one thing to know first: AutoSSL can only issue once your domain points to our server.
Before you start
- Your domain points to VirtualCloud, by nameservers or an A record. If it doesn't yet, follow Point your domain to VirtualCloud first.
- Your cPanel login, or open cPanel straight from the client area.
- For WordPress: an administrator login and a recent backup, because one step changes the site address.
Step 1: Check SSL/TLS Status and run AutoSSL
AutoSSL runs once a day on its own: it requests, installs and renews a certificate for every name in your account that points to the server. You only need to confirm it worked, or nudge it right after changing DNS.
-
Open SSL/TLS Status
Go to cPanelSecuritySSL/TLS Status. Every name in your account is listed, including the service subdomains cPanel creates for you (
mail.,webmail.,cpanel.and others).SSL/TLS StatusAutoSSL is onDomainExpiresCertificate statusyourdomain.in12 May 2027AutoSSL Domain Validatedwww.yourdomain.in12 May 2027AutoSSL Domain Validatedshop.yourdomain.in—Self-signed: not trustedmail.yourdomain.in12 May 2027AutoSSL Domain ValidatedRun AutoSSLExclude Domains from AutoSSLExample. A green "Domain Validated" status means that name is covered. Here, a new subdomain is still on a self-signed certificate. -
Click Run AutoSSL
Use this if a name shows no certificate, a self-signed one or an error, or if you've only just pointed the domain at us. The check takes a minute or two for a small account. Leave the page open, then reload it when it finishes.
-
Read the result for each name
Green means issued and installed. If a name still fails, expand its status to see why; usually that name doesn't resolve to our server yet. The next section covers every requirement.
Don't need a name covered? Untick it and click Exclude Domains from AutoSSL. This is useful for a subdomain whose DNS lives elsewhere, which would otherwise show a failed check every day.
What AutoSSL needs before it can issue
The certificate authority must be able to confirm the domain is yours. It does that by fetching a small file from the website (HTTP validation) or reading a DNS record (DNS validation, when your nameservers are ours). Each item below breaks that check; during a free migration from your old host, the first one applies until DNS is switched.
| Requirement | How to check | Fix |
|---|---|---|
| The name resolves to our server | The DNS lookup tool shows your cPanel IP for both yourdomain.in and www | Add or correct the A record (or CNAME for www) |
| CAA records allow the issuer | dig CAA returns nothing, or includes the issuing CA | Add a CAA issue record for the CA, or remove the old CAA set |
| Validation file is reachable | /.well-known/ isn't blocked, redirected away or behind a login | Exclude /.well-known/ from custom redirects and security rules |
| No proxy in front during first issue | Cloudflare shows a grey cloud, not orange | Pause the proxy until issued, then use Full (strict) |
From a terminal, the same checks take ten seconds:
# Both names must return your server's IP
dig +short A yourdomain.in @1.1.1.1
dig +short A www.yourdomain.in @1.1.1.1
# Empty output is fine. If records come back, the issuing CA must be listed
dig +short CAA yourdomain.in
If you do publish CAA records, for example because a security audit asked for them, they must name every authority that issues for you, or AutoSSL is refused. AutoSSL uses Let's Encrypt or Sectigo depending on the server, so listing both is the safe choice:
yourdomain.in. 3600 IN CAA 0 issue "letsencrypt.org"
yourdomain.in. 3600 IN CAA 0 issue "sectigo.com"
Step 2: Send every visitor to HTTPS
A certificate only protects visitors who arrive on https://. Old links, bookmarks and people typing the bare domain still land on http:// until you add a permanent (301) redirect. Use one of these two methods, not both.
A. The cPanel toggle
Quickest, and right for most sites. Go to cPanelDomainsDomains and switch on Force HTTPS Redirect for each domain. The toggle only becomes available once a valid certificate covers that domain.
B. An .htaccess rule
Use this when you also want a single canonical address (with or without www), or your site's own rules need to run in a set order. Edit .htaccess in the site's folder with cPanelFilesFile Manager.
For option B, put this block at the very top of .htaccess, above any # BEGIN WordPress section. It leaves /.well-known/ alone, so renewals keep validating:
# Redirect all HTTP traffic to HTTPS (301)
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/\.well-known/
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Want one canonical address as well? This version sends http://, http://www. and https://www. straight to https://yourdomain.in in a single hop. Use it in place of the block above, not alongside it:
# HTTPS and no-www in one redirect
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/\.well-known/
RewriteCond %{HTTPS} !=on [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301]
Step 3: Switch WordPress to its https:// address
WordPress stores its own address and builds every link from it, so a redirect alone leaves it generating http:// links. Change the address once, then update the links already saved in your posts.
-
Change both addresses in Settings
In WordPressSettingsGeneral, change WordPress Address (URL) and Site Address (URL) to https://yourdomain.in and save. You'll be logged out once; log back in on the new address. If both fields are greyed out, they're fixed in
wp-config.php. Edit them there instead:define( 'WP_HOME', 'https://yourdomain.in' ); define( 'WP_SITEURL', 'https://yourdomain.in' ); -
Update links stored in your content
Images and internal links in older posts still contain
http://. With SSH access, WP-CLI rewrites them safely, including inside serialised data. Run it from the site's folder and check the dry run first:# Preview: shows how many replacements each table would get wp search-replace 'http://yourdomain.in' 'https://yourdomain.in' \ --skip-columns=guid --dry-run # Apply, then clear caches wp search-replace 'http://yourdomain.in' 'https://yourdomain.in' \ --skip-columns=guid wp cache flushNo SSH? A search-and-replace plugin does the same job from wp-admin. Never run a plain SQL
REPLACEon WordPress tables, because it corrupts serialised settings. -
Purge the page cache
Cached pages still hold the old links. In LiteSpeed CacheToolboxPurge, click Purge All, then load the site in a private window.
Clear mixed-content warnings
If the page loads over HTTPS but the padlock is missing or crossed out, something on the page is still requested over http://: an image, a font, a script or a stylesheet. Browsers block insecure scripts outright and flag the rest.
-
Find the culprits
Open the page, press F12 (or Cmd + Option + I on a Mac) and look in the Console tab for lines starting with Mixed Content. Each line names the exact URL.
-
Fix them where they live
Usual hiding places are theme options (logo and background images), custom HTML or footer widgets, hard-coded URLs in a child theme's CSS, and third-party embed codes copied years ago. Change each one to
https://. If the third party doesn't offer HTTPS, replace the embed. -
Use a safety net while you clean up
This header asks browsers to upgrade any leftover
http://requests on your pages. Add it to.htaccess. It hides the symptom, so still fix the source URLs:<IfModule mod_headers.c> Header always set Content-Security-Policy "upgrade-insecure-requests" </IfModule>
How you know you're done. http://yourdomain.in lands on https:// with one redirect, the padlock shows on your home page, a post with images and your checkout or contact page, and the Console has no Mixed Content lines.
Renewals, and when a paid certificate makes sense
Public certificates are getting shorter by industry rule (CA/Browser Forum ballot SC-081): at most 200 days from 15 March 2026, 100 days from March 2027 and 47 days from March 2029. With AutoSSL that changes nothing for you. It checks daily and renews well before expiry, as long as the domain keeps pointing to our server and nothing blocks /.well-known/.
The free certificate encrypts traffic exactly as well as a paid one. Pay only when you need something AutoSSL doesn't give you:
| You need | Free AutoSSL | Paid option (per year, + GST) |
|---|---|---|
| HTTPS for sites hosted with us | Yes, every domain and subdomain | Not needed |
| One certificate for any subdomain, including future ones | Issued per name, once each resolves | DV Wildcard, ₹6,499 |
| Your company name verified in the certificate | No, domain only | OV ₹4,999 · EV ₹12,999 |
| A certificate for another server, app or load balancer | No, it stays on our servers | DV from ₹799 |
Paid certificates are bought as 1–3 year subscriptions with free reissues during the term. See SSL certificates for what each type covers.
AutoSSL troubleshooting
AutoSSL covers my domain but not www (or mail)
That name has no DNS record pointing to us. Add an A record for www (or a CNAME to yourdomain.in), and an A record for mail if you use our email. Wait for the record to show in the DNS lookup tool, then click Run AutoSSL again.
The browser says "too many redirects"
Two rules are sending visitors in a loop. The classic cause is Cloudflare's Flexible SSL mode: it talks to our server over HTTP, our server redirects to HTTPS, and round it goes. Set Cloudflare's SSL/TLS mode to Full (strict). Otherwise, check for both the cPanel toggle and an .htaccess rule, or a redirect plugin, and keep only one.
The padlock shows on the home page but not on some posts
Those pages have mixed content: usually an image inserted with a full http:// address, or an old embed. Run the WP-CLI search-replace from Step 3, purge the cache and check the Console again.
An expired certificate is still being served
A manually installed certificate, often a paid one from a previous host, can stay attached to the domain. Open cPanelSecuritySSL/TLSManage SSL sites, uninstall the expired certificate, then run AutoSSL. If you're moving a still-valid paid certificate, our team can install it for you.
AutoSSL fails with a CAA error
Your domain publishes CAA records that don't list the issuing authority. Add the two issue records shown under requirements at whichever DNS provider hosts your zone, or remove CAA records you no longer need. DNS records explained covers where each record lives.
Was this guide helpful?Your answer stays in this browser; nothing is sent unless you write to us below.
Related guides
All 16 guidesStill stuck? Ask an engineer.
Tickets and email are answered 24/7 in English and Hindi. Tell us the domain and paste the exact message from SSL/TLS Status, and we'll take it from there.