{"id":5543,"date":"2026-01-17T11:10:49","date_gmt":"2026-01-17T16:10:49","guid":{"rendered":"https:\/\/underhost.com\/blog\/?p=5543"},"modified":"2026-10-23T08:33:15","modified_gmt":"2026-10-23T12:33:15","slug":"ssl-for-public-ips-guide-to-lets-encrypt-without-a-domain","status":"publish","type":"post","link":"https:\/\/underhost.com\/blog\/ssl-for-public-ips-guide-to-lets-encrypt-without-a-domain\/","title":{"rendered":"SSL for Public IPs: Guide to Let&#8217;s Encrypt Without a Domain"},"content":{"rendered":"<p><!-- Hero Section --><\/p>\n<div class=\"uh-blog-hero\" style=\"margin:0 0 40px;text-align:center;padding:48px 24px;border-radius:20px;background:linear-gradient(135deg,#0D1F3C 0%,#125A8A 58%,#176EA5 100%);color:#ffffff;box-shadow:0 20px 40px -15px rgba(13,31,60,0.28);position:relative;overflow:hidden;\">\n<div style=\"display:inline-flex;align-items:center;gap:8px;padding:7px 14px;margin-bottom:16px;border:1px solid rgba(0,212,255,0.32);border-radius:999px;color:#DFF8FF;font-size:12px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;background:rgba(0,212,255,0.10);\"><i class=\"fas fa-globe\" style=\"color:#00D4FF;\"><\/i> Domains &amp; DNS<\/div>\n<h1 style=\"color:#ffffff;font-size:clamp(32px,5vw,46px);line-height:1.12;margin:0 0 14px;font-weight:800;\">SSL for Public IPs: The Complete 2026 Guide<\/h1>\n<p style=\"font-size:20px;font-weight:700;color:#DFF8FF;margin:0 auto 10px;max-width:800px;line-height:1.4;\">How to Get Let&#8217;s Encrypt Certificates Without a Domain Name<\/p>\n<p style=\"font-size: 1.2em; color: #555;\">Unlock secure, HTTPS-encrypted connections for your API gateways, staging servers, and internal tools using only a public IP address and SSH access.<\/p>\n<\/p>\n<\/div>\n<div class=\"uh-blog-excerpt\" style=\"border-left:4px solid #00D4FF;padding:18px 20px;margin:0 0 34px;background:#F8FAFC;color:#1F2937;border-radius:0 14px 14px 0;box-shadow:0 8px 28px rgba(13,31,60,0.08);line-height:1.75;\"><strong>For DevOps engineers and system administrators, the ability to secure a service at the IP level is a game-changer.<\/strong> Forget the complexities of DNS for internal projects. This definitive guide walks you through installing, configuring, and automating Let&#8217;s Encrypt IP-based SSL certificates on any Linux server with a public IP.<\/div>\n<div class=\"uh-post-content\" style=\"color:#1F2937;font-size:16px;line-height:1.75;\">\n<h2 id=\"why-ip-based-ssl-is-a-devops-essential\" style=\"color:#0D1F3C;font-size:28px;line-height:1.25;margin:34px 0 14px;scroll-margin-top:90px;\"><i class=\"fas fa-server\" style=\"color:#00D4FF;\"><\/i> Why IP-Based SSL is a DevOps Essential<\/h2>\n<p style=\"margin:0 0 18px;\">The need for encrypted traffic isn&#8217;t limited to public-facing websites with pretty domain names. Modern infrastructure relies heavily on secure, machine-to-machine communication where a domain name is an unnecessary abstraction. Think about:<\/p>\n<ul style=\"margin:0 0 24px;padding-left:22px;\">\n<li style=\"margin:0 0 8px;\"><strong>API Gateway Security:<\/strong> Securing backend APIs accessed directly by IP during development or within a private network segment.<\/li>\n<li style=\"margin:0 0 8px;\"><strong>Staging &amp; Testing Environments:<\/strong> Configuring HTTPS for pre-production servers before DNS records are pointed to them.<\/li>\n<li style=\"margin:0 0 8px;\"><strong>IoT &amp; Embedded Systems:<\/strong> Devices or appliances that have a public IP but no associated domain name require encryption for management interfaces.<\/li>\n<li style=\"margin:0 0 8px;\"><strong>Ephemeral Infrastructure:<\/strong> Containers or temporary cloud instances spun up for a specific task that need immediate, trusted SSL.<\/li>\n<\/ul>\n<p style=\"margin:0 0 18px;\">Historically, securing an IP required expensive, manually-issued certificates. The introduction of Let&#8217;s Encrypt&#8217;s IP certificate capability changed everything, but with a crucial caveat: <strong>6-day validity periods.<\/strong> This isn&#8217;t a limitation\u2014it&#8217;s a design feature for automation-first security, perfectly aligning with Infrastructure-as-Code (IaC) principles.<\/p>\n<div style=\"border-left:4px solid #00D4FF;padding:18px 20px;margin:24px 0;background:#F8FAFC;border-radius:0 14px 14px 0;line-height:1.75;\">\n<h3 style=\"margin:0 0 10px;color:#0D1F3C;font-size:20px;\">The UnderHost Infrastructure Advantage<\/h3>\n<p style=\"margin:0 0 18px;\">When you run this setup on an <a href=\"https:\/\/underhost.com\/cloud-vps.php\" style=\"color: #0D1F3C; font-weight: bold;\">UnderHost Cloud VPS<\/a> or <a href=\"https:\/\/underhost.com\/dedicated-servers-offshore.php\" style=\"color: #0D1F3C; font-weight: bold;\">Dedicated Server<\/a>, you&#8217;re building on a foundation of 10Gbps connectivity, enterprise-grade DDoS protection, and 99.9% uptime. Our global network ensures the HTTP-01 validation challenge\u2014essential for IP certificates\u2014is fast and reliable, removing a common point of failure.<\/p>\n<\/div>\n<h2 id=\"the-non-negotiable-prerequisites\" style=\"color:#0D1F3C;font-size:28px;line-height:1.25;margin:34px 0 14px;scroll-margin-top:90px;\"><i class=\"fas fa-clipboard-check\" style=\"color:#00D4FF;\"><\/i> The Non-Negotiable Prerequisites<\/h2>\n<p style=\"margin:0 0 18px;\">Success with IP-based SSL hinges on meeting specific server and network conditions. Let&#8217;s validate your environment.<\/p>\n<div style=\"background: #f0f8ff; padding: 20px; border-radius: 8px; margin: 20px 0; border: 1px solid #cfe2ff;\">\n<h3 style=\"margin:0 0 10px;color:#0D1F3C;font-size:20px;\"><i class=\"fas fa-list-check\"><\/i> Mandatory Checklist<\/h3>\n<ul style=\"margin:0 0 24px;padding-left:22px;\">\n<li style=\"margin:0 0 8px;\"><strong>&#x2705; Public, Routable IP:<\/strong> The IP must be publicly accessible on the internet. <strong>NAT, private IPs (like 10.x.x.x, 192.168.x.x), or cloud provider internal IPs will not work.<\/strong> Verify with:<br \/>\n<code style=\"background: #e9ecef; padding: 5px 10px; border-radius: 4px; display: inline-block; margin-top: 5px;\">curl -4 ifconfig.me<\/code><\/li>\n<li style=\"margin:0 0 8px;\"><strong>&#x2705; Open Ports 80 &amp; 443:<\/strong> Let&#8217;s Encrypt must validate your control over the IP via HTTP on port 80. Ensure your firewall (e.g., <code>ufw<\/code>, <code>firewalld<\/code>, <code>iptables<\/code>) allows inbound connections on these ports.<\/li>\n<li style=\"margin:0 0 8px;\"><strong>&#x2705; No Proxy\/CDN in Front:<\/strong> The validation request must hit your server directly. If you use Cloudflare (in proxy mode) or another CDN that terminates SSL before your IP, it will block validation.<\/li>\n<li style=\"margin:0 0 8px;\"><strong>&#x2705; Root or Sudo SSH Access:<\/strong> You need elevated privileges to install packages, stop\/start the web server, and modify its configuration.<\/li>\n<li style=\"margin:0 0 8px;\"><strong>&#x2705; Compatible OS:<\/strong> Ubuntu 20.04+, Debian 11+, AlmaLinux 8+, Rocky Linux 8+.<\/li>\n<\/ul>\n<\/div>\n<h2 id=\"step-by-step-installation-configuration-via-ssh\" style=\"color:#0D1F3C;font-size:28px;line-height:1.25;margin:34px 0 14px;scroll-margin-top:90px;\"><i class=\"fas fa-terminal\" style=\"color:#00D4FF;\"><\/i> Step-by-Step: Installation &amp; Configuration via SSH<\/h2>\n<p style=\"margin:0 0 18px;\">This is a hands-on walkthrough. Connect to your server via SSH and follow each step.<\/p>\n<h3 style=\"color:#0D1F3C;font-size:21px;line-height:1.3;margin:26px 0 10px;\">Step 1: Install Certbot<\/h3>\n<p style=\"margin:0 0 18px;\">The tool of choice is Certbot, the official Let&#8217;s Encrypt client.<\/p>\n<p style=\"margin:0 0 18px;\"><strong>For Ubuntu\/Debian:<\/strong><\/p>\n<pre style=\"background:#0D1F3C;color:#EAF6FF;padding:18px 20px;border-radius:14px;overflow-x:auto;line-height:1.7;font-size:15px;\">\r\n<code>sudo apt update &amp;&amp; sudo apt install -y certbot<\/code><\/pre>\n<p style=\"margin:0 0 18px;\"><strong>For AlmaLinux\/Rocky:<\/strong><\/p>\n<pre style=\"background:#0D1F3C;color:#EAF6FF;padding:18px 20px;border-radius:14px;overflow-x:auto;line-height:1.7;font-size:15px;\">\r\n<code>sudo dnf install -y epel-release\r\nsudo dnf install -y certbot<\/code><\/pre>\n<h3 style=\"color:#0D1F3C;font-size:21px;line-height:1.3;margin:26px 0 10px;\">Step 2: Temporarily Free Port 80<\/h3>\n<p style=\"margin:0 0 18px;\">Certbot&#8217;s &#8220;standalone&#8221; mode for IP validation needs to bind to port 80. You must stop your web server for a few seconds.<\/p>\n<pre style=\"background:#0D1F3C;color:#EAF6FF;padding:18px 20px;border-radius:14px;overflow-x:auto;line-height:1.7;font-size:15px;\">\r\n<code># For Nginx:\r\nsudo systemctl stop nginx\r\n\r\n# For Apache:\r\nsudo systemctl stop apache2   # or httpd on some systems<\/code><\/pre>\n<h3 style=\"color:#0D1F3C;font-size:21px;line-height:1.3;margin:26px 0 10px;\">Step 3: Request the Certificate<\/h3>\n<p style=\"margin:0 0 18px;\">Replace <code>YOUR_PUBLIC_IP<\/code> with your actual IP address. For an IPv6 address, use it directly without brackets in this command.<\/p>\n<pre style=\"background:#0D1F3C;color:#EAF6FF;padding:18px 20px;border-radius:14px;overflow-x:auto;line-height:1.7;font-size:15px;\">\r\n<code>sudo certbot certonly --standalone \\\r\n  --preferred-challenges http \\\r\n  --agree-tos \\\r\n  --register-unsafely-without-email \\\r\n  -d YOUR_PUBLIC_IP<\/code><\/pre>\n<p style=\"margin:0 0 18px;\">If successful, you&#8217;ll see a confirmation with the certificate paths. They will be in <code>\/etc\/letsencrypt\/live\/YOUR_PUBLIC_IP\/<\/code>.<\/p>\n<h3 style=\"color:#0D1F3C;font-size:21px;line-height:1.3;margin:26px 0 10px;\">Step 4: Configure Your Web Server<\/h3>\n<p style=\"margin:0 0 18px;\">Now, point your web server to the new certificate files. <strong>Restart your web server first:<\/strong> <code>sudo systemctl start nginx<\/code> (or <code>apache2<\/code>).<\/p>\n<p style=\"margin:0 0 18px;\"><strong>Nginx Configuration Snippet:<\/strong> Add this to your server block (e.g., in <code>\/etc\/nginx\/sites-available\/default<\/code> or a new file in <code>\/etc\/nginx\/conf.d\/<\/code>).<\/p>\n<pre style=\"background:#0D1F3C;color:#EAF6FF;padding:18px 20px;border-radius:14px;overflow-x:auto;line-height:1.7;font-size:15px;\">\r\n<code>server {\r\n    listen 443 ssl;\r\n    server_name YOUR_PUBLIC_IP; # Use your actual IP\r\n\r\n    ssl_certificate \/etc\/letsencrypt\/live\/YOUR_PUBLIC_IP\/fullchain.pem;\r\n    ssl_certificate_key \/etc\/letsencrypt\/live\/YOUR_PUBLIC_IP\/privkey.pem;\r\n\r\n    # ... your root, index, and other directives ...\r\n}<\/code><\/pre>\n<p style=\"margin:0 0 18px;\"><strong>Apache Configuration Snippet:<\/strong> Ensure the SSL module is enabled (<code>sudo a2enmod ssl<\/code>), then configure a virtual host.<\/p>\n<pre style=\"background:#0D1F3C;color:#EAF6FF;padding:18px 20px;border-radius:14px;overflow-x:auto;line-height:1.7;font-size:15px;\">\r\n<code>&lt;VirtualHost *:443&gt;\r\n    ServerName YOUR_PUBLIC_IP\r\n    SSLEngine on\r\n    SSLCertificateFile \/etc\/letsencrypt\/live\/YOUR_PUBLIC_IP\/fullchain.pem\r\n    SSLCertificateKeyFile \/etc\/letsencrypt\/live\/YOUR_PUBLIC_IP\/privkey.pem\r\n    # ... your DocumentRoot and other directives ...\r\n&lt;\/VirtualHost&gt;<\/code><\/pre>\n<p style=\"margin:0 0 18px;\">After editing, test your config (<code>sudo nginx -t<\/code> or <code>sudo apachectl configtest<\/code>) and reload (<code>sudo systemctl reload nginx<\/code> or <code>apache2<\/code>).<\/p>\n<h3 style=\"color:#0D1F3C;font-size:21px;line-height:1.3;margin:26px 0 10px;\">Step 5: Test the SSL Connection<\/h3>\n<pre style=\"background:#0D1F3C;color:#EAF6FF;padding:18px 20px;border-radius:14px;overflow-x:auto;line-height:1.7;font-size:15px;\">\r\n<code>curl -vI https:\/\/YOUR_PUBLIC_IP<\/code><\/pre>\n<p style=\"margin:0 0 18px;\">You should see the SSL handshake succeed. You can also visit <code>https:\/\/YOUR_PUBLIC_IP<\/code> in a browser (you&#8217;ll likely get a privacy warning because the IP is not a domain, but you can view the certificate details).<\/p>\n<h2 id=\"the-critical-step-automating-renewal-6-day-certs\" style=\"color:#0D1F3C;font-size:28px;line-height:1.25;margin:34px 0 14px;scroll-margin-top:90px;\"><i class=\"fas fa-robot\" style=\"color:#00D4FF;\"><\/i> The Critical Step: Automating Renewal (6-Day Certs)<\/h2>\n<p style=\"margin:0 0 18px;\">This is not optional. Let&#8217;s Encrypt IP certificates expire in <strong>6 days<\/strong>. Manual renewal is unsustainable. The solution is a cron job that renews daily.<\/p>\n<p style=\"margin:0 0 18px;\">First, create a renewal script that safely stops the web server, runs the renewal, and starts it again. The <code>certbot renew<\/code> command only renews certificates that are near expiry.<\/p>\n<pre style=\"background:#0D1F3C;color:#EAF6FF;padding:18px 20px;border-radius:14px;overflow-x:auto;line-height:1.7;font-size:15px;\">\r\n<code>sudo nano \/usr\/local\/bin\/le-ip-renew.sh<\/code><\/pre>\n<p style=\"margin:0 0 18px;\">Paste the following script:<\/p>\n<pre style=\"background:#0D1F3C;color:#EAF6FF;padding:18px 20px;border-radius:14px;overflow-x:auto;line-height:1.7;font-size:15px;\">\r\n<code>#!\/bin\/bash\r\n# Stop web server\r\nsystemctl stop nginx 2&gt;\/dev\/null || systemctl stop apache2 2&gt;\/dev\/null || systemctl stop httpd 2&gt;\/dev\/null\r\n\r\n# Renew certificates if they are due\r\ncertbot renew --quiet --non-interactive --post-hook \"systemctl start nginx 2&gt;\/dev\/null || systemctl start apache2 2&gt;\/dev\/null || systemctl start httpd 2&gt;\/dev\/null\"\r\n\r\n# Start web server (post-hook handles this, but this is a safety net)\r\nsystemctl start nginx 2&gt;\/dev\/null || systemctl start apache2 2&gt;\/dev\/null || systemctl start httpd 2&gt;\/dev\/null<\/code><\/pre>\n<p style=\"margin:0 0 18px;\">Make it executable and add a daily cron job:<\/p>\n<pre style=\"background:#0D1F3C;color:#EAF6FF;padding:18px 20px;border-radius:14px;overflow-x:auto;line-height:1.7;font-size:15px;\">\r\n<code>sudo chmod +x \/usr\/local\/bin\/le-ip-renew.sh\r\nsudo crontab -e<\/code><\/pre>\n<p style=\"margin:0 0 18px;\">Add this line to run the script daily at 3 AM (choose a low-traffic time):<\/p>\n<pre style=\"background:#0D1F3C;color:#EAF6FF;padding:18px 20px;border-radius:14px;overflow-x:auto;line-height:1.7;font-size:15px;\">\r\n<code>0 3 * * * \/usr\/local\/bin\/le-ip-renew.sh &gt; \/dev\/null 2&gt;&amp;1<\/code><\/pre>\n<h2 id=\"when-to-let-underhost-handle-it\" style=\"color:#0D1F3C;font-size:28px;line-height:1.25;margin:34px 0 14px;scroll-margin-top:90px;\"><i class=\"fas fa-headset\" style=\"color:#00D4FF;\"><\/i> When To Let UnderHost Handle It<\/h2>\n<p style=\"margin:0 0 18px;\">This guide empowers you to manage SSL for IPs yourself. However, if your time is better spent on core development, or you need this scaled across multiple servers, our <strong><a href=\"https:\/\/customerpanel.ca\/client\/store\/server-management\">UnderManagement<\/a><\/strong> service is the answer.<\/p>\n<div style=\"display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:18px;margin:28px 0;\">\n<div style=\"background:#ffffff;border:1px solid #E5E7EB;border-radius:16px;padding:22px;box-shadow:0 4px 12px rgba(13,31,60,0.08);\">\n<h3 style=\"margin:0 0 10px;color:#0D1F3C;font-size:20px;\">For the Hands-On DevOps<\/h3>\n<ul style=\"text-align: left; padding-left: 20px;\">\n<li>Follow the guide above.<\/li>\n<li>Leverage our <a href=\"https:\/\/underhost.com\/cloud-vps.php\">high-performance VPS<\/a> as your foundation.<\/li>\n<li>Use <a href=\"https:\/\/customerpanel.ca\/client\">@CustomerPanel<\/a> for any network or hardware queries.<\/li>\n<\/ul>\n<\/div>\n<div style=\"background:#ffffff;border:1px solid #E5E7EB;border-radius:16px;padding:22px;box-shadow:0 4px 12px rgba(13,31,60,0.08);\">\n<h3 style=\"margin:0 0 10px;color:#0D1F3C;font-size:20px;\">For Teams Focused on Scale<\/h3>\n<ul style=\"text-align: left; padding-left: 20px;\">\n<li>Offload SSL management entirely to our experts.<\/li>\n<li>Get 24\/7 monitoring, backup, and security hardening.<\/li>\n<li>Ideal for <a href=\"https:\/\/underhost.com\/dedicated-servers-offshore.php\">dedicated server<\/a> deployments.<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<p><!-- CTA Section --><\/p>\n<div aria-hidden=\"true\" class=\"uh-section-divider\" style=\"width:min(100% - 32px, 1080px);margin:44px auto;display:grid;grid-template-columns:1fr 32px 1fr;align-items:center;gap:18px;pointer-events:none;\"><span style=\"height:1px;background:linear-gradient(90deg,transparent,rgba(0,212,255,0.40),rgba(23,110,165,0.24),transparent);\"><\/span><img alt=\"\" decoding=\"async\" height=\"32\" loading=\"lazy\" src=\"https:\/\/cdn.underhost.com\/android-chrome-192x192.webp\" style=\"width:32px;height:32px;display:block;border-radius:8px;filter:drop-shadow(0 0 14px rgba(0,212,255,0.30));\" width=\"32\"\/><span style=\"height:1px;background:linear-gradient(90deg,transparent,rgba(23,110,165,0.24),rgba(0,212,255,0.40),transparent);\"><\/span><\/div>\n<div class=\"uh-blog-cta\" style=\"background:linear-gradient(135deg,#0D1F3C 0%,#125A8A 58%,#176EA5 100%);color:#ffffff;padding:36px 24px;border-radius:20px;text-align:center;margin:44px 0;box-shadow:0 20px 40px -15px rgba(13,31,60,0.32);\">\n<h2 style=\"margin:0 0 12px;font-size:28px;line-height:1.25;color:#ffffff;\">Build on a Secure, High-Performance Foundation<\/h2>\n<p style=\"font-size:17px;margin:0 auto 22px;color:#EAF6FF;max-width:720px;line-height:1.7;\">Whether you DIY or opt for full management, start with infrastructure you can trust.<\/p>\n<p><a href=\"https:\/\/underhost.com\/cloud-vps.php\" style=\"background:linear-gradient(90deg,#00D4FF,#0077FF);color:#ffffff;padding:13px 28px;border-radius:10px;text-decoration:none;font-weight:800;display:inline-block;margin:8px;\">Deploy a Cloud VPS<\/a><a href=\"https:\/\/customerpanel.ca\/client\/store\/server-management\" style=\"background:transparent;color:#ffffff;padding:12px 28px;border-radius:10px;text-decoration:none;font-weight:800;display:inline-block;margin:8px;border:1px solid rgba(255,255,255,0.32);\">Explore Managed Services<\/a><\/div>\n<p><!-- FAQ --><\/p>\n<div class=\"uh-faq-section\" id=\"faq\" style=\"margin:34px 0;scroll-margin-top:90px;\">\n<h2 style=\"color:#0D1F3C;font-size:28px;line-height:1.25;margin:0 0 18px;border-bottom:2px solid rgba(0,212,255,0.22);padding-bottom:10px;\">Frequently Asked Questions: SSL for IP Addresses<\/h2>\n<div style=\"margin-top:18px;background:#F8FAFC;padding:18px 20px;border-radius:14px;border:1px solid rgba(23,110,165,0.14);\">\n<h3 style=\"color:#0D1F3C;margin:0 0 8px;font-size:19px;\">Q: Can I get a wildcard certificate for an IP range?<\/h3>\n<p style=\"margin:0;color:#1F2937;line-height:1.7;\">No. Let&#8217;s Encrypt does not issue wildcard certificates for IP addresses. You must validate and obtain a certificate for each individual public IP address.<\/p>\n<\/div>\n<div style=\"margin-top:18px;background:#F8FAFC;padding:18px 20px;border-radius:14px;border:1px solid rgba(23,110,165,0.14);\">\n<h3 style=\"color:#0D1F3C;margin:0 0 8px;font-size:19px;\">Q: Why does my browser show a certificate warning?<\/h3>\n<p style=\"margin:0;color:#1F2937;line-height:1.7;\">A valid Let&#8217;s Encrypt certificate for an IP address is trusted by current browsers when you open <code>https:\/\/<\/code> followed by that exact IP. If you see a warning, check that you opened the same IP address that is in the certificate, that the certificate has not expired (IP certificates last only about six days, so renewal must work), and that the server sends the full certificate chain.<\/p>\n<\/div>\n<div style=\"margin-top:18px;background:#F8FAFC;padding:18px 20px;border-radius:14px;border:1px solid rgba(23,110,165,0.14);\">\n<h3 style=\"color:#0D1F3C;margin:0 0 8px;font-size:19px;\">Q: What if a firewall blocks port 80?<\/h3>\n<p style=\"margin:0;color:#1F2937;line-height:1.7;\">IP certificates cannot use DNS validation, because an IP address has no DNS zone. Certbot validates them over port 80 (HTTP-01). The TLS-ALPN-01 challenge on port 443 is the other option, but Certbot does not support it, so you would need another ACME client. If neither port can be opened, use a domain name that points to the IP and a normal certificate, which can be validated through DNS.<\/p>\n<\/div>\n<div style=\"margin-top:18px;background:#F8FAFC;padding:18px 20px;border-radius:14px;border:1px solid rgba(23,110,165,0.14);\">\n<h3 style=\"color:#0D1F3C;margin:0 0 8px;font-size:19px;\">Q: Does this work on UnderHost&#8217;s Offshore Servers?<\/h3>\n<p style=\"margin:0;color:#1F2937;line-height:1.7;\">Absolutely. The process is identical whether your <a href=\"https:\/\/underhost.com\/dedicated-servers-offshore.php\" style=\"color: #0D1F3C;\">offshore dedicated server<\/a> is in the Caribbean, Hong Kong or another of our locations, as long as port 80 is reachable from the internet for validation.<\/p>\n<\/div>\n<div style=\"margin-top:18px;background:#F8FAFC;padding:18px 20px;border-radius:14px;border:1px solid rgba(23,110,165,0.14);\">\n<h3 style=\"color:#0D1F3C;margin:0 0 8px;font-size:19px;\">Q: I hit an error during validation. What should I check?<\/h3>\n<p style=\"margin:0;color:#1F2937;line-height:1.7;\">First, triple-check the prerequisites: public IP, open port 80, no CDN. Then, look at the specific Certbot error. Common issues include another process (like a forgotten <code>certbot<\/code> instance) already using port 80, or a firewall rule on your server or at the datacenter level. Our support team via <a href=\"https:\/\/customerpanel.ca\/client\" style=\"color: #0D1F3C;\">@CustomerPanel<\/a> can assist with network-level diagnostics.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><script type=\"application\/ld+json\">{\"@context\": \"https:\/\/schema.org\", \"@type\": \"FAQPage\", \"mainEntity\": [{\"@type\": \"Question\", \"name\": \"Can I get a wildcard certificate for an IP range?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"No. Let's Encrypt does not issue wildcard certificates for IP addresses. You must validate and obtain a certificate for each individual public IP address.\"}}, {\"@type\": \"Question\", \"name\": \"Why does my browser show a certificate warning?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"A valid Let's Encrypt certificate for an IP address is trusted by current browsers when you open https:\/\/ followed by that exact IP. If you see a warning, check that you opened the same IP address that is in the certificate, that the certificate has not expired (IP certificates last only about six days, so renewal must work), and that the server sends the full certificate chain.\"}}, {\"@type\": \"Question\", \"name\": \"What if a firewall blocks port 80?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"IP certificates cannot use DNS validation, because an IP address has no DNS zone. Certbot validates them over port 80 (HTTP-01). The TLS-ALPN-01 challenge on port 443 is the other option, but Certbot does not support it, so you would need another ACME client. If neither port can be opened, use a domain name that points to the IP and a normal certificate, which can be validated through DNS.\"}}, {\"@type\": \"Question\", \"name\": \"Does this work on UnderHost's Offshore Servers?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Absolutely. The process is identical whether your offshore dedicated server is in the Caribbean, Hong Kong or another of our locations, as long as port 80 is reachable from the internet for validation.\"}}, {\"@type\": \"Question\", \"name\": \"I hit an error during validation. What should I check?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"First, triple-check the prerequisites: public IP, open port 80, no CDN. Then, look at the specific Certbot error. Common issues include another process (like a forgotten certbot instance) already using port 80, or a firewall rule on your server or at the datacenter level. Our support team via @CustomerPanel can assist with network-level diagnostics.\"}}]}<\/script><br \/>\n<!-- uh-related-start --><\/p>\n<div style=\"background:#F4F8FC;border:1px solid #DCE7F3;border-radius:14px;padding:18px 22px;margin:32px 0 8px;\">\n<h2 style=\"margin:0 0 12px;font-size:22px;\">Related guides<\/h2>\n<ul style=\"margin:0;padding-left:20px;\">\n<li style=\"margin:0 0 8px;\"><a href=\"https:\/\/underhost.com\/blog\/how-to-redirect-your-domain-to-a-subdirectory-without-creating-a-loop\/\">How to Redirect Your Domain to a Subdirectory Without Creating a Loop<\/a><\/li>\n<li style=\"margin:0 0 8px;\"><a href=\"https:\/\/underhost.com\/blog\/cpanel-tutorial-domains-parked-domains\/\">cPanel Tutorial: Domains &#8211; Parked Domains<\/a><\/li>\n<li style=\"margin:0 0 8px;\"><a href=\"https:\/\/underhost.com\/blog\/cpanel-tutorial-domains-addon-domains\/\">cPanel Tutorial: Domains &#8211; Addon Domains<\/a><\/li>\n<li style=\"margin:0 0 8px;\"><a href=\"https:\/\/underhost.com\/blog\/free-ssl-install-lets-encrypt-cpanel-centos-servers\/\">Free SSL: How to Get a Let&#8217;s Encrypt Certificate on cPanel and Linux Servers<\/a><\/li>\n<li style=\"margin:0 0 8px;\"><a href=\"https:\/\/underhost.com\/blog\/automatic-cpanel-backup-domain-mysql-with-cron-php\/\">Automatic cPanel Backups: A Safer Way to Schedule Them<\/a><\/li>\n<\/ul>\n<\/div>\n<p><!-- uh-related-end --><\/p>\n","protected":false},"excerpt":{"rendered":"<p>For DevOps engineers and system administrators, the ability to secure a service at the IP level is a game-changer. Forget DNS complexities for internal projects. This definitive guide walks you through installing, configuring, and automating Let&#8217;s Encrypt IP-based SSL certificates on any Linux server with a public IP.<\/p>\n","protected":false},"author":1,"featured_media":5436,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[82,81,25],"tags":[120,119,122,123,137,124],"class_list":["post-5543","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-domains-dns","category-hosting-guides","category-linux","tag-tag-cloud-vps","tag-tag-dedicated-servers","tag-tag-dns","tag-tag-domains","tag-tag-firewall","tag-tag-ssl"],"_links":{"self":[{"href":"https:\/\/underhost.com\/blog\/wp-json\/wp\/v2\/posts\/5543","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/underhost.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/underhost.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/underhost.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/underhost.com\/blog\/wp-json\/wp\/v2\/comments?post=5543"}],"version-history":[{"count":8,"href":"https:\/\/underhost.com\/blog\/wp-json\/wp\/v2\/posts\/5543\/revisions"}],"predecessor-version":[{"id":6793,"href":"https:\/\/underhost.com\/blog\/wp-json\/wp\/v2\/posts\/5543\/revisions\/6793"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/underhost.com\/blog\/wp-json\/wp\/v2\/media\/5436"}],"wp:attachment":[{"href":"https:\/\/underhost.com\/blog\/wp-json\/wp\/v2\/media?parent=5543"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/underhost.com\/blog\/wp-json\/wp\/v2\/categories?post=5543"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/underhost.com\/blog\/wp-json\/wp\/v2\/tags?post=5543"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}