{"id":3350,"date":"2024-02-10T20:13:21","date_gmt":"2024-02-10T20:13:21","guid":{"rendered":"https:\/\/code2deploy.com\/?p=3350"},"modified":"2024-04-28T04:36:25","modified_gmt":"2024-04-28T04:36:25","slug":"wildcard-domain-ssl-integration","status":"publish","type":"post","link":"https:\/\/code2deploy.com\/blog\/wildcard-domain-ssl-integration\/","title":{"rendered":"Wildcard Domain SSL Integration"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">How to configure a free single Let\u2019s Encrypt SSL\/TLS wildcard Certificate with NGINX<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Prerequisites<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Have NGINX or NGINX Plus installed.<\/li>\n\n\n\n<li>Own or control the registered domain name for the certificate.<\/li>\n\n\n\n<li>Create a DNS record that associates your domain name and your server\u2019s public IP address.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Reference:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/devopspilot.com\/content\/nginx\/tutorials\/01-how-to-install-nginx\">How to install nginx<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/devopspilot.com\/content\/https\/freenom\/how-to-purchase-a-free-domain-using-freenom\">How to purchase a free domain using freenom<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/devopspilot.com\/content\/https\/freenom\/how-to-add-a-dns-record-in-freenom-domain\">How to add a DNS record in freenom domain registrar<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/devopspilot.com\/content\/https\/letsencrypt\/how-to-configure-free-letsencrypt-ssl-tls-certificates-with-nginx\">How to configure Free Let\u2019s Encrypt SSL\/TLS Certificates with NGINX<\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">What is certbot<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Certbot is a agent for letsencrypt that runs in a server to complete the letsencrypt challenge, request a certificate and get a certificate.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What is Letsencrypt challenge<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Letsencrypt want to verify that you own the domain. So using certbot it will host some files in \/.well-known\/acme-challenge\/ folder and serve this files publicly using nginx webserver.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Once it verifies the files, the challenge is completed and it will issue the certificate for the requested domain.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">what is wildcard certificate<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Wildcard certificate is a SSl\/TLS certificate generated commonly for all subdomains.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If we dont know the subdomain to be used while generating the certificate. You can generate the wildcard certificate and we can configure any subdomain using this wildcard certificate.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Eg. We will generate certificate for domain name *.devopspilot.tk and later we can use this certificate to configure any subdomains like app1.devopspilot.tk app2.devopspilot.tk app3.devopspilot.tk<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How to install cerbot<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>sudo apt-get update<br>sudo apt-get install certbot<br>sudo apt-get install python3-certbot-nginx<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Create some sample application<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">To test wildcard certificate, we need some sample applications. Lets create one docker containers with sample python flask application.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>docker run -d -e APP_COLOR=red -p 8081:5000 vigneshsweekaran\/helloworld-flask:latest<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Now we created one docker container which runs on port 8081<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Now open the browser and verify the applications are running.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">IP-address:8081 \u2013&gt; Should show background color as red<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/code2deploy.com\/wp-content\/uploads\/2024\/02\/image-1.png\" alt=\"letsencrypt\" class=\"wp-image-3352\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Configure DNS record in Domain registrar<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">app1.devopspilot.tk \u2013&gt; Public IP-address<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/code2deploy.com\/wp-content\/uploads\/2024\/02\/image-3.png\" alt=\"letsencrypt\" class=\"wp-image-3354\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Note :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Public IP-address \u2013&gt; Public IP-address of your server, where docker container is running.<\/li>\n\n\n\n<li>Make sure ports 8081 is open.<\/li>\n\n\n\n<li>Replace devopspilot.tk with your domain name.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Generate certificate<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">For wildcard certificate we cannot use nginx plugin, since acme-challenge will not be completed by nginx.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For wildcard certificate we have to use dns challenge to complete the verification.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">While generating the certificate it will generate one token, we have to add that token as TXT DNS record in domain registrar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lets run the below command to generate the certificate<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>sudo certbot certonly &#8211;manual &#8211;preferred-challenges=dns -d *.devopspilot.tk<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">It will ask for email address, agree the terms and conditions, copy the token and add the token as TXT record in domain registrar with sub domain as acme-challenge and then press Enter to continue and the certificate will be issued.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Note:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If you are using freenom domain registrar, wait for 5 minutes before pressing ENTER after adding the TXT DNS record.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/code2deploy.com\/wp-content\/uploads\/2024\/02\/image-5.png\" alt=\"letsencrypt\" class=\"wp-image-3356\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/code2deploy.com\/wp-content\/uploads\/2024\/02\/image.png\" alt=\"letsencrypt\" class=\"wp-image-3351\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/code2deploy.com\/wp-content\/uploads\/2024\/02\/image-4.png\" alt=\"letsencrypt\" class=\"wp-image-3355\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Configure Nginx<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Remove the default configuration file in nginx<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>sudo rm -f \/etc\/nginx\/sites-enabled\/default<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Create a new config file devopspilot.tk.conf in \/etc\/nginx\/conf.d\/ folder and put the following content<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Info:<\/strong> Configuration file name can be anything<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>sudo vi \/etc\/nginx\/conf.d\/devopspilot.tk.conf<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Replace devopspilot.tk with your domain name in config file<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>server {<br>&nbsp; &nbsp; server_name app1.devopspilot.tk;<br>&nbsp; &nbsp; location \/ {<br>&nbsp; &nbsp; &nbsp; &nbsp; proxy_pass http:\/\/localhost:8081;<br>&nbsp; &nbsp; }<br>&nbsp; &nbsp; listen 443 ssl;<br>&nbsp; &nbsp; ssl_certificate \/etc\/letsencrypt\/live\/devopspilot.tk\/fullchain.pem;<br>&nbsp; &nbsp; ssl_certificate_key \/etc\/letsencrypt\/live\/devopspilot.tk\/privkey.pem;<br>}<br>server {<br>&nbsp; &nbsp; if ($host = app1.devopspilot.tk) {<br>&nbsp; &nbsp; &nbsp; &nbsp; return 301 https:\/\/$host$request_uri;<br>&nbsp; &nbsp; }<br>&nbsp; &nbsp; listen 80;<br>&nbsp; &nbsp; server_name app1.devopspilot.tk;<br>&nbsp; &nbsp; return 404;<br>}<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Run the following command to check for syntax error in conf file<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>sudo nginx -t<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Output :<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">nginx: the configuration file \/etc\/nginx\/nginx.conf syntax is ok<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">nginx: configuration file \/etc\/nginx\/nginx.conf test is successful<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Run the following command to reload the nginx webserver<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>nginx -s reload<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Wait for couple of minutes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Go to browser and type http:\/\/app1.devopspilot.tk<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Now it will automatically redirect to https:\/\/app1.devopspilot.tk<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/code2deploy.com\/wp-content\/uploads\/2024\/02\/image-2.png\" alt=\"letsencrypt\" class=\"wp-image-3353\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Letsencrypt certificates will expire after 3 months.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Since we have generated the ssl certificate using &#8211;manual argument we cannot automatically renew the certificate.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If we want to automatically renew the certificates we have to use the domain-registrar plugin while generating the certificate.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I have used freenom domain registrar, that is not supported by letsencrpt as a plugin to automate the DNS record challenge.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you have used Godady, AWS Route53, Google Domains you can use the letsencrypt plugin to automate this.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Renew Process:&nbsp;<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\/usr\/bin\/certbot certonly \\<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&#8211;manual \\<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&#8211;preferred-challenges=dns \\<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&#8211;email test@gmail.com \\<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&#8211;server https:\/\/acme-v02.api.letsencrypt.org\/directory \\<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&#8211;agree-tos \\<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00a0\u00a0\u00a0\u00a0-d &#8216;*.devopspilot.tk&#8217;\u00a0<\/p>\n","protected":false},"excerpt":{"rendered":"<p>How to configure a free single Let\u2019s Encrypt SSL\/TLS wildcard Certificate with NGINX Prerequisites Reference: What is certbot Certbot is a agent for letsencrypt that runs in a server to complete the letsencrypt challenge, request a certificate and get a certificate. What is Letsencrypt challenge Letsencrypt want to verify that you own the domain. So [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[129,134,16,103,102,101,105,104,128,20,22],"tags":[17,18,19,21,23,24],"class_list":["post-3350","post","type-post","status-publish","format-standard","hentry","category-application-security","category-authentication-and-authorization","category-certification","category-cloudpanel","category-cpanel","category-domain","category-droplet","category-ec2","category-network-security","category-cyber-security","category-web-hositing","tag-domain","tag-lets-encrypt","tag-nginx","tag-ssl","tag-web-hosting","tag-wildcard-domain"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Wildcard Domain SSL Integration - code2deploy.com<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.code2deploy.com\/wildcard-domain-ssl-integration\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Wildcard Domain SSL Integration - code2deploy.com\" \/>\n<meta property=\"og:description\" content=\"How to configure a free single Let\u2019s Encrypt SSL\/TLS wildcard Certificate with NGINX Prerequisites Reference: What is certbot Certbot is a agent for letsencrypt that runs in a server to complete the letsencrypt challenge, request a certificate and get a certificate. What is Letsencrypt challenge Letsencrypt want to verify that you own the domain. So [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.code2deploy.com\/wildcard-domain-ssl-integration\/\" \/>\n<meta property=\"og:site_name\" content=\"code2deploy.com\" \/>\n<meta property=\"article:published_time\" content=\"2024-02-10T20:13:21+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-28T04:36:25+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/code2deploy.com\/wp-content\/uploads\/2024\/02\/image-1.png\" \/>\n<meta name=\"author\" content=\"enam\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"enam\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blog.code2deploy.com\\\/wildcard-domain-ssl-integration\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.code2deploy.com\\\/wildcard-domain-ssl-integration\\\/\"},\"author\":{\"name\":\"enam\",\"@id\":\"https:\\\/\\\/code2deploy.com\\\/blog\\\/#\\\/schema\\\/person\\\/e46930c19b999a87f12566fa8357481b\"},\"headline\":\"Wildcard Domain SSL Integration\",\"datePublished\":\"2024-02-10T20:13:21+00:00\",\"dateModified\":\"2024-04-28T04:36:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blog.code2deploy.com\\\/wildcard-domain-ssl-integration\\\/\"},\"wordCount\":827,\"commentCount\":4,\"publisher\":{\"@id\":\"https:\\\/\\\/code2deploy.com\\\/blog\\\/#\\\/schema\\\/person\\\/e46930c19b999a87f12566fa8357481b\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.code2deploy.com\\\/wildcard-domain-ssl-integration\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/code2deploy.com\\\/wp-content\\\/uploads\\\/2024\\\/02\\\/image-1.png\",\"keywords\":[\"Domain\",\"Let's Encrypt\",\"Nginx\",\"SSL\",\"Web Hosting\",\"Wildcard Domain\"],\"articleSection\":[\"Application Security\",\"Authentication and Authorization\",\"Certification\",\"CloudPanel\",\"cPanel\",\"Domain\",\"Droplet\",\"EC2 Instance\",\"Network Security\",\"Security\",\"Web Hositing\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blog.code2deploy.com\\\/wildcard-domain-ssl-integration\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blog.code2deploy.com\\\/wildcard-domain-ssl-integration\\\/\",\"url\":\"https:\\\/\\\/blog.code2deploy.com\\\/wildcard-domain-ssl-integration\\\/\",\"name\":\"Wildcard Domain SSL Integration - code2deploy.com\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/code2deploy.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blog.code2deploy.com\\\/wildcard-domain-ssl-integration\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.code2deploy.com\\\/wildcard-domain-ssl-integration\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/code2deploy.com\\\/wp-content\\\/uploads\\\/2024\\\/02\\\/image-1.png\",\"datePublished\":\"2024-02-10T20:13:21+00:00\",\"dateModified\":\"2024-04-28T04:36:25+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blog.code2deploy.com\\\/wildcard-domain-ssl-integration\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blog.code2deploy.com\\\/wildcard-domain-ssl-integration\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/blog.code2deploy.com\\\/wildcard-domain-ssl-integration\\\/#primaryimage\",\"url\":\"https:\\\/\\\/code2deploy.com\\\/wp-content\\\/uploads\\\/2024\\\/02\\\/image-1.png\",\"contentUrl\":\"https:\\\/\\\/code2deploy.com\\\/wp-content\\\/uploads\\\/2024\\\/02\\\/image-1.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blog.code2deploy.com\\\/wildcard-domain-ssl-integration\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/code2deploy.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Wildcard Domain SSL Integration\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/code2deploy.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/code2deploy.com\\\/blog\\\/\",\"name\":\"code2deploy.com\\\/blog\",\"description\":\"TechOps\",\"publisher\":{\"@id\":\"https:\\\/\\\/code2deploy.com\\\/blog\\\/#\\\/schema\\\/person\\\/e46930c19b999a87f12566fa8357481b\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/code2deploy.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/code2deploy.com\\\/blog\\\/#\\\/schema\\\/person\\\/e46930c19b999a87f12566fa8357481b\",\"name\":\"enam\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d864e2f082f4499f8f1b33f004ec166eea77b9e94738553b120b6dca2410f203?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d864e2f082f4499f8f1b33f004ec166eea77b9e94738553b120b6dca2410f203?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d864e2f082f4499f8f1b33f004ec166eea77b9e94738553b120b6dca2410f203?s=96&d=mm&r=g\",\"caption\":\"enam\"},\"logo\":{\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d864e2f082f4499f8f1b33f004ec166eea77b9e94738553b120b6dca2410f203?s=96&d=mm&r=g\"},\"sameAs\":[\"https:\\\/\\\/code2deploy.com\\\/blog\"],\"url\":\"https:\\\/\\\/code2deploy.com\\\/blog\\\/author\\\/enam\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Wildcard Domain SSL Integration - code2deploy.com","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.code2deploy.com\/wildcard-domain-ssl-integration\/","og_locale":"en_US","og_type":"article","og_title":"Wildcard Domain SSL Integration - code2deploy.com","og_description":"How to configure a free single Let\u2019s Encrypt SSL\/TLS wildcard Certificate with NGINX Prerequisites Reference: What is certbot Certbot is a agent for letsencrypt that runs in a server to complete the letsencrypt challenge, request a certificate and get a certificate. What is Letsencrypt challenge Letsencrypt want to verify that you own the domain. So [&hellip;]","og_url":"https:\/\/blog.code2deploy.com\/wildcard-domain-ssl-integration\/","og_site_name":"code2deploy.com","article_published_time":"2024-02-10T20:13:21+00:00","article_modified_time":"2024-04-28T04:36:25+00:00","og_image":[{"url":"https:\/\/code2deploy.com\/wp-content\/uploads\/2024\/02\/image-1.png","type":"","width":"","height":""}],"author":"enam","twitter_card":"summary_large_image","twitter_misc":{"Written by":"enam","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.code2deploy.com\/wildcard-domain-ssl-integration\/#article","isPartOf":{"@id":"https:\/\/blog.code2deploy.com\/wildcard-domain-ssl-integration\/"},"author":{"name":"enam","@id":"https:\/\/code2deploy.com\/blog\/#\/schema\/person\/e46930c19b999a87f12566fa8357481b"},"headline":"Wildcard Domain SSL Integration","datePublished":"2024-02-10T20:13:21+00:00","dateModified":"2024-04-28T04:36:25+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.code2deploy.com\/wildcard-domain-ssl-integration\/"},"wordCount":827,"commentCount":4,"publisher":{"@id":"https:\/\/code2deploy.com\/blog\/#\/schema\/person\/e46930c19b999a87f12566fa8357481b"},"image":{"@id":"https:\/\/blog.code2deploy.com\/wildcard-domain-ssl-integration\/#primaryimage"},"thumbnailUrl":"https:\/\/code2deploy.com\/wp-content\/uploads\/2024\/02\/image-1.png","keywords":["Domain","Let's Encrypt","Nginx","SSL","Web Hosting","Wildcard Domain"],"articleSection":["Application Security","Authentication and Authorization","Certification","CloudPanel","cPanel","Domain","Droplet","EC2 Instance","Network Security","Security","Web Hositing"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.code2deploy.com\/wildcard-domain-ssl-integration\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.code2deploy.com\/wildcard-domain-ssl-integration\/","url":"https:\/\/blog.code2deploy.com\/wildcard-domain-ssl-integration\/","name":"Wildcard Domain SSL Integration - code2deploy.com","isPartOf":{"@id":"https:\/\/code2deploy.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.code2deploy.com\/wildcard-domain-ssl-integration\/#primaryimage"},"image":{"@id":"https:\/\/blog.code2deploy.com\/wildcard-domain-ssl-integration\/#primaryimage"},"thumbnailUrl":"https:\/\/code2deploy.com\/wp-content\/uploads\/2024\/02\/image-1.png","datePublished":"2024-02-10T20:13:21+00:00","dateModified":"2024-04-28T04:36:25+00:00","breadcrumb":{"@id":"https:\/\/blog.code2deploy.com\/wildcard-domain-ssl-integration\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.code2deploy.com\/wildcard-domain-ssl-integration\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.code2deploy.com\/wildcard-domain-ssl-integration\/#primaryimage","url":"https:\/\/code2deploy.com\/wp-content\/uploads\/2024\/02\/image-1.png","contentUrl":"https:\/\/code2deploy.com\/wp-content\/uploads\/2024\/02\/image-1.png"},{"@type":"BreadcrumbList","@id":"https:\/\/blog.code2deploy.com\/wildcard-domain-ssl-integration\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/code2deploy.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Wildcard Domain SSL Integration"}]},{"@type":"WebSite","@id":"https:\/\/code2deploy.com\/blog\/#website","url":"https:\/\/code2deploy.com\/blog\/","name":"code2deploy.com\/blog","description":"TechOps","publisher":{"@id":"https:\/\/code2deploy.com\/blog\/#\/schema\/person\/e46930c19b999a87f12566fa8357481b"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/code2deploy.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/code2deploy.com\/blog\/#\/schema\/person\/e46930c19b999a87f12566fa8357481b","name":"enam","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/d864e2f082f4499f8f1b33f004ec166eea77b9e94738553b120b6dca2410f203?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/d864e2f082f4499f8f1b33f004ec166eea77b9e94738553b120b6dca2410f203?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d864e2f082f4499f8f1b33f004ec166eea77b9e94738553b120b6dca2410f203?s=96&d=mm&r=g","caption":"enam"},"logo":{"@id":"https:\/\/secure.gravatar.com\/avatar\/d864e2f082f4499f8f1b33f004ec166eea77b9e94738553b120b6dca2410f203?s=96&d=mm&r=g"},"sameAs":["https:\/\/code2deploy.com\/blog"],"url":"https:\/\/code2deploy.com\/blog\/author\/enam\/"}]}},"_links":{"self":[{"href":"https:\/\/code2deploy.com\/blog\/wp-json\/wp\/v2\/posts\/3350","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/code2deploy.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/code2deploy.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/code2deploy.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/code2deploy.com\/blog\/wp-json\/wp\/v2\/comments?post=3350"}],"version-history":[{"count":3,"href":"https:\/\/code2deploy.com\/blog\/wp-json\/wp\/v2\/posts\/3350\/revisions"}],"predecessor-version":[{"id":4032,"href":"https:\/\/code2deploy.com\/blog\/wp-json\/wp\/v2\/posts\/3350\/revisions\/4032"}],"wp:attachment":[{"href":"https:\/\/code2deploy.com\/blog\/wp-json\/wp\/v2\/media?parent=3350"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/code2deploy.com\/blog\/wp-json\/wp\/v2\/categories?post=3350"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/code2deploy.com\/blog\/wp-json\/wp\/v2\/tags?post=3350"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}