{"id":584,"date":"2023-11-16T23:47:38","date_gmt":"2023-11-16T14:47:38","guid":{"rendered":"https:\/\/blog.peddals.com\/?p=584"},"modified":"2024-07-25T00:17:57","modified_gmt":"2024-07-24T15:17:57","slug":"lets-encrypt-for-apache-dev-site-on-ubuntu","status":"publish","type":"post","link":"https:\/\/blog.peddals.com\/en\/lets-encrypt-for-apache-dev-site-on-ubuntu\/","title":{"rendered":"Install Let&#8217;s Encrypt certificate in a Ubuntu development web server in the closed LAN"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Once HSTS preload was approved, my dev sites became HTTPS enforced.<\/h2>\n\n\n\n<p>I was happy with the results of HSTS preload submitted and approved for websites that I manage for business at <a href=\"https:\/\/hstspreload.org\">HSTS preload<\/a>. So, I submitted the same request for my personal domain, peddals.com. Once it was approved, my dev-sites\/services running in my home office LAN became inaccessible as they did not hire secured http (HTTPS). In this article I&#8217;m going to share how I installed Let&#8217;s Encrypt certificate in a web server running on Apache\/Ubuntu inside closed LAN.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">My environment and requirements<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Raspberry Pi 3 model B<\/li>\n\n\n\n<li>Ubuntu 20.04 LTS<\/li>\n\n\n\n<li>Apache 2.4.41<\/li>\n\n\n\n<li>Domain name<\/li>\n\n\n\n<li>Access rights to manage DNS records (TXT)<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">High level step<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Install certbot.<\/li>\n\n\n\n<li>Run certbot command (with DNS challenge option).<\/li>\n\n\n\n<li>Add TXT record to DNS as requested.<\/li>\n\n\n\n<li>Let Let&#8217;s Encrypt complete certificate installation.<\/li>\n\n\n\n<li>Enable SSL in Apache.<\/li>\n\n\n\n<li>Change TCP port in Apache config file to 443 and add other settings for SSL.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Detailed step<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Obtain certificate (CLI + DNS record)<\/h3>\n\n\n\n<p>First, you need to install certbot to install a certificate. In the first line below you execute elevated bash so you don&#8217;t need to add <code>sudo<\/code> every time. <code>$<\/code> is normal user shell prompt and <code># <\/code>is administrator level shell prompt. Others are output examples.<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code>$ sudo bash\n# apt-get update\n# apt-get install certbot<\/code><\/pre><\/div>\n\n\n\n<p>In my case, I submitted requests for *.dev.peddals.com for all dev sites and the top level domain &#8212; I may post another article, but on my mac DNSmasq is running as a local DNS server, and access to *.dev.peddals.com is diverted to my Raspberry Pi Apache server.<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism off-numbers lang-bash\" data-lang=\"Bash\"><code># certbot certonly --manual --preferred-challenges dns-01 -m mail@example.com -d &#39;*.dev.peddals.com&#39; -d peddals.com\nSaving debug log to \/var\/log\/letsencrypt\/letsencrypt.log\nPlugins selected: Authenticator manual, Installer None\n\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\nPlease read the Terms of Service at\nhttps:\/\/letsencrypt.org\/documents\/LE-SA-v1.3-September-21-2022.pdf. You must\nagree in order to register with the ACME server at\nhttps:\/\/acme-v02.api.letsencrypt.org\/directory\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n(A)gree\/(C)ancel: A\n\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\nWould you be willing to share your email address with the Electronic Frontier\nFoundation, a founding partner of the Let&#39;s Encrypt project and the non-profit\norganization that develops Certbot? We&#39;d like to send you email about our work\nencrypting the web, EFF news, campaigns, and ways to support digital freedom.\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n(Y)es\/(N)o: Y<\/code><\/pre><\/div>\n\n\n\n<p>After the above the command froze for some reason. Aborted by ctrl + C and rerunthe <code>certbot<\/code> to proceed the process.<\/p>\n\n\n\n<p>I think sharing email address (above) is NOT required however, sharing IP address IS required, so answer Y(es) to the below question.<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism off-numbers lang-bash\" data-lang=\"Bash\"><code>Saving debug log to \/var\/log\/letsencrypt\/letsencrypt.log\nPlugins selected: Authenticator manual, Installer None\nObtaining a new certificate\nPerforming the following challenges:\ndns-01 challenge for dev.peddals.com\ndns-01 challenge for peddals.com\n\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\nNOTE: The IP of this machine will be publicly logged as having requested this\ncertificate. If you&#39;re running certbot in manual mode on a machine that is not\nyour server, please ensure you&#39;re okay with that.\n\nAre you OK with your IP being logged?\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n(Y)es\/(N)o: Y\n\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\nPlease deploy a DNS TXT record under the name\n_acme-challenge.dev.peddals.com with the following value:\n\n(your value here)\n\nBefore continuing, verify the record is deployed.\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\nPress Enter to Continue<\/code><\/pre><\/div>\n\n\n\n<p>Add the hostname and value as a TXT record in your DNS server. Sorry for the Japanese characters but the below reads from the top to the bottom: Host name, Type, Value, TTL, Priority.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"990\" height=\"592\" src=\"https:\/\/blog.peddals.com\/wp-content\/uploads\/2023\/11\/image-3.png\" alt=\"\" class=\"wp-image-579\" srcset=\"https:\/\/blog.peddals.com\/wp-content\/uploads\/2023\/11\/image-3.png 990w, https:\/\/blog.peddals.com\/wp-content\/uploads\/2023\/11\/image-3-300x179.png 300w, https:\/\/blog.peddals.com\/wp-content\/uploads\/2023\/11\/image-3-768x459.png 768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><figcaption class=\"wp-element-caption\">When you copy-paste, don&#8217;t include the TLD if it&#8217;s pre-populated.<\/figcaption><\/figure>\n\n\n\n<p>Once added, go back to the CLI and hit the enter key. In my case I added the top level domain well, so there&#8217;s another challenge.<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism off-numbers lang-bash\" data-lang=\"Bash\"><code>- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\nPlease deploy a DNS TXT record under the name\n_acme-challenge.peddals.com with the following value:\n\n(your value here)\n\nBefore continuing, verify the record is deployed.\n(This must be set up in addition to the previous challenges; do not remove,\nreplace, or undo the previous challenge tasks yet. Note that you might be\nasked to create multiple distinct TXT records with the same name. This is\npermitted by DNS standards.)\n\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\nPress Enter to Continue\n<\/code><\/pre><\/div>\n\n\n\n<p>Do the similar thing on your DNS server then hit the enter key to complete the process as below.<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism off-numbers lang-bash\" data-lang=\"Bash\"><code>Waiting for verification...\nCleaning up challenges\n\nIMPORTANT NOTES:\n - Congratulations! Your certificate and chain have been saved at:\n   \/etc\/letsencrypt\/live\/dev.peddals.com\/fullchain.pem\n   Your key file has been saved at:\n   \/etc\/letsencrypt\/live\/dev.peddals.com\/privkey.pem\n   Your cert will expire on 2024-02-10. To obtain a new or tweaked\n   version of this certificate in the future, simply run certbot\n   again. To non-interactively renew *all* of your certificates, run\n   &quot;certbot renew&quot;\n - If you like Certbot, please consider supporting our work by:\n\n   Donating to ISRG \/ Let&#39;s Encrypt:   https:\/\/letsencrypt.org\/donate\n   Donating to EFF:                    https:\/\/eff.org\/donate-le<\/code><\/pre><\/div>\n\n\n\n<p>Path to your certs and key are written under IMPORTANT NOTES (if you forget the paths, search them in <code>\/etc\/letsencrypt\/live\/<\/code>). Let&#8217;s encrypt certs expire every 90 days, and you have to renew. Files are symbolic link to actual certs and key to avoid tasks to update Apache config file.<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism off-numbers lang-bash\" data-lang=\"Bash\"><code># ll \/etc\/letsencrypt\/live\/dev.peddals.com\/\ntotal 12\ndrwxr-xr-x 2 root root 4096 Nov 12 19:00 .\/\ndrwx------ 3 root root 4096 Nov 12 19:00 ..\/\n-rw-r--r-- 1 root root  692 Nov 12 19:00 README\nlrwxrwxrwx 1 root root   39 Nov 12 19:00 cert.pem -&gt; ..\/..\/archive\/dev.peddals.com\/cert1.pem\nlrwxrwxrwx 1 root root   40 Nov 12 19:00 chain.pem -&gt; ..\/..\/archive\/dev.peddals.com\/chain1.pem\nlrwxrwxrwx 1 root root   44 Nov 12 19:00 fullchain.pem -&gt; ..\/..\/archive\/dev.peddals.com\/fullchain1.pem\nlrwxrwxrwx 1 root root   42 Nov 12 19:00 privkey.pem -&gt; ..\/..\/archive\/dev.peddals.com\/privkey1.pem<\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Enable SSL in Apache and edit site config file<\/h3>\n\n\n\n<p>Enable SSL in Apache by the following command Apache. The last 2 commands are to restart and check the status of Apache.<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism off-numbers lang-bash\" data-lang=\"Bash\"><code># a2enmod ssl\nConsidering dependency setenvif for ssl:\nModule setenvif already enabled\nConsidering dependency mime for ssl:\nModule mime already enabled\nConsidering dependency socache_shmcb for ssl:\nEnabling module socache_shmcb.\nEnabling module ssl.\nSee \/usr\/share\/doc\/apache2\/README.Debian.gz on how to configure SSL and create self-signed certificates.\nTo activate the new configuration, you need to run:\n  systemctl restart apache2\n# systemctl restart apache2\n# systemctl status apache2<\/code><\/pre><\/div>\n\n\n\n<p>A change and additions to a http (port: 80) site config file are as below. Change the port from 80 to 443 and add SSL related settings. As this (my case) is only for dev sites in a closed environment, no other security settings such as http headers are added. Since HTTPS preload and includeSubDomains are included in my HSTS policy, there&#8217;s no need to have redirection from port 80.<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>&lt;VirtualHost *:443&gt;\n\tSSLEngine on\n\tSSLCertificateFile \/etc\/letsencrypt\/live\/dev.peddals.com\/fullchain.pem\t\n\tSSLCertificateKeyFile \/etc\/letsencrypt\/live\/dev.peddals.com\/privkey.pem<\/code><\/pre><\/div>\n\n\n\n<p>Get the config syntax checked and reload the apache configurations.<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism off-numbers lang-bash\" data-lang=\"Bash\"><code># apachectl configtest\nSyntax OK\n# systemctl reload apache2<\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Test in web browser<\/h3>\n\n\n\n<p>Now you can open your site in web browsers. You don&#8217;t need to add <code>https:\/\/<\/code>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"438\" height=\"314\" src=\"https:\/\/blog.peddals.com\/wp-content\/uploads\/2023\/11\/image-4.png\" alt=\"\" class=\"wp-image-597\" srcset=\"https:\/\/blog.peddals.com\/wp-content\/uploads\/2023\/11\/image-4.png 438w, https:\/\/blog.peddals.com\/wp-content\/uploads\/2023\/11\/image-4-300x215.png 300w\" sizes=\"auto, (max-width: 438px) 100vw, 438px\" \/><figcaption class=\"wp-element-caption\">Google Chrome<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Let&#8217;s Encrypt certs expire in 90 days.<\/h2>\n\n\n\n<p>You should, even for your dev env., renew the cert before expired. You can renew in 30 days until the expiration. As this case is for test sites manual renewal is fine for now. Run the command with the <code>--dry-run<\/code> option then without it if no error reported.<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism off-numbers lang-bash\" data-lang=\"Bash\"><code># certbot renew --dry-run\n# certbot renew<\/code><\/pre><\/div>\n\n\n\n<p>When you run the command when renewal is not needed, you can see the expiration date.<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism off-numbers lang-bash\" data-lang=\"Bash\"><code># certbot renew\nSaving debug log to \/var\/log\/letsencrypt\/letsencrypt.log\n\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\nProcessing \/etc\/letsencrypt\/renewal\/dev.peddals.com.conf\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\nCert not yet due for renewal\n\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\nThe following certs are not due for renewal yet:\n  \/etc\/letsencrypt\/live\/dev.peddals.com\/fullchain.pem expires on 2024-02-10 (skipped)\nNo renewals were attempted.\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<\/code><\/pre><\/div>\n\n\n\n<p><s>Use the crontab command to automate the renewal process. It&#8217;s not covered in this post.<\/s> (Corrected and added on Jul 25, 2024) Renewal cannot be automated. When the cert is expired or going to expire, you have to execute the full <code>certbot certonly --manual --preferred-challenges dns-01<\/code> command followed by domain names again. You&#8217;ll get a new code that needs to be added as a TXT record for the cert to be renewed.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">HSTS policy and where to add<\/h2>\n\n\n\n<p>As this website is on hosting servce, I have the .htaccess file which has the below line in the document root directory. <code>includeSubDomains<\/code> to apply the configuration to all sub-domains and <code>preload<\/code> to force access over HTTPS.<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\" data-file=\".htaccess\"><code>Header set Strict-Transport-Security &quot;max-age=31536000; includeSubDomains; preload&quot;<\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>There are multiple reasons why you want\/need to install certificate in a closed environment. The steps above let you install commercial level certificate.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Image by Stable Diffusion<\/h2>\n\n\n\n<p>Date:<br>2023-Nov-12 17:59:44<\/p>\n\n\n\n<p>Model:<br>realisticVision-v20_split-einsum<\/p>\n\n\n\n<p>Size:<br>512 x 512<\/p>\n\n\n\n<p>Include in Image:<br>cartoon, let\u2019s encrypt, apache, success<\/p>\n\n\n\n<p>Exclude from Image:<\/p>\n\n\n\n<p>Seed:<br>356871963<\/p>\n\n\n\n<p>Steps:<br>30<\/p>\n\n\n\n<p>Guidance Scale:<br>11.0<\/p>\n\n\n\n<p>Scheduler:<br>DPM-Solver++<\/p>\n\n\n\n<p>ML Compute Unit:<br>CPU &amp; Neural Engine<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Once HSTS preload was approved, my dev sites became HTTPS enforced. I was happy with the results of HSTS prelo &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/blog.peddals.com\/en\/lets-encrypt-for-apache-dev-site-on-ubuntu\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Install Let&#8217;s Encrypt certificate in a Ubuntu development web server in the closed LAN&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":566,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_locale":"en_US","_original_post":"https:\/\/blog.peddals.com\/?p=558","footnotes":""},"categories":[22,21,20],"tags":[],"class_list":["post-584","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-apache","category-ubuntu","category-website","en-US"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Install Let&#039;s Encrypt certificate in a Ubuntu development web server in the closed LAN | Peddals Blog<\/title>\n<meta name=\"description\" content=\"How to install Let&#039;s Encrypt certificate in a closed environment. Apache\/Ubuntu\" \/>\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.peddals.com\/en\/lets-encrypt-for-apache-dev-site-on-ubuntu\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Install Let&#039;s Encrypt certificate in a Ubuntu development web server in the closed LAN | Peddals Blog\" \/>\n<meta property=\"og:description\" content=\"How to install Let&#039;s Encrypt certificate in a closed environment. Apache\/Ubuntu\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.peddals.com\/en\/lets-encrypt-for-apache-dev-site-on-ubuntu\/\" \/>\n<meta property=\"og:site_name\" content=\"Peddals Blog\" \/>\n<meta property=\"article:published_time\" content=\"2023-11-16T14:47:38+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-07-24T15:17:57+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.peddals.com\/wp-content\/uploads\/2023\/11\/cartoon-lets-encrypt-apache-success.593.356871963.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"512\" \/>\n\t<meta property=\"og:image:height\" content=\"512\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Handsome\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Handsome\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"22 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blog.peddals.com\\\/en\\\/lets-encrypt-for-apache-dev-site-on-ubuntu\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.peddals.com\\\/en\\\/lets-encrypt-for-apache-dev-site-on-ubuntu\\\/\"},\"author\":{\"name\":\"Handsome\",\"@id\":\"https:\\\/\\\/blog.peddals.com\\\/#\\\/schema\\\/person\\\/81b2dabca748c3d11a45722f02d9d994\"},\"headline\":\"Install Let&#8217;s Encrypt certificate in a Ubuntu development web server in the closed LAN\",\"datePublished\":\"2023-11-16T14:47:38+00:00\",\"dateModified\":\"2024-07-24T15:17:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blog.peddals.com\\\/en\\\/lets-encrypt-for-apache-dev-site-on-ubuntu\\\/\"},\"wordCount\":822,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/blog.peddals.com\\\/#\\\/schema\\\/person\\\/81b2dabca748c3d11a45722f02d9d994\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.peddals.com\\\/en\\\/lets-encrypt-for-apache-dev-site-on-ubuntu\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blog.peddals.com\\\/wp-content\\\/uploads\\\/2023\\\/11\\\/cartoon-lets-encrypt-apache-success.593.356871963.jpg\",\"articleSection\":[\"Apache\",\"Ubuntu\",\"Website\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blog.peddals.com\\\/en\\\/lets-encrypt-for-apache-dev-site-on-ubuntu\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blog.peddals.com\\\/en\\\/lets-encrypt-for-apache-dev-site-on-ubuntu\\\/\",\"url\":\"https:\\\/\\\/blog.peddals.com\\\/en\\\/lets-encrypt-for-apache-dev-site-on-ubuntu\\\/\",\"name\":\"Install Let's Encrypt certificate in a Ubuntu development web server in the closed LAN | Peddals Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.peddals.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blog.peddals.com\\\/en\\\/lets-encrypt-for-apache-dev-site-on-ubuntu\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.peddals.com\\\/en\\\/lets-encrypt-for-apache-dev-site-on-ubuntu\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blog.peddals.com\\\/wp-content\\\/uploads\\\/2023\\\/11\\\/cartoon-lets-encrypt-apache-success.593.356871963.jpg\",\"datePublished\":\"2023-11-16T14:47:38+00:00\",\"dateModified\":\"2024-07-24T15:17:57+00:00\",\"description\":\"How to install Let's Encrypt certificate in a closed environment. Apache\\\/Ubuntu\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blog.peddals.com\\\/en\\\/lets-encrypt-for-apache-dev-site-on-ubuntu\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blog.peddals.com\\\/en\\\/lets-encrypt-for-apache-dev-site-on-ubuntu\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/blog.peddals.com\\\/en\\\/lets-encrypt-for-apache-dev-site-on-ubuntu\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blog.peddals.com\\\/wp-content\\\/uploads\\\/2023\\\/11\\\/cartoon-lets-encrypt-apache-success.593.356871963.jpg\",\"contentUrl\":\"https:\\\/\\\/blog.peddals.com\\\/wp-content\\\/uploads\\\/2023\\\/11\\\/cartoon-lets-encrypt-apache-success.593.356871963.jpg\",\"width\":512,\"height\":512},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blog.peddals.com\\\/en\\\/lets-encrypt-for-apache-dev-site-on-ubuntu\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u30db\u30fc\u30e0\",\"item\":\"https:\\\/\\\/blog.peddals.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Install Let&#8217;s Encrypt certificate in a Ubuntu development web server in the closed LAN\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blog.peddals.com\\\/#website\",\"url\":\"https:\\\/\\\/blog.peddals.com\\\/\",\"name\":\"Peddals Blog\",\"description\":\"AI, LLM, Python, Mac, Pythonista3, iOS, etc. in Japanese and English\",\"publisher\":{\"@id\":\"https:\\\/\\\/blog.peddals.com\\\/#\\\/schema\\\/person\\\/81b2dabca748c3d11a45722f02d9d994\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blog.peddals.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/blog.peddals.com\\\/#\\\/schema\\\/person\\\/81b2dabca748c3d11a45722f02d9d994\",\"name\":\"Handsome\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/51d7363349ec538c4d62c9ebe89488fd7388729ad0c9dfeebd8bb32ebfb11f17?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/51d7363349ec538c4d62c9ebe89488fd7388729ad0c9dfeebd8bb32ebfb11f17?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/51d7363349ec538c4d62c9ebe89488fd7388729ad0c9dfeebd8bb32ebfb11f17?s=96&d=mm&r=g\",\"caption\":\"Handsome\"},\"logo\":{\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/51d7363349ec538c4d62c9ebe89488fd7388729ad0c9dfeebd8bb32ebfb11f17?s=96&d=mm&r=g\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Install Let's Encrypt certificate in a Ubuntu development web server in the closed LAN | Peddals Blog","description":"How to install Let's Encrypt certificate in a closed environment. Apache\/Ubuntu","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.peddals.com\/en\/lets-encrypt-for-apache-dev-site-on-ubuntu\/","og_locale":"en_US","og_type":"article","og_title":"Install Let's Encrypt certificate in a Ubuntu development web server in the closed LAN | Peddals Blog","og_description":"How to install Let's Encrypt certificate in a closed environment. Apache\/Ubuntu","og_url":"https:\/\/blog.peddals.com\/en\/lets-encrypt-for-apache-dev-site-on-ubuntu\/","og_site_name":"Peddals Blog","article_published_time":"2023-11-16T14:47:38+00:00","article_modified_time":"2024-07-24T15:17:57+00:00","og_image":[{"width":512,"height":512,"url":"https:\/\/blog.peddals.com\/wp-content\/uploads\/2023\/11\/cartoon-lets-encrypt-apache-success.593.356871963.jpg","type":"image\/jpeg"}],"author":"Handsome","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Handsome","Est. reading time":"22 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.peddals.com\/en\/lets-encrypt-for-apache-dev-site-on-ubuntu\/#article","isPartOf":{"@id":"https:\/\/blog.peddals.com\/en\/lets-encrypt-for-apache-dev-site-on-ubuntu\/"},"author":{"name":"Handsome","@id":"https:\/\/blog.peddals.com\/#\/schema\/person\/81b2dabca748c3d11a45722f02d9d994"},"headline":"Install Let&#8217;s Encrypt certificate in a Ubuntu development web server in the closed LAN","datePublished":"2023-11-16T14:47:38+00:00","dateModified":"2024-07-24T15:17:57+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.peddals.com\/en\/lets-encrypt-for-apache-dev-site-on-ubuntu\/"},"wordCount":822,"commentCount":0,"publisher":{"@id":"https:\/\/blog.peddals.com\/#\/schema\/person\/81b2dabca748c3d11a45722f02d9d994"},"image":{"@id":"https:\/\/blog.peddals.com\/en\/lets-encrypt-for-apache-dev-site-on-ubuntu\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.peddals.com\/wp-content\/uploads\/2023\/11\/cartoon-lets-encrypt-apache-success.593.356871963.jpg","articleSection":["Apache","Ubuntu","Website"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.peddals.com\/en\/lets-encrypt-for-apache-dev-site-on-ubuntu\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.peddals.com\/en\/lets-encrypt-for-apache-dev-site-on-ubuntu\/","url":"https:\/\/blog.peddals.com\/en\/lets-encrypt-for-apache-dev-site-on-ubuntu\/","name":"Install Let's Encrypt certificate in a Ubuntu development web server in the closed LAN | Peddals Blog","isPartOf":{"@id":"https:\/\/blog.peddals.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.peddals.com\/en\/lets-encrypt-for-apache-dev-site-on-ubuntu\/#primaryimage"},"image":{"@id":"https:\/\/blog.peddals.com\/en\/lets-encrypt-for-apache-dev-site-on-ubuntu\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.peddals.com\/wp-content\/uploads\/2023\/11\/cartoon-lets-encrypt-apache-success.593.356871963.jpg","datePublished":"2023-11-16T14:47:38+00:00","dateModified":"2024-07-24T15:17:57+00:00","description":"How to install Let's Encrypt certificate in a closed environment. Apache\/Ubuntu","breadcrumb":{"@id":"https:\/\/blog.peddals.com\/en\/lets-encrypt-for-apache-dev-site-on-ubuntu\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.peddals.com\/en\/lets-encrypt-for-apache-dev-site-on-ubuntu\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.peddals.com\/en\/lets-encrypt-for-apache-dev-site-on-ubuntu\/#primaryimage","url":"https:\/\/blog.peddals.com\/wp-content\/uploads\/2023\/11\/cartoon-lets-encrypt-apache-success.593.356871963.jpg","contentUrl":"https:\/\/blog.peddals.com\/wp-content\/uploads\/2023\/11\/cartoon-lets-encrypt-apache-success.593.356871963.jpg","width":512,"height":512},{"@type":"BreadcrumbList","@id":"https:\/\/blog.peddals.com\/en\/lets-encrypt-for-apache-dev-site-on-ubuntu\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u30db\u30fc\u30e0","item":"https:\/\/blog.peddals.com\/"},{"@type":"ListItem","position":2,"name":"Install Let&#8217;s Encrypt certificate in a Ubuntu development web server in the closed LAN"}]},{"@type":"WebSite","@id":"https:\/\/blog.peddals.com\/#website","url":"https:\/\/blog.peddals.com\/","name":"Peddals Blog","description":"AI, LLM, Python, Mac, Pythonista3, iOS, etc. in Japanese and English","publisher":{"@id":"https:\/\/blog.peddals.com\/#\/schema\/person\/81b2dabca748c3d11a45722f02d9d994"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.peddals.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/blog.peddals.com\/#\/schema\/person\/81b2dabca748c3d11a45722f02d9d994","name":"Handsome","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/51d7363349ec538c4d62c9ebe89488fd7388729ad0c9dfeebd8bb32ebfb11f17?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/51d7363349ec538c4d62c9ebe89488fd7388729ad0c9dfeebd8bb32ebfb11f17?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/51d7363349ec538c4d62c9ebe89488fd7388729ad0c9dfeebd8bb32ebfb11f17?s=96&d=mm&r=g","caption":"Handsome"},"logo":{"@id":"https:\/\/secure.gravatar.com\/avatar\/51d7363349ec538c4d62c9ebe89488fd7388729ad0c9dfeebd8bb32ebfb11f17?s=96&d=mm&r=g"}}]}},"_links":{"self":[{"href":"https:\/\/blog.peddals.com\/wp-json\/wp\/v2\/posts\/584","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.peddals.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.peddals.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.peddals.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.peddals.com\/wp-json\/wp\/v2\/comments?post=584"}],"version-history":[{"count":12,"href":"https:\/\/blog.peddals.com\/wp-json\/wp\/v2\/posts\/584\/revisions"}],"predecessor-version":[{"id":1651,"href":"https:\/\/blog.peddals.com\/wp-json\/wp\/v2\/posts\/584\/revisions\/1651"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.peddals.com\/wp-json\/wp\/v2\/media\/566"}],"wp:attachment":[{"href":"https:\/\/blog.peddals.com\/wp-json\/wp\/v2\/media?parent=584"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.peddals.com\/wp-json\/wp\/v2\/categories?post=584"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.peddals.com\/wp-json\/wp\/v2\/tags?post=584"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}