{"id":43127,"date":"2026-08-11T13:49:24","date_gmt":"2026-08-11T06:49:24","guid":{"rendered":"https:\/\/interdata.vn\/blog\/?p=43127"},"modified":"2026-08-11T13:51:45","modified_gmt":"2026-08-11T06:51:45","slug":"cai-ssl-lets-encrypt-bang-certbot","status":"publish","type":"post","link":"https:\/\/interdata.vn\/blog\/cai-ssl-lets-encrypt-bang-certbot\/","title":{"rendered":"C\u00e1ch C\u00e0i SSL Let&#8217;s Encrypt B\u1eb1ng Certbot &#8211; C\u00e0i SSL Mi\u1ec5n Ph\u00ed Tr\u00ean Ubuntu"},"content":{"rendered":"<p style=\"text-align: justify;\"><span style=\"font-size: 100%;\"><strong>C\u00e0i SSL Let&#8217;s Encrypt b\u1eb1ng Certbot<\/strong> l\u00e0 c\u00e1ch nhanh nh\u1ea5t \u0111\u1ec3 chuy\u1ec3n website t\u1eeb HTTP sang HTTPS m\u00e0 kh\u00f4ng t\u1ed1n ph\u00ed ch\u1ee9ng ch\u1ec9. N\u1ebfu b\u1ea1n \u0111ang ch\u1ea1y VPS v\u1edbi Nginx ho\u1eb7c Apache v\u00e0 ch\u01b0a bi\u1ebft b\u1eaft \u0111\u1ea7u t\u1eeb \u0111\u00e2u, b\u00e0i vi\u1ebft n\u00e0y c\u1ee7a <a href=\"https:\/\/interdata.vn\/\">InterData<\/a> s\u1ebd \u0111i th\u1eb3ng v\u00e0o t\u1eebng l\u1ec7nh c\u1ee5 th\u1ec3 \u2014 t\u1eeb c\u00e0i \u0111\u1eb7t, c\u1ea5u h\u00ecnh \u0111\u1ebfn t\u1ef1 \u0111\u1ed9ng gia h\u1ea1n v\u00e0 x\u1eed l\u00fd l\u1ed7i th\u01b0\u1eddng g\u1eb7p.<\/span><\/p>\n<div style=\"background-color: #eff6ff; padding: 20px; border: 1.5px solid #BFDBFE; border-radius: 12px; margin-bottom: 40px; box-shadow: 0 8px 20px rgba(37,99,235,0.05);\">\n<p style=\"font-family: 'Be Vietnam Pro', sans-serif; font-weight: bold; font-size: 18px; margin: 0 0 15px; color: #1e3a8a;\">N\u1ed8I DUNG B\u00c0I VI\u1ebeT<\/p>\n<ul style=\"list-style-type: none; padding-left: 0; margin: 0;\">\n<li style=\"margin-bottom: 10px;\"><a style=\"text-decoration: none; color: #2563eb; font-weight: bold;\" href=\"#section1\">1. Certbot v\u00e0 Let&#8217;s Encrypt l\u00e0 g\u00ec?<\/a><\/li>\n<li style=\"margin-bottom: 10px;\"><a style=\"text-decoration: none; color: #2563eb; font-weight: bold;\" href=\"#section2\">2. \u0110i\u1ec1u ki\u1ec7n ti\u00ean quy\u1ebft tr\u01b0\u1edbc khi c\u00e0i SSL b\u1eb1ng Certbot<\/a><\/li>\n<li style=\"margin-bottom: 10px;\"><a style=\"text-decoration: none; color: #2563eb; font-weight: bold;\" href=\"#section3\">3. H\u01b0\u1edbng d\u1eabn c\u00e0i SSL Let&#8217;s Encrypt b\u1eb1ng Certbot tr\u00ean Nginx<\/a><\/li>\n<li style=\"margin-bottom: 10px;\"><a style=\"text-decoration: none; color: #2563eb; font-weight: bold;\" href=\"#section4\">4. H\u01b0\u1edbng d\u1eabn c\u00e0i SSL Let&#8217;s Encrypt b\u1eb1ng Certbot tr\u00ean Apache<\/a><\/li>\n<li style=\"margin-bottom: 10px;\"><a style=\"text-decoration: none; color: #2563eb; font-weight: bold;\" href=\"#section5\">5. T\u1ef1 \u0111\u1ed9ng gia h\u1ea1n SSL Let&#8217;s Encrypt \u2014 Certbot renew v\u00e0 cron job<\/a><\/li>\n<li style=\"margin-bottom: 10px;\"><a style=\"text-decoration: none; color: #2563eb; font-weight: bold;\" href=\"#section6\">6. C\u00e0i wildcard SSL Let&#8217;s Encrypt b\u1eb1ng DNS challenge<\/a><\/li>\n<li style=\"margin-bottom: 10px;\"><a style=\"text-decoration: none; color: #2563eb; font-weight: bold;\" href=\"#section7\">7. So s\u00e1nh c\u00e1c mode Certbot: Nginx plugin, Apache plugin, Standalone, Webroot<\/a><\/li>\n<li style=\"margin-bottom: 10px;\"><a style=\"text-decoration: none; color: #2563eb; font-weight: bold;\" href=\"#section8\">8. L\u1ed7i th\u01b0\u1eddng g\u1eb7p khi c\u00e0i SSL b\u1eb1ng Certbot v\u00e0 c\u00e1ch kh\u1eafc ph\u1ee5c<\/a><\/li>\n<li style=\"margin-bottom: 10px;\"><a style=\"text-decoration: none; color: #2563eb; font-weight: bold;\" href=\"#section9\">9. So s\u00e1nh VPS v\u00e0 Cloud Server khi host website c\u1ea7n SSL<\/a><\/li>\n<li style=\"margin-bottom: 10px;\"><a style=\"text-decoration: none; color: #2563eb; font-weight: bold;\" href=\"#section-faq\">10. C\u00e2u h\u1ecfi th\u01b0\u1eddng g\u1eb7p v\u1ec1 SSL Let&#8217;s Encrypt v\u00e0 Certbot<\/a><\/li>\n<\/ul>\n<\/div>\n\n\n<style>\n.interdata-plan-carousel,.interdata-plan-carousel *{box-sizing:border-box}\n.interdata-plan-carousel{--blue:#005bea;--blue-dark:#004dcc;--text:#071832;--muted:#516173;--border:#d8e6fb;--bg:#f3f8ff;--shadow:0 5px 14px rgba(0,62,145,.08);background:var(--bg);padding:14px 56px 18px;position:relative;overflow:hidden;border-radius:20px;}\n.interdata-carousel-heading{color:#f00;font-family:Roboto,sans-serif;font-size:18px;line-height:1.35;font-weight:800;text-align:center;margin:0 0 14px}\n.interdata-plan-viewport{overflow:hidden;width:100%}\n.interdata-plan-track{display:flex;align-items:stretch;gap:12px;overflow:visible;padding:0 0 4px;transform:translate3d(0,0,0);transition:transform .45s ease;will-change:transform;touch-action:pan-y}\n.interdata-plan-card{flex:0 0 calc((100% - 24px)\/3);min-width:0;min-height:0!important;height:auto;background:#fff;border:1px solid var(--border);border-radius:8px;padding:15px 12px 13px;display:flex;flex-direction:column;box-shadow:var(--shadow)}\n.interdata-plan-title{color:var(--blue-dark);font-size:16px;line-height:1.22;font-weight:800;text-align:center;margin:0 0 7px;text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n.interdata-plan-price{color:var(--blue-dark);font-size:24px;line-height:1;font-weight:900;text-align:center;margin-bottom:12px;white-space:nowrap;letter-spacing:0}\n.interdata-plan-price span{font-size:10px;font-weight:800;margin-left:2px}\n.interdata-plan-badge{align-self:center;display:inline-flex;align-items:center;justify-content:center;background:#ff3934;color:#fff;border-radius:5px;padding:7px 8px;font-size:9px;line-height:1;font-weight:800;margin-bottom:15px;white-space:nowrap;max-width:100%}\n.interdata-plan-features{list-style:none!important;padding:0!important;margin:0!important}\n.interdata-plan-features li{display:flex;gap:7px;align-items:flex-start;color:var(--text);font-size:12px;line-height:1.35;font-weight:700;text-align:left;margin:0 0 10px!important;padding:0!important}\n.interdata-plan-icon{width:14px;min-width:14px;height:14px;color:#0069ff;margin-top:2px}\n.interdata-plan-icon svg{display:block;width:100%;height:100%;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}\n.interdata-plan-spacer{flex:1;min-height:16px}\n.interdata-plan-button{display:flex;align-items:center;justify-content:center;min-height:42px;width:100%;margin-top:auto!important;margin-bottom:0!important;background:var(--blue);color:#fff!important;border-radius:5px;font-size:13px;font-weight:800;text-decoration:none!important;box-shadow:0 7px 14px rgba(0,91,234,.24);transition:transform .2s ease,background .2s ease}\n.interdata-plan-button:hover{background:var(--blue-dark);color:#fff!important;transform:translateY(-1px)}\n.interdata-carousel-arrow{position:absolute;top:50%;z-index:5;width:44px;height:54px;border:2px solid #fff!important;border-radius:999px;background:var(--blue)!important;color:#fff!important;box-shadow:0 8px 22px rgba(0,62,145,.32);display:flex!important;align-items:center;justify-content:center;cursor:pointer;transform:translateY(-35%);transition:background .2s ease,color .2s ease,opacity .2s ease,transform .2s ease}\n.interdata-carousel-arrow:hover{background:var(--blue-dark)!important;color:#fff!important;transform:translateY(-35%) scale(1.04)}\n.interdata-carousel-arrow:disabled{opacity:.78;cursor:not-allowed;background:#8aa6cf!important;color:#fff!important}\n.interdata-carousel-arrow:disabled:hover{background:#8aa6cf!important;color:#fff!important;transform:translateY(-35%)}\n.interdata-carousel-arrow svg{display:none!important}\n.interdata-carousel-arrow:before{content:none!important;display:none!important}\n.interdata-carousel-mark{display:block!important;color:#fff!important;font-family:Arial,Helvetica,sans-serif!important;font-size:38px!important;font-weight:900!important;line-height:1!important;text-align:center!important;pointer-events:none!important;transform:translateY(-2px)}\n.interdata-carousel-prev{left:14px}\n.interdata-carousel-prev .interdata-carousel-mark{margin-left:-2px}\n.interdata-carousel-next{right:14px}\n.interdata-carousel-next .interdata-carousel-mark{margin-right:-2px}\n@media (max-width:800px){.interdata-plan-carousel{padding:12px 44px 16px}.interdata-plan-card{flex-basis:calc((100% - 12px)\/2)}.interdata-carousel-heading{font-size:16px}.interdata-carousel-prev{left:6px}.interdata-carousel-next{right:6px}}\n@media (max-width:480px){.interdata-plan-carousel{padding:12px 38px 16px}.interdata-plan-card{flex-basis:100%}.interdata-plan-price{font-size:23px}.interdata-carousel-arrow{width:34px;height:44px}.interdata-carousel-mark{font-size:32px!important}.interdata-carousel-prev{left:3px}.interdata-carousel-next{right:3px}}\n<\/style>\n\n<div class=\"interdata-plan-carousel\" data-interdata-carousel>\n  <div class=\"interdata-carousel-heading\">Si\u00eau \u01afu \u0110\u00e3i VPS \/ CLOUD SERVER - Ti\u1ebft Ki\u1ec7m \u0110\u1ebfn 70%<\/div>\n\n  <svg width=\"0\" height=\"0\" style=\"position:absolute;visibility:hidden\" aria-hidden=\"true\">\n    <symbol id=\"id-icon-cpu\" viewBox=\"0 0 24 24\"><rect x=\"7\" y=\"7\" width=\"10\" height=\"10\" rx=\"2\"><\/rect><path d=\"M4 9h3M4 15h3M17 9h3M17 15h3M9 4v3M15 4v3M9 17v3M15 17v3\"><\/path><path d=\"M10 10h4v4h-4z\"><\/path><\/symbol>\n    <symbol id=\"id-icon-ram\" viewBox=\"0 0 24 24\"><rect x=\"4\" y=\"8\" width=\"16\" height=\"8\" rx=\"2\"><\/rect><path d=\"M7 16v2M11 16v2M15 16v2M19 16v2M7 11h1M11 11h1M15 11h1\"><\/path><\/symbol>\n    <symbol id=\"id-icon-storage\" viewBox=\"0 0 24 24\"><rect x=\"6\" y=\"3\" width=\"12\" height=\"18\" rx=\"2\"><\/rect><path d=\"M9 7h6\"><\/path><circle cx=\"12\" cy=\"16\" r=\"1.5\"><\/circle><\/symbol>\n    <symbol id=\"id-icon-network\" viewBox=\"0 0 24 24\"><path d=\"M5 12.5a10 10 0 0 1 14 0\"><\/path><path d=\"M8.5 16a5 5 0 0 1 7 0\"><\/path><path d=\"M12 19h.01\"><\/path><\/symbol>\n    <symbol id=\"id-icon-gift\" viewBox=\"0 0 24 24\"><rect x=\"3\" y=\"8\" width=\"18\" height=\"13\" rx=\"2\"><\/rect><path d=\"M12 8v13M3 12h18\"><\/path><path d=\"M7.5 8C6.1 8 5 6.9 5 5.5S6.1 3 7.5 3C10 3 12 8 12 8\"><\/path><path d=\"M16.5 8C17.9 8 19 6.9 19 5.5S17.9 3 16.5 3C14 3 12 8 12 8\"><\/path><\/symbol>\n  <\/svg>\n\n  <button class=\"interdata-carousel-arrow interdata-carousel-prev\" type=\"button\" aria-label=\"Xem 3 g\u00f3i tr\u01b0\u1edbc\" onclick=\"var r=this.closest('[data-interdata-carousel]');if(!r)return false;var t=r.querySelector('.interdata-plan-track'),c=t?t.querySelectorAll('.interdata-plan-card'):[];if(!t||!c.length)return false;var v=window.matchMedia('(max-width:480px)').matches?1:(window.matchMedia('(max-width:800px)').matches?2:3),m=Math.max(0,c.length-Math.min(v,c.length||1)),s=[],i=0;while(i&lt;m){s.push(i);i+=v}if(!s.length||s[s.length-1]!==m)s.push(m);var p=parseInt(r.getAttribute('data-inline-page')||'0',10);p=(p-1+s.length)%s.length;r.setAttribute('data-inline-page',p);var g=parseFloat(window.getComputedStyle(t).gap)||12,w=c[0].getBoundingClientRect().width;t.style.transition='transform .45s ease';t.style.transform='translate3d('+(-(w+g)*s[p])+'px,0,0)';return false;\">\n    <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M15 18l-6-6 6-6\"><\/path><\/svg>\n    <span class=\"interdata-carousel-mark\" aria-hidden=\"true\">&#8249;<\/span>\n  <\/button>\n\n  <div class=\"interdata-plan-viewport\">\n    <div class=\"interdata-plan-track\">\n      <!-- 7 card d\u1ef1 ph\u00f2ng: JavaScript s\u1ebd \u0111\u1ed3ng b\u1ed9 l\u1ea1i t\u1eeb API portal khi trang t\u1ea3i. -->\n      <article class=\"interdata-plan-card\" data-plan-pid=\"490\">\n        <h3 class=\"interdata-plan-title\">Premium Base<\/h3>\n        <div class=\"interdata-plan-price\">299.000 \u0111<span>\/3 th\u00e1ng<\/span><\/div>\n        <div class=\"interdata-plan-badge\">GIA H\u1ea0N KH\u00d4NG \u0110\u1ed4I GI\u00c1<\/div>\n        <ul class=\"interdata-plan-features\">\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-cpu\"><\/use><\/svg><\/span>2 vCore Intel Xeon Scalable<\/li>\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-ram\"><\/use><\/svg><\/span>2 GB RAM<\/li>\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-storage\"><\/use><\/svg><\/span>30 GB SSD NVMe<\/li>\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-network\"><\/use><\/svg><\/span>1 IPv4 Private<\/li>\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-network\"><\/use><\/svg><\/span>300Mbps Network Port<\/li>\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-network\"><\/use><\/svg><\/span>Unlimited Bandwidth<\/li>\n        <\/ul>\n\n        <a class=\"interdata-plan-button\" href=\"https:\/\/support.interdata.vn\/index.php?rp=\/store\/best-value-plans-2026\/best-value-plans-premium-base\" target=\"_blank\" rel=\"noopener\">\u0110\u0103ng k\u00fd ngay<\/a>\n      <\/article>\n\n      <article class=\"interdata-plan-card\" data-plan-pid=\"529\">\n        <h3 class=\"interdata-plan-title\">INTER PLATINUM 1<\/h3>\n        <div class=\"interdata-plan-price\">998.000 \u0111<span>\/n\u0103m<\/span><\/div>\n        <div class=\"interdata-plan-badge\">GIA H\u1ea0N KH\u00d4NG \u0110\u1ed4I GI\u00c1<\/div>\n        <ul class=\"interdata-plan-features\">\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-cpu\"><\/use><\/svg><\/span>2 vCore<\/li>\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-ram\"><\/use><\/svg><\/span>3 GB RAM<\/li>\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-storage\"><\/use><\/svg><\/span>30 GB SSD NVMe<\/li>\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-network\"><\/use><\/svg><\/span>1 IPv4 Private<\/li>\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-network\"><\/use><\/svg><\/span>300Mbps Network Port<\/li>\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-network\"><\/use><\/svg><\/span>Unlimited Bandwidth<\/li>\n        <\/ul>\n\n        <a class=\"interdata-plan-button\" href=\"https:\/\/support.interdata.vn\/index.php?rp=\/store\/inter-platinum-series-2026\/inter-platinum-1\" target=\"_blank\" rel=\"noopener\">\u0110\u0103ng k\u00fd ngay<\/a>\n      <\/article>\n\n      <article class=\"interdata-plan-card\" data-plan-pid=\"530\">\n        <h3 class=\"interdata-plan-title\">INTER PLATINUM 2<\/h3>\n        <div class=\"interdata-plan-price\">2.666.000 \u0111<span>\/n\u0103m<\/span><\/div>\n        <div class=\"interdata-plan-badge\">GIA H\u1ea0N KH\u00d4NG \u0110\u1ed4I GI\u00c1<\/div>\n        <ul class=\"interdata-plan-features\">\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-cpu\"><\/use><\/svg><\/span>5 vCore<\/li>\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-ram\"><\/use><\/svg><\/span>8 GB RAM<\/li>\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-storage\"><\/use><\/svg><\/span>70 GB SSD NVMe<\/li>\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-network\"><\/use><\/svg><\/span>1 IPv4 Private<\/li>\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-network\"><\/use><\/svg><\/span>300Mbps Network Port<\/li>\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-network\"><\/use><\/svg><\/span>Unlimited Bandwidth<\/li>\n        <\/ul>\n\n        <a class=\"interdata-plan-button\" href=\"https:\/\/support.interdata.vn\/index.php?rp=\/store\/inter-platinum-series-2026\/inter-platinum-2\" target=\"_blank\" rel=\"noopener\">\u0110\u0103ng k\u00fd ngay<\/a>\n      <\/article>\n\n      <article class=\"interdata-plan-card\" data-plan-pid=\"531\">\n        <h3 class=\"interdata-plan-title\">INTER PLATINUM 3<\/h3>\n        <div class=\"interdata-plan-price\">5.888.000 \u0111<span>\/n\u0103m<\/span><\/div>\n        <div class=\"interdata-plan-badge\">GIA H\u1ea0N KH\u00d4NG \u0110\u1ed4I GI\u00c1<\/div>\n        <ul class=\"interdata-plan-features\">\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-cpu\"><\/use><\/svg><\/span>9 vCore<\/li>\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-ram\"><\/use><\/svg><\/span>16 GB RAM<\/li>\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-storage\"><\/use><\/svg><\/span>140 GB SSD NVMe<\/li>\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-network\"><\/use><\/svg><\/span>1 IPv4 Private<\/li>\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-network\"><\/use><\/svg><\/span>300Mbps Network Port<\/li>\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-network\"><\/use><\/svg><\/span>Unlimited Bandwidth<\/li>\n        <\/ul>\n\n        <a class=\"interdata-plan-button\" href=\"https:\/\/support.interdata.vn\/index.php?rp=\/store\/inter-platinum-series-2026\/inter-platinum-3\" target=\"_blank\" rel=\"noopener\">\u0110\u0103ng k\u00fd ngay<\/a>\n      <\/article>\n\n      <article class=\"interdata-plan-card\" data-plan-pid=\"521\">\n        <h3 class=\"interdata-plan-title\">BD-Cloud 1<\/h3>\n        <div class=\"interdata-plan-price\">988.000 \u0111<span>\/n\u0103m<\/span><\/div>\n        <div class=\"interdata-plan-badge\">GIA H\u1ea0N KH\u00d4NG \u0110\u1ed4I GI\u00c1<\/div>\n        <ul class=\"interdata-plan-features\">\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-cpu\"><\/use><\/svg><\/span>3 vCore<\/li>\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-ram\"><\/use><\/svg><\/span>3 GB RAM<\/li>\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-storage\"><\/use><\/svg><\/span>30 GB SSD NVMe<\/li>\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-network\"><\/use><\/svg><\/span>1 IPv4 Private<\/li>\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-network\"><\/use><\/svg><\/span>300Mbps Network Port<\/li>\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-network\"><\/use><\/svg><\/span>Unlimited Bandwidth<\/li>\n        <\/ul>\n\n        <a class=\"interdata-plan-button\" href=\"https:\/\/support.interdata.vn\/index.php?rp=\/store\/best-plan-real-cloud\/bd-cloud-1\" target=\"_blank\" rel=\"noopener\">\u0110\u0103ng k\u00fd ngay<\/a>\n      <\/article>\n\n      <article class=\"interdata-plan-card\" data-plan-pid=\"522\">\n        <h3 class=\"interdata-plan-title\">BD-Cloud 2<\/h3>\n        <div class=\"interdata-plan-price\">2.988.000 \u0111<span>\/n\u0103m<\/span><\/div>\n        <div class=\"interdata-plan-badge\">GIA H\u1ea0N KH\u00d4NG \u0110\u1ed4I GI\u00c1<\/div>\n        <ul class=\"interdata-plan-features\">\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-cpu\"><\/use><\/svg><\/span>4 vCore<\/li>\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-ram\"><\/use><\/svg><\/span>8 GB RAM<\/li>\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-storage\"><\/use><\/svg><\/span>80 GB SSD NVMe<\/li>\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-network\"><\/use><\/svg><\/span>1 IPv4 Private<\/li>\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-network\"><\/use><\/svg><\/span>300 Mbps Network Port<\/li>\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-network\"><\/use><\/svg><\/span>Unlimited Bandwidth<\/li>\n        <\/ul>\n\n        <a class=\"interdata-plan-button\" href=\"https:\/\/support.interdata.vn\/index.php?rp=\/store\/best-plan-real-cloud\/bd-cloud-2\" target=\"_blank\" rel=\"noopener\">\u0110\u0103ng k\u00fd ngay<\/a>\n      <\/article>\n\n      <article class=\"interdata-plan-card\" data-plan-pid=\"523\">\n        <h3 class=\"interdata-plan-title\">BD-Cloud 3<\/h3>\n        <div class=\"interdata-plan-price\">5.999.000 \u0111<span>\/n\u0103m<\/span><\/div>\n        <div class=\"interdata-plan-badge\">GIA H\u1ea0N KH\u00d4NG \u0110\u1ed4I GI\u00c1<\/div>\n        <ul class=\"interdata-plan-features\">\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-cpu\"><\/use><\/svg><\/span>8 vCore<\/li>\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-ram\"><\/use><\/svg><\/span>16 GB RAM<\/li>\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-storage\"><\/use><\/svg><\/span>140 GB SSD NVMe<\/li>\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-network\"><\/use><\/svg><\/span>1 IPv4 Private<\/li>\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-network\"><\/use><\/svg><\/span>400 Mbps Network Port<\/li>\n          <li><span class=\"interdata-plan-icon\"><svg><use href=\"#id-icon-network\"><\/use><\/svg><\/span>Unlimited Bandwidth<\/li>\n        <\/ul>\n\n        <a class=\"interdata-plan-button\" href=\"https:\/\/support.interdata.vn\/index.php?rp=\/store\/best-plan-real-cloud\/bd-cloud-3\" target=\"_blank\" rel=\"noopener\">\u0110\u0103ng k\u00fd ngay<\/a>\n      <\/article>\n    <\/div>\n  <\/div>\n\n  <button class=\"interdata-carousel-arrow interdata-carousel-next\" type=\"button\" aria-label=\"Xem 3 g\u00f3i ti\u1ebfp theo\" onclick=\"var r=this.closest('[data-interdata-carousel]');if(!r)return false;var t=r.querySelector('.interdata-plan-track'),c=t?t.querySelectorAll('.interdata-plan-card'):[];if(!t||!c.length)return false;var v=window.matchMedia('(max-width:480px)').matches?1:(window.matchMedia('(max-width:800px)').matches?2:3),m=Math.max(0,c.length-Math.min(v,c.length||1)),s=[],i=0;while(i&lt;m){s.push(i);i+=v}if(!s.length||s[s.length-1]!==m)s.push(m);var p=parseInt(r.getAttribute('data-inline-page')||'0',10);p=(p+1)%s.length;r.setAttribute('data-inline-page',p);var g=parseFloat(window.getComputedStyle(t).gap)||12,w=c[0].getBoundingClientRect().width;t.style.transition='transform .45s ease';t.style.transform='translate3d('+(-(w+g)*s[p])+'px,0,0)';return false;\">\n    <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M9 18l6-6-6-6\"><\/path><\/svg>\n    <span class=\"interdata-carousel-mark\" aria-hidden=\"true\">&#8250;<\/span>\n  <\/button>\n<\/div>\n\n<script>\n(function(){\n  var API_GROUPS=[\n    {url:'https:\/\/support.interdata.vn\/packages.php?gid=89&module',pids:[490]},\n    {url:'https:\/\/support.interdata.vn\/packages.php?gid=100&module',pids:[529,530,531]},\n    {url:'https:\/\/support.interdata.vn\/packages.php?gid=97&module',pids:[521,522,523]}\n  ];\n  var PLAN_CYCLES={\n    490:{key:'quarterly',label:'3 th\u00e1ng'},\n    529:{key:'annually',label:'n\u0103m'},\n    530:{key:'annually',label:'n\u0103m'},\n    531:{key:'annually',label:'n\u0103m'},\n    521:{key:'annually',label:'n\u0103m'},\n    522:{key:'annually',label:'n\u0103m'},\n    523:{key:'annually',label:'n\u0103m'}\n  };\n\n  function fetchPlanData(){\n    if(window.interdataPlanApiPromise)return window.interdataPlanApiPromise;\n\n    window.interdataPlanApiPromise=Promise.all(API_GROUPS.map(function(group){\n      return fetch(group.url,{method:'GET',mode:'cors',cache:'no-store'})\n        .then(function(response){\n          if(!response.ok)throw new Error('API '+response.status);\n          return response.json();\n        })\n        .then(function(data){\n          if(!data||data.success!==true||!Array.isArray(data.products))return [];\n          return data.products.filter(function(product){\n            return group.pids.indexOf(Number(product.pid))!==-1;\n          });\n        })\n        .catch(function(error){\n          console.warn('Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt nh\u00f3m g\u00f3i InterData:',group.url,error);\n          return [];\n        });\n    })).then(function(groups){\n      return groups.reduce(function(all,products){return all.concat(products);},[]);\n    });\n\n    return window.interdataPlanApiPromise;\n  }\n\n  function parseDescription(html){\n    var source=String(html||'')\n      .replace(\/<brs*\/?>\/gi,'n')\n      .replace(\/<\/(p|div|li)>\/gi,'n');\n    var holder=document.createElement('div');\n    holder.innerHTML=source;\n    var strong=holder.querySelector('strong');\n    var badge=strong?strong.textContent.trim():'';\n    var lines=(holder.textContent||'').split(\/r?n\/).map(function(line){\n      return line.trim();\n    }).filter(Boolean);\n    if(badge&&lines[0]===badge)lines.shift();\n    return {badge:badge,features:lines};\n  }\n\n  function iconForFeature(feature){\n    if(\/ram\/i.test(feature))return 'id-icon-ram';\n    if(\/ssd|nvme|storage|disk\/i.test(feature))return 'id-icon-storage';\n    if(\/vcore|vcpu|cpu|xeon|amd\/i.test(feature))return 'id-icon-cpu';\n    if(\/ipv4|network|mbps|gbps|bandwidth\/i.test(feature))return 'id-icon-network';\n    return 'id-icon-gift';\n  }\n\n  function createFeatureItem(feature){\n    var item=document.createElement('li');\n    var icon=document.createElement('span');\n    var svg=document.createElementNS('http:\/\/www.w3.org\/2000\/svg','svg');\n    var use=document.createElementNS('http:\/\/www.w3.org\/2000\/svg','use');\n    icon.className='interdata-plan-icon';\n    use.setAttribute('href','#'+iconForFeature(feature));\n    svg.appendChild(use);\n    icon.appendChild(svg);\n    item.appendChild(icon);\n    item.appendChild(document.createTextNode(feature));\n    return item;\n  }\n\n  function updateCardFromApi(root,product){\n    var pid=Number(product.pid);\n    var cycle=PLAN_CYCLES[pid];\n    var card=root.querySelector('[data-plan-pid=\"'+pid+'\"]');\n    if(!card||!cycle)return;\n\n    var title=card.querySelector('.interdata-plan-title');\n    var priceBox=card.querySelector('.interdata-plan-price');\n    var badgeBox=card.querySelector('.interdata-plan-badge');\n    var featureList=card.querySelector('.interdata-plan-features');\n    var button=card.querySelector('.interdata-plan-button');\n    var description=parseDescription(product.description);\n    var pricing=product.pricing&&product.pricing.VND;\n    var price=pricing?Number(pricing[cycle.key]):-1;\n\n    if(title&&product.name)title.textContent=product.name;\n    if(priceBox&&Number.isFinite(price)&&price>=0){\n      priceBox.textContent=Math.round(price).toLocaleString('vi-VN')+' \u0111';\n      var suffix=document.createElement('span');\n      suffix.textContent='\/'+cycle.label;\n      priceBox.appendChild(suffix);\n    }\n    if(badgeBox&&description.badge)badgeBox.textContent=description.badge;\n    if(featureList&&description.features.length){\n      featureList.textContent='';\n      description.features.forEach(function(feature){\n        featureList.appendChild(createFeatureItem(feature));\n      });\n    }\n    if(button&&product.product_url)button.href=product.product_url;\n  }\n\n  function setupInterDataCarousel(root){\n    var track=root.querySelector('.interdata-plan-track');\n    var prev=root.querySelector('.interdata-carousel-prev');\n    var next=root.querySelector('.interdata-carousel-next');\n    if(!track||!prev||!next||track.dataset.ready==='1')return;\n    track.dataset.ready='1';\n    prev.disabled=false;\n    next.disabled=false;\n    var activePage=0;\n    var touchStartX=null;\n\n    function visibleCards(){\n      if(window.matchMedia&&window.matchMedia('(max-width:480px)').matches)return 1;\n      if(window.matchMedia&&window.matchMedia('(max-width:800px)').matches)return 2;\n      return 3;\n    }\n\n    function pageStarts(){\n      var total=track.querySelectorAll('.interdata-plan-card').length;\n      var visible=Math.min(visibleCards(),total||1);\n      var maxStart=Math.max(0,total-visible);\n      var starts=[];\n      var start=0;\n      while(start<maxStart){\n        starts.push(start);\n        start+=visible;\n      }\n      if(!starts.length||starts[starts.length-1]!==maxStart)starts.push(maxStart);\n      return starts;\n    }\n\n    function renderSlide(animate){\n      var cards=track.querySelectorAll('.interdata-plan-card');\n      var starts=pageStarts();\n      if(!cards.length||!starts.length)return;\n      if(activePage>=starts.length)activePage=starts.length-1;\n      if(activePage<0)activePage=0;\n\n      var cardWidth=cards[0].getBoundingClientRect().width;\n      var trackStyle=window.getComputedStyle?window.getComputedStyle(track):null;\n      var gap=trackStyle?parseFloat(trackStyle.columnGap||trackStyle.gap):12;\n      if(!Number.isFinite(gap))gap=12;\n      if(cardWidth<=0)return;\n\n      track.style.transition=animate?'transform .45s ease':'none';\n      track.style.transform='translate3d('+(-(cardWidth+gap)*starts[activePage])+'px,0,0)';\n      prev.setAttribute('aria-disabled',starts.length>1?'false':'true');\n      next.setAttribute('aria-disabled',starts.length>1?'false':'true');\n    }\n\n    function move(direction){\n      var starts=pageStarts();\n      if(starts.length<=1)return;\n      activePage=parseInt(root.getAttribute('data-inline-page')||activePage,10)||0;\n      activePage=(activePage+direction+starts.length)%starts.length;\n      root.setAttribute('data-inline-page',activePage);\n      renderSlide(true);\n    }\n\n    track.addEventListener('touchstart',function(event){\n      touchStartX=event.touches&&event.touches[0]?event.touches[0].clientX:null;\n    },{passive:true});\n    track.addEventListener('touchend',function(event){\n      if(touchStartX===null)return;\n      var endX=event.changedTouches&&event.changedTouches[0]?event.changedTouches[0].clientX:touchStartX;\n      var distance=endX-touchStartX;\n      touchStartX=null;\n      if(Math.abs(distance)>=40)move(distance<0?1:-1);\n    },{passive:true});\n\n    function resetAfterResize(){\n      activePage=0;\n      root.setAttribute('data-inline-page','0');\n      renderSlide(false);\n    }\n\n    window.addEventListener('resize',resetAfterResize);\n    window.addEventListener('load',resetAfterResize);\n    if('ResizeObserver' in window){\n      var resizeObserver=new ResizeObserver(function(){renderSlide(false);});\n      resizeObserver.observe(root);\n    }\n    window.requestAnimationFrame(function(){renderSlide(false);});\n    window.setTimeout(function(){renderSlide(false);},250);\n    window.setTimeout(function(){renderSlide(false);},1000);\n\n    fetchPlanData().then(function(products){\n      products.forEach(function(product){updateCardFromApi(root,product);});\n      renderSlide(false);\n    });\n  }\n\n  function initInterDataCarousels(){\n    document.querySelectorAll('[data-interdata-carousel]').forEach(setupInterDataCarousel);\n  }\n\n  if(document.readyState==='loading'){\n    document.addEventListener('DOMContentLoaded',initInterDataCarousels);\n  }else{\n    initInterDataCarousels();\n  }\n\n  if('MutationObserver' in window){\n    var initQueued=false;\n    new MutationObserver(function(){\n      if(initQueued)return;\n      initQueued=true;\n      window.requestAnimationFrame(function(){\n        initQueued=false;\n        initInterDataCarousels();\n      });\n    }).observe(document.documentElement,{childList:true,subtree:true});\n  }\n})();\n<\/script>\n\n\t<div id=\"gap-1594377116\" class=\"gap-element clearfix\" style=\"display:block; height:auto;\">\n\t\t\n<style>\n#gap-1594377116 {\n  padding-top: 15px;\n}\n<\/style>\n\t<\/div>\n\t\n<p><!-- ==================== SECTION 1 ==================== --><\/p>\n<h2 id=\"section1\" style=\"color: #1e3a8a; font-size: 24px; font-weight: bold; text-align: left; border-left: 5px solid #2563EB; padding-left: 15px; margin: 40px 0 20px; line-height: 1.4;\">Certbot v\u00e0 Let&#8217;s Encrypt l\u00e0 g\u00ec?<\/h2>\n<p style=\"text-align: justify;\"><strong>Let&#8217;s Encrypt<\/strong> l\u00e0 t\u1ed5 ch\u1ee9c c\u1ea5p <a href=\"https:\/\/interdata.vn\/blog\/ssl-la-gi\/\">ch\u1ee9ng ch\u1ec9 SSL<\/a> mi\u1ec5n ph\u00ed, ho\u1ea1t \u0111\u1ed9ng phi l\u1ee3i nhu\u1eadn d\u01b0\u1edbi s\u1ef1 b\u1ea3o tr\u1ee3 c\u1ee7a ISRG (Internet Security Research Group). M\u1ed7i ch\u1ee9ng ch\u1ec9 c\u00f3 th\u1eddi h\u1ea1n 90 ng\u00e0y v\u00e0 \u0111\u01b0\u1ee3c c\u1ea5p t\u1ef1 \u0111\u1ed9ng qua ACME protocol (RFC 8555) \u2014 kh\u00f4ng c\u1ea7n g\u1eedi email, kh\u00f4ng c\u1ea7n x\u00e1c minh th\u1ee7 c\u00f4ng.<\/p>\n<p style=\"text-align: justify;\"><strong>Certbot<\/strong> l\u00e0 c\u00f4ng c\u1ee5 d\u00f2ng l\u1ec7nh m\u00e3 ngu\u1ed3n m\u1edf do EFF (Electronic Frontier Foundation) ph\u00e1t tri\u1ec3n, \u0111\u00f3ng vai tr\u00f2 ACME client. N\u00f3i \u0111\u01a1n gi\u1ea3n: Certbot giao ti\u1ebfp v\u1edbi <a href=\"https:\/\/interdata.vn\/blog\/lets-encrypt-la-gi\/\">Let&#8217;s Encrypt<\/a> \u0111\u1ec3 y\u00eau c\u1ea7u, x\u00e1c minh v\u00e0 c\u00e0i \u0111\u1eb7t ch\u1ee9ng ch\u1ec9 SSL l\u00ean server c\u1ee7a b\u1ea1n. Certbot h\u1ed7 tr\u1ee3 s\u1eb5n plugin cho Nginx v\u00e0 Apache \u2014 t\u1ef1 \u0111\u1ed9ng ch\u1ec9nh c\u1ea5u h\u00ecnh web server \u0111\u1ec3 b\u1eadt <a href=\"https:\/\/interdata.vn\/blog\/giao-thuc-https-la-gi\/\">HTTPS<\/a>.<\/p>\n<p style=\"text-align: justify;\">Quy tr\u00ecnh ho\u1ea1t \u0111\u1ed9ng c\u1ed1t l\u00f5i: Certbot t\u1ea1o CSR (Certificate Signing Request) \u2192 g\u1eedi challenge x\u00e1c minh quy\u1ec1n s\u1edf h\u1eefu domain (HTTP-01 ho\u1eb7c DNS-01) \u2192 Let&#8217;s Encrypt c\u1ea5p ch\u1ee9ng ch\u1ec9 \u2192 Certbot l\u01b0u file <code>fullchain.pem<\/code> v\u00e0 <code>privkey.pem<\/code> v\u00e0o th\u01b0 m\u1ee5c <code>\/etc\/letsencrypt\/live\/domain\/<\/code> \u2192 c\u1ea5u h\u00ecnh web server tr\u1ecf t\u1edbi file ch\u1ee9ng ch\u1ec9.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-43144\" src=\"https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2026\/08\/Certbot-homepage.png\" alt=\"Certbot homepage\" width=\"1000\" height=\"483\" title=\"\" srcset=\"https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2026\/08\/Certbot-homepage.png 1858w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2026\/08\/Certbot-homepage-300x145.png 300w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2026\/08\/Certbot-homepage-1024x495.png 1024w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2026\/08\/Certbot-homepage-768x371.png 768w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2026\/08\/Certbot-homepage-1536x742.png 1536w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/p>\n<p><!-- ==================== SECTION 2 ==================== --><\/p>\n<h2 id=\"section2\" style=\"color: #1e3a8a; font-size: 24px; font-weight: bold; text-align: left; border-left: 5px solid #2563EB; padding-left: 15px; margin: 40px 0 20px; line-height: 1.4;\">\u0110i\u1ec1u ki\u1ec7n ti\u00ean quy\u1ebft tr\u01b0\u1edbc khi c\u00e0i SSL Let&#8217;s Encrypt b\u1eb1ng Certbot<\/h2>\n<p style=\"text-align: justify;\">B\u1ecf qua b\u01b0\u1edbc n\u00e0y l\u00e0 nguy\u00ean nh\u00e2n s\u1ed1 m\u1ed9t khi\u1ebfn Certbot b\u00e1o l\u1ed7i. Tr\u01b0\u1edbc khi ch\u1ea1y b\u1ea5t k\u1ef3 l\u1ec7nh n\u00e0o, \u0111\u1ea3m b\u1ea3o \u0111\u1ee7 5 \u0111i\u1ec1u ki\u1ec7n sau:<\/p>\n<ul>\n<li style=\"margin-bottom: 8px;\"><strong><a href=\"https:\/\/interdata.vn\/blog\/vps-la-gi\/\">VPS<\/a> ho\u1eb7c server c\u00f3 quy\u1ec1n root (sudo)<\/strong> \u2014 Shared Hosting th\u01b0\u1eddng kh\u00f4ng cho ph\u00e9p c\u00e0i Certbot v\u00ec kh\u00f4ng c\u00f3 quy\u1ec1n root v\u00e0 kh\u00f4ng truy c\u1eadp \u0111\u01b0\u1ee3c c\u1ea5u h\u00ecnh web server.<\/li>\n<li style=\"margin-bottom: 8px;\"><strong>Domain \u0111\u00e3 tr\u1ecf b\u1ea3n ghi A\/AAAA v\u1ec1 \u0111\u00fang IP server<\/strong> \u2014 Certbot c\u1ea7n x\u00e1c minh quy\u1ec1n s\u1edf h\u1eefu domain. N\u1ebfu DNS ch\u01b0a propagate xong, challenge s\u1ebd th\u1ea5t b\u1ea1i. Ki\u1ec3m tra b\u1eb1ng l\u1ec7nh <code>dig +short yourdomain.com<\/code> ho\u1eb7c <code>nslookup yourdomain.com<\/code>.<\/li>\n<li style=\"margin-bottom: 8px;\"><strong>Web server (<a href=\"https:\/\/interdata.vn\/blog\/nginx-la-gi\/\">Nginx<\/a> ho\u1eb7c Apache) \u0111\u00e3 c\u00e0i \u0111\u1eb7t v\u00e0 \u0111ang ch\u1ea1y<\/strong> \u2014 N\u1ebfu ch\u01b0a c\u00e0i Nginx, tham kh\u1ea3o <a href=\"https:\/\/interdata.vn\/blog\/huong-dan-cai-dat-nginx-ubuntu-centos\/\">h\u01b0\u1edbng d\u1eabn c\u00e0i \u0111\u1eb7t Nginx tr\u00ean Ubuntu\/CentOS<\/a>.<\/li>\n<li style=\"margin-bottom: 8px;\"><strong>Port 80 (HTTP) v\u00e0 port 443 (HTTPS) \u0111\u00e3 m\u1edf tr\u00ean <a href=\"https:\/\/interdata.vn\/blog\/tuong-lua-firewall\/\">t\u01b0\u1eddng l\u1eeda (firewall)<\/a><\/strong> \u2014 Certbot d\u00f9ng HTTP-01 challenge qua port 80. N\u1ebfu port b\u1ecb ch\u1eb7n, challenge th\u1ea5t b\u1ea1i ngay l\u1eadp t\u1ee9c.<\/li>\n<li style=\"margin-bottom: 8px;\"><strong>Server block (Nginx) ho\u1eb7c VirtualHost (Apache) \u0111\u00e3 c\u1ea5u h\u00ecnh cho domain<\/strong> \u2014 Certbot c\u1ea7n t\u00ecm \u0111\u00fang c\u1ea5u h\u00ecnh c\u1ee7a domain \u0111\u1ec3 ch\u00e8n \u0111\u01b0\u1eddng d\u1eabn ch\u1ee9ng ch\u1ec9.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Ki\u1ec3m tra nhanh port 80 v\u00e0 443 tr\u00ean Ubuntu (UFW):<\/p>\n<pre><code># Ki\u1ec3m tra tr\u1ea1ng th\u00e1i firewall\r\nsudo ufw status\r\n\r\n# M\u1edf port 80 v\u00e0 443 n\u1ebfu ch\u01b0a m\u1edf\r\nsudo ufw allow 80\/tcp\r\nsudo ufw allow 443\/tcp<\/code><\/pre>\n<p style=\"text-align: justify;\">Tr\u00ean CentOS\/AlmaLinux (firewalld):<\/p>\n<pre><code># M\u1edf port 80 v\u00e0 443\r\nsudo firewall-cmd --permanent --add-service=http\r\nsudo firewall-cmd --permanent --add-service=https\r\nsudo firewall-cmd --reload<\/code><\/pre>\n<p><!-- BOX CTA #1 \u2014 VPS --><\/p>\n<div style=\"display: flex; flex-wrap: wrap; background-color: #fff; border: 1.5px solid #BFDBFE; box-shadow: 0 8px 20px rgba(37,99,235,0.08); border-radius: 12px; overflow: hidden; margin: 35px 0;\">\n<div style=\"flex: 1; min-width: 250px; background: linear-gradient(135deg, #1E3A8A 0%, #2563EB 100%); display: flex; align-items: center; justify-content: center; padding: 30px; text-align: center;\">\n<div>\n<p style=\"color: #fff; font-size: 34px; font-family: 'Be Vietnam Pro', sans-serif; font-weight: bold; margin: 0; line-height: 1.1;\">Thu\u00ea VPS InterData<\/p>\n<p style=\"color: #dbeafe; font-size: 15px; font-weight: 600; margin-top: 12px;\">CPU th\u1ebf h\u1ec7 m\u1edbi, SSD NVMe U.2, h\u1ed7 tr\u1ee3 k\u1ef9 thu\u1eadt 24\/7<\/p>\n<\/div>\n<\/div>\n<div style=\"flex: 2; padding: 25px; min-width: 300px;\">\n<h3 style=\"font-family: 'Be Vietnam Pro', sans-serif; color: #1e3a8a; margin-top: 0; font-size: 20px;\">C\u1ea7n VPS c\u00f3 quy\u1ec1n root \u0111\u1ec3 t\u1ef1 c\u00e0i SSL b\u1eb1ng Certbot?<\/h3>\n<p style=\"text-align: justify; font-size: 15px; margin-bottom: 15px;\">To\u00e0n b\u1ed9 quy tr\u00ecnh c\u00e0i Certbot y\u00eau c\u1ea7u quy\u1ec1n sudo, truy c\u1eadp c\u1ea5u h\u00ecnh Nginx\/Apache v\u00e0 m\u1edf port 80\/443 tr\u00ean firewall \u2014 nh\u1eefng thao t\u00e1c kh\u00f4ng th\u1ec3 l\u00e0m tr\u00ean Shared Hosting. VPS t\u1ea1i InterData ch\u1ea1y SSD NVMe U.2, trang b\u1ecb ch\u1ed1ng DDoS v\u00e0 backup \u0111\u1ecbnh k\u1ef3, cho b\u1ea1n to\u00e0n quy\u1ec1n c\u1ea5u h\u00ecnh server t\u1eeb \u0111\u1ea7u.<\/p>\n<p><a style=\"background: linear-gradient(90deg, #2563EB 0%, #1E3A8A 100%); color: #fff; padding: 12px 25px; text-decoration: none; font-weight: 600; border-radius: 8px; font-size: 15px; display: inline-block; box-shadow: 0 5px 15px rgba(37,99,235,0.3);\" href=\"https:\/\/interdata.vn\/thue-vps\/\" target=\"_blank\" rel=\"noopener\">Xem g\u00f3i VPS c\u00e0i SSL ngay \u27f6<\/a><\/p>\n<\/div>\n<\/div>\n<p><!-- ==================== SECTION 3 ==================== --><\/p>\n<h2 id=\"section3\" style=\"color: #1e3a8a; font-size: 24px; font-weight: bold; text-align: left; border-left: 5px solid #2563EB; padding-left: 15px; margin: 40px 0 20px; line-height: 1.4;\">H\u01b0\u1edbng d\u1eabn c\u00e0i SSL Let&#8217;s Encrypt b\u1eb1ng Certbot tr\u00ean Nginx<\/h2>\n<p style=\"text-align: justify;\">Ph\u1ea7n n\u00e0y d\u00e0nh cho server ch\u1ea1y Nginx. Certbot c\u00f3 plugin ri\u00eang cho Nginx \u2014 t\u1ef1 \u0111\u1ed9ng t\u00ecm server block, c\u00e0i ch\u1ee9ng ch\u1ec9 v\u00e0 c\u1ea5u h\u00ecnh redirect HTTP \u2192 HTTPS.<\/p>\n<h3 style=\"color: #1e3a8a; font-size: 20px; font-weight: 600; margin: 30px 0 15px;\">B\u01b0\u1edbc 1: C\u00e0i Certbot v\u00e0 plugin Nginx<\/h3>\n<p style=\"text-align: justify;\"><strong>Tr\u00ean Ubuntu 20.04\/22.04\/24.04 (c\u00e0i qua Snap \u2014 khuy\u00ean d\u00f9ng theo t\u00e0i li\u1ec7u ch\u00ednh th\u1ee9c certbot.eff.org):<\/strong><\/p>\n<pre><code># G\u1ee1 certbot c\u0169 (n\u1ebfu c\u00f3) \u0111\u1ec3 tr\u00e1nh xung \u0111\u1ed9t\r\nsudo apt remove certbot -y\r\n\r\n# C\u00e0i Snap core v\u00e0 c\u1eadp nh\u1eadt\r\nsudo snap install core; sudo snap refresh core\r\n\r\n# C\u00e0i Certbot qua Snap\r\nsudo snap install --classic certbot\r\n\r\n# T\u1ea1o symlink \u0111\u1ec3 g\u1ecdi certbot t\u1eeb b\u1ea5t k\u1ef3 \u0111\u00e2u\r\nsudo ln -s \/snap\/bin\/certbot \/usr\/bin\/certbot<\/code><\/pre>\n<p style=\"text-align: justify;\"><strong>Tr\u00ean CentOS 8\/AlmaLinux 8+ (EPEL + dnf):<\/strong><\/p>\n<pre><code># C\u00e0i EPEL repository\r\nsudo dnf install epel-release -y\r\n\r\n# C\u00e0i Certbot v\u00e0 plugin Nginx\r\nsudo dnf install certbot python3-certbot-nginx -y<\/code><\/pre>\n<h3 style=\"color: #1e3a8a; font-size: 20px; font-weight: 600; margin: 30px 0 15px;\">B\u01b0\u1edbc 2: Ki\u1ec3m tra c\u1ea5u h\u00ecnh server block Nginx<\/h3>\n<p style=\"text-align: justify;\">Certbot c\u1ea7n t\u00ecm \u0111\u00fang <code>server_name<\/code> trong file c\u1ea5u h\u00ecnh Nginx. M\u1edf file config domain c\u1ee7a b\u1ea1n (th\u01b0\u1eddng n\u1eb1m \u1edf <code>\/etc\/nginx\/sites-available\/<\/code> tr\u00ean Ubuntu ho\u1eb7c <code>\/etc\/nginx\/conf.d\/<\/code> tr\u00ean CentOS):<\/p>\n<pre><code># M\u1edf file config (thay yourdomain.com b\u1eb1ng domain th\u1eadt)\r\nsudo nano \/etc\/nginx\/sites-available\/yourdomain.com<\/code><\/pre>\n<p style=\"text-align: justify;\">\u0110\u1ea3m b\u1ea3o d\u00f2ng <code>server_name<\/code> kh\u1edbp ch\u00ednh x\u00e1c v\u1edbi domain b\u1ea1n mu\u1ed1n c\u00e0i SSL:<\/p>\n<pre><code>server {\r\n    listen 80;\r\n    server_name yourdomain.com www.yourdomain.com;\r\n    root \/var\/www\/yourdomain.com\/html;\r\n    index index.html index.htm;\r\n}<\/code><\/pre>\n<p style=\"text-align: justify;\">Ki\u1ec3m tra c\u00fa ph\u00e1p Nginx v\u00e0 reload \u2014 \u0111\u00e2y l\u00e0 <a href=\"https:\/\/interdata.vn\/blog\/cac-cau-lenh-co-ban-trong-linux\/\">l\u1ec7nh Linux c\u01a1 b\u1ea3n<\/a> c\u1ea7n n\u1eafm khi qu\u1ea3n tr\u1ecb server:<\/p>\n<pre><code># Ki\u1ec3m tra c\u00fa ph\u00e1p config\r\nsudo nginx -t\r\n\r\n# Reload Nginx n\u1ebfu kh\u00f4ng c\u00f3 l\u1ed7i\r\nsudo systemctl reload nginx<\/code><\/pre>\n<h3 style=\"color: #1e3a8a; font-size: 20px; font-weight: 600; margin: 30px 0 15px;\">B\u01b0\u1edbc 3: Ch\u1ea1y Certbot c\u00e0i SSL cho Nginx<\/h3>\n<pre><code># C\u00e0i SSL v\u00e0 t\u1ef1 \u0111\u1ed9ng c\u1ea5u h\u00ecnh Nginx\r\nsudo certbot --nginx -d yourdomain.com -d www.yourdomain.com<\/code><\/pre>\n<p style=\"text-align: justify;\">Certbot s\u1ebd h\u1ecfi email (\u0111\u1ec3 nh\u1eadn th\u00f4ng b\u00e1o h\u1ebft h\u1ea1n), \u0111\u1ed3ng \u00fd \u0111i\u1ec1u kho\u1ea3n d\u1ecbch v\u1ee5, v\u00e0 h\u1ecfi c\u00f3 mu\u1ed1n redirect to\u00e0n b\u1ed9 HTTP sang HTTPS kh\u00f4ng. Ch\u1ecdn redirect (option 2) \u0111\u1ec3 m\u1ecdi request HTTP t\u1ef1 \u0111\u1ed9ng chuy\u1ec3n sang HTTPS.<\/p>\n<p style=\"text-align: justify;\">Sau khi ch\u1ea1y xong, Certbot t\u1ef1 \u0111\u1ed9ng th\u00eam block SSL v\u00e0o file config Nginx, tr\u1ecf t\u1edbi <code>fullchain.pem<\/code> v\u00e0 <code>privkey.pem<\/code> trong <code>\/etc\/letsencrypt\/live\/yourdomain.com\/<\/code>.<\/p>\n<h3 style=\"color: #1e3a8a; font-size: 20px; font-weight: 600; margin: 30px 0 15px;\">B\u01b0\u1edbc 4: Ki\u1ec3m tra SSL \u0111\u00e3 ho\u1ea1t \u0111\u1ed9ng<\/h3>\n<pre><code># Ki\u1ec3m tra ch\u1ee9ng ch\u1ec9 qua OpenSSL\r\necho | openssl s_client -servername yourdomain.com -connect yourdomain.com:443 2&gt;\/dev\/null | openssl x509 -noout -dates<\/code><\/pre>\n<p style=\"text-align: justify;\">Ho\u1eb7c truy c\u1eadp <code>https:\/\/yourdomain.com<\/code> tr\u00ean tr\u00ecnh duy\u1ec7t \u2014 bi\u1ec3u t\u01b0\u1ee3ng \u1ed5 kh\u00f3a xu\u1ea5t hi\u1ec7n ngh\u0129a l\u00e0 SSL \u0111\u00e3 c\u00e0i th\u00e0nh c\u00f4ng. D\u00f9ng <a href=\"https:\/\/www.ssllabs.com\/ssltest\/\" target=\"_blank\" rel=\"noopener nofollow\">SSL Labs<\/a> \u0111\u1ec3 ki\u1ec3m tra chi ti\u1ebft c\u1ea5u h\u00ecnh SSL.<\/p>\n<p><!-- ==================== SECTION 4 ==================== --><\/p>\n<h2 id=\"section4\" style=\"color: #1e3a8a; font-size: 24px; font-weight: bold; text-align: left; border-left: 5px solid #2563EB; padding-left: 15px; margin: 40px 0 20px; line-height: 1.4;\">H\u01b0\u1edbng d\u1eabn c\u00e0i SSL Let&#8217;s Encrypt b\u1eb1ng Certbot tr\u00ean Apache<\/h2>\n<p style=\"text-align: justify;\">Quy tr\u00ecnh t\u01b0\u01a1ng t\u1ef1 Nginx nh\u01b0ng d\u00f9ng plugin Apache. Certbot s\u1ebd ch\u1ec9nh file VirtualHost thay v\u00ec server block.<\/p>\n<h3 style=\"color: #1e3a8a; font-size: 20px; font-weight: 600; margin: 30px 0 15px;\">B\u01b0\u1edbc 1: C\u00e0i Certbot v\u00e0 plugin Apache<\/h3>\n<p style=\"text-align: justify;\"><strong>Tr\u00ean Ubuntu 20.04\/22.04\/24.04 (Snap):<\/strong><\/p>\n<pre><code># G\u1ee1 certbot c\u0169, c\u00e0i qua Snap\r\nsudo apt remove certbot -y\r\nsudo snap install --classic certbot\r\nsudo ln -s \/snap\/bin\/certbot \/usr\/bin\/certbot<\/code><\/pre>\n<p style=\"text-align: justify;\"><strong>Tr\u00ean CentOS 8\/AlmaLinux 8+:<\/strong><\/p>\n<pre><code>sudo dnf install epel-release -y\r\nsudo dnf install certbot python3-certbot-apache -y<\/code><\/pre>\n<h3 style=\"color: #1e3a8a; font-size: 20px; font-weight: 600; margin: 30px 0 15px;\">B\u01b0\u1edbc 2: Ki\u1ec3m tra VirtualHost Apache<\/h3>\n<p style=\"text-align: justify;\">File VirtualHost th\u01b0\u1eddng n\u1eb1m \u1edf <code>\/etc\/apache2\/sites-available\/<\/code> (Ubuntu) ho\u1eb7c <code>\/etc\/httpd\/conf.d\/<\/code> (CentOS). \u0110\u1ea3m b\u1ea3o <code>ServerName<\/code> kh\u1edbp domain:<\/p>\n<pre><code>&lt;VirtualHost *:80&gt;\r\n    ServerName yourdomain.com\r\n    ServerAlias www.yourdomain.com\r\n    DocumentRoot \/var\/www\/yourdomain.com\/html\r\n&lt;\/VirtualHost&gt;<\/code><\/pre>\n<pre><code># Ki\u1ec3m tra c\u00fa ph\u00e1p Apache\r\n# Ubuntu:\r\nsudo apache2ctl configtest\r\n# CentOS:\r\nsudo apachectl configtest\r\n\r\n# Reload Apache\r\n# Ubuntu:\r\nsudo systemctl reload apache2\r\n# CentOS:\r\nsudo systemctl reload httpd<\/code><\/pre>\n<h3 style=\"color: #1e3a8a; font-size: 20px; font-weight: 600; margin: 30px 0 15px;\">B\u01b0\u1edbc 3: Ch\u1ea1y Certbot c\u00e0i SSL cho Apache<\/h3>\n<pre><code># C\u00e0i SSL v\u00e0 t\u1ef1 \u0111\u1ed9ng c\u1ea5u h\u00ecnh Apache\r\nsudo certbot --apache -d yourdomain.com -d www.yourdomain.com<\/code><\/pre>\n<p style=\"text-align: justify;\">Certbot t\u1ea1o file VirtualHost m\u1edbi cho port 443, b\u1eadt module <code>ssl<\/code> v\u00e0 <code>rewrite<\/code> c\u1ee7a Apache, ch\u00e8n \u0111\u01b0\u1eddng d\u1eabn ch\u1ee9ng ch\u1ec9 v\u00e0 thi\u1ebft l\u1eadp redirect HTTP \u2192 HTTPS. Ki\u1ec3m tra k\u1ebft qu\u1ea3 t\u01b0\u01a1ng t\u1ef1 ph\u1ea7n Nginx: truy c\u1eadp <code>https:\/\/yourdomain.com<\/code> v\u00e0 x\u00e1c nh\u1eadn \u1ed5 kh\u00f3a hi\u1ec3n th\u1ecb.<\/p>\n<p><!-- BOX CTA #2 \u2014 CANH ME --><\/p>\n<div style=\"background: linear-gradient(135deg, #EFF6FF 0%, #DBEAFE 100%); border: 1.5px solid #2563EB; border-radius: 12px; padding: 28px; margin: 35px 0; text-align: center;\">\n<p style=\"font-family: 'Be Vietnam Pro', sans-serif; font-size: 22px; font-weight: bold; color: #1e3a8a; margin: 0 0 8px;\">S\u0103n deal VPS &amp; Cloud Server tr\u01b0\u1edbc khi ch\u1ed1t g\u00f3i<\/p>\n<p style=\"font-size: 15px; color: #4b5563; margin-bottom: 20px;\">Canh Me t\u1ed5ng h\u1ee3p khuy\u1ebfn m\u00e3i, m\u00e3 gi\u1ea3m gi\u00e1 v\u00e0 hot deal VPS, Cloud Server m\u1edbi nh\u1ea5t c\u1ee7a InterData \u2014 xem tr\u01b0\u1edbc \u0111\u1ec3 ch\u1ecdn g\u00f3i ph\u00f9 h\u1ee3p v\u1edbi chi ph\u00ed t\u1ed1t nh\u1ea5t tr\u01b0\u1edbc khi c\u00e0i SSL.<\/p>\n<p><a style=\"background: #2563EB; color: #fff; padding: 12px 30px; text-decoration: none; font-weight: 600; border-radius: 8px; display: inline-block;\" href=\"https:\/\/interdata.vn\/canhme\/\" target=\"_blank\" rel=\"noopener\">Xem hot deal t\u1ea1i Canh Me \u27f6<\/a><\/p>\n<\/div>\n<p><!-- ==================== SECTION 5 ==================== --><\/p>\n<h2 id=\"section5\" style=\"color: #1e3a8a; font-size: 24px; font-weight: bold; text-align: left; border-left: 5px solid #2563EB; padding-left: 15px; margin: 40px 0 20px; line-height: 1.4;\">T\u1ef1 \u0111\u1ed9ng gia h\u1ea1n SSL Let&#8217;s Encrypt \u2014 Certbot renew v\u00e0 cron job<\/h2>\n<p style=\"text-align: justify;\">Ch\u1ee9ng ch\u1ec9 Let&#8217;s Encrypt ch\u1ec9 c\u00f3 h\u1ea1n 90 ng\u00e0y. N\u1ebfu qu\u00ean gia h\u1ea1n, website s\u1ebd hi\u1ec3n th\u1ecb c\u1ea3nh b\u00e1o &#8220;K\u1ebft n\u1ed1i kh\u00f4ng an to\u00e0n&#8221; tr\u00ean tr\u00ecnh duy\u1ec7t. Certbot c\u00e0i qua Snap t\u1ef1 \u0111\u1ed9ng t\u1ea1o systemd timer \u0111\u1ec3 renew, nh\u01b0ng b\u1ea1n n\u00ean ki\u1ec3m tra v\u00e0 \u0111\u1ea3m b\u1ea3o c\u01a1 ch\u1ebf n\u00e0y ho\u1ea1t \u0111\u1ed9ng \u0111\u00fang.<\/p>\n<h3 style=\"color: #1e3a8a; font-size: 20px; font-weight: 600; margin: 30px 0 15px;\">Ki\u1ec3m tra systemd timer (Snap)<\/h3>\n<pre><code># Ki\u1ec3m tra timer Certbot \u0111\u00e3 active ch\u01b0a\r\nsudo systemctl list-timers | grep certbot\r\n\r\n# N\u1ebfu th\u1ea5y snap.certbot.renew.timer \u2192 timer \u0111ang ch\u1ea1y, Certbot s\u1ebd t\u1ef1 gia h\u1ea1n<\/code><\/pre>\n<h3 style=\"color: #1e3a8a; font-size: 20px; font-weight: 600; margin: 30px 0 15px;\">Th\u00eam cron job th\u1ee7 c\u00f4ng (n\u1ebfu c\u00e0i qua apt\/dnf)<\/h3>\n<p style=\"text-align: justify;\">N\u1ebfu c\u00e0i Certbot b\u1eb1ng apt ho\u1eb7c dnf (kh\u00f4ng qua Snap), c\u00f3 th\u1ec3 kh\u00f4ng c\u00f3 systemd timer. Th\u00eam cron job \u0111\u1ec3 ch\u1ea1y renew 2 l\u1ea7n\/ng\u00e0y (Certbot ch\u1ec9 renew khi ch\u1ee9ng ch\u1ec9 c\u00f2n d\u01b0\u1edbi 30 ng\u00e0y):<\/p>\n<pre><code># M\u1edf crontab\r\nsudo crontab -e\r\n\r\n# Th\u00eam d\u00f2ng sau (ch\u1ea1y l\u00fac 3:30 s\u00e1ng v\u00e0 3:30 chi\u1ec1u m\u1ed7i ng\u00e0y)\r\n30 3,15 * * * certbot renew --quiet --deploy-hook \"systemctl reload nginx\"<\/code><\/pre>\n<p style=\"text-align: justify;\">Thay <code>systemctl reload nginx<\/code> b\u1eb1ng <code>systemctl reload apache2<\/code> (Ubuntu) ho\u1eb7c <code>systemctl reload httpd<\/code> (CentOS) n\u1ebfu d\u00f9ng Apache. Flag <code>--deploy-hook<\/code> ch\u1ec9 ch\u1ea1y l\u1ec7nh reload khi c\u00f3 ch\u1ee9ng ch\u1ec9 m\u1edbi \u0111\u01b0\u1ee3c c\u1ea5p \u2014 tr\u00e1nh reload web server kh\u00f4ng c\u1ea7n thi\u1ebft.<\/p>\n<h3 style=\"color: #1e3a8a; font-size: 20px; font-weight: 600; margin: 30px 0 15px;\">Test th\u1eed gia h\u1ea1n v\u1edbi &#8211;dry-run<\/h3>\n<pre><code># M\u00f4 ph\u1ecfng gia h\u1ea1n m\u00e0 kh\u00f4ng t\u1ea1o ch\u1ee9ng ch\u1ec9 th\u1eadt\r\nsudo certbot renew --dry-run<\/code><\/pre>\n<p style=\"text-align: justify;\">N\u1ebfu output hi\u1ec3n th\u1ecb <code>Congratulations, all simulated renewals succeeded<\/code> \u2192 c\u01a1 ch\u1ebf auto-renew ho\u1ea1t \u0111\u1ed9ng b\u00ecnh th\u01b0\u1eddng. N\u1ebfu b\u00e1o l\u1ed7i, ki\u1ec3m tra port 80 c\u00f3 \u0111ang m\u1edf v\u00e0 web server c\u00f3 \u0111ang ch\u1ea1y kh\u00f4ng.<\/p>\n<p><!-- ==================== SECTION 6 ==================== --><\/p>\n<h2 id=\"section6\" style=\"color: #1e3a8a; font-size: 24px; font-weight: bold; text-align: left; border-left: 5px solid #2563EB; padding-left: 15px; margin: 40px 0 20px; line-height: 1.4;\">C\u00e0i wildcard SSL Let&#8217;s Encrypt b\u1eb1ng DNS challenge<\/h2>\n<p style=\"text-align: justify;\">Wildcard SSL b\u1ea3o v\u1ec7 t\u1ea5t c\u1ea3 subdomain c\u00f9ng c\u1ea5p: <code>*.yourdomain.com<\/code> \u2014 ngh\u0129a l\u00e0 <code>blog.yourdomain.com<\/code>, <code>shop.yourdomain.com<\/code>, <code>api.yourdomain.com<\/code> \u0111\u1ec1u d\u00f9ng chung m\u1ed9t ch\u1ee9ng ch\u1ec9. Certbot h\u1ed7 tr\u1ee3 c\u1ea5p wildcard SSL nh\u01b0ng b\u1eaft bu\u1ed9c d\u00f9ng DNS-01 challenge (kh\u00f4ng d\u00f9ng HTTP-01 \u0111\u01b0\u1ee3c).<\/p>\n<h3 style=\"color: #1e3a8a; font-size: 20px; font-weight: 600; margin: 30px 0 15px;\">L\u1ec7nh c\u00e0i wildcard SSL<\/h3>\n<pre><code># Y\u00eau c\u1ea7u wildcard SSL b\u1eb1ng DNS challenge\r\nsudo certbot certonly --manual --preferred-challenges=dns -d \"*.yourdomain.com\" -d yourdomain.com<\/code><\/pre>\n<p style=\"text-align: justify;\">Certbot s\u1ebd y\u00eau c\u1ea7u b\u1ea1n t\u1ea1o b\u1ea3n ghi TXT t\u1ea1i DNS zone c\u1ee7a domain. V\u00ed d\u1ee5:<\/p>\n<pre><code>_acme-challenge.yourdomain.com  TXT  \"chu\u1ed7i_k\u00fd_t\u1ef1_ng\u1eabu_nhi\u00ean_certbot_cung_c\u1ea5p\"<\/code><\/pre>\n<p style=\"text-align: justify;\">Th\u00eam b\u1ea3n ghi TXT n\u00e0y v\u00e0o DNS provider (Cloudflare, NameCheap, Route53\u2026), \u0111\u1ee3i DNS propagate (th\u01b0\u1eddng 1\u20135 ph\u00fat), r\u1ed3i nh\u1ea5n Enter \u0111\u1ec3 Certbot x\u00e1c minh. Sau khi c\u1ea5p xong, b\u1ea1n c\u1ea7n t\u1ef1 c\u1ea5u h\u00ecnh web server tr\u1ecf t\u1edbi file ch\u1ee9ng ch\u1ec9 v\u00ec mode <code>certonly<\/code> kh\u00f4ng t\u1ef1 \u0111\u1ed9ng ch\u1ec9nh config.<\/p>\n<p style=\"text-align: justify;\"><strong>L\u01b0u \u00fd quan tr\u1ecdng:<\/strong> V\u1edbi mode <code>--manual<\/code>, Certbot kh\u00f4ng t\u1ef1 \u0111\u1ed9ng gia h\u1ea1n v\u00ec c\u1ea7n th\u00eam b\u1ea3n ghi TXT m\u1edbi m\u1ed7i l\u1ea7n renew. \u0110\u1ec3 t\u1ef1 \u0111\u1ed9ng h\u00f3a, d\u00f9ng DNS plugin t\u01b0\u01a1ng \u1ee9ng v\u1edbi provider (v\u00ed d\u1ee5: <code>certbot-dns-cloudflare<\/code>, <code>certbot-dns-route53<\/code>). Tham kh\u1ea3o danh s\u00e1ch plugin t\u1ea1i <a href=\"https:\/\/eff-certbot.readthedocs.io\/en\/latest\/using.html#dns-plugins\" target=\"_blank\" rel=\"noopener nofollow\">t\u00e0i li\u1ec7u ch\u00ednh th\u1ee9c Certbot<\/a>.<\/p>\n<p><!-- BOX CTA #3 \u2014 CLOUD SERVER --><\/p>\n<div style=\"display: flex; flex-wrap: wrap; background-color: #fff; border: 1.5px solid #BFDBFE; box-shadow: 0 8px 20px rgba(37,99,235,0.08); border-radius: 12px; overflow: hidden; margin: 35px 0;\">\n<div style=\"flex: 1; min-width: 250px; background: linear-gradient(135deg, #1E3A8A 0%, #2563EB 100%); display: flex; align-items: center; justify-content: center; padding: 30px; text-align: center;\">\n<div>\n<p style=\"color: #fff; font-size: 34px; font-family: 'Be Vietnam Pro', sans-serif; font-weight: bold; margin: 0; line-height: 1.1;\">Cloud Server InterData<\/p>\n<p style=\"color: #dbeafe; font-size: 15px; font-weight: 600; margin-top: 12px;\">N\u00e2ng\/h\u1ea1 t\u00e0i nguy\u00ean nhanh theo t\u1ea3i, m\u1ea1ng t\u1ed1c \u0111\u1ed9 cao<\/p>\n<\/div>\n<\/div>\n<div style=\"flex: 2; padding: 25px; min-width: 300px;\">\n<h3 style=\"font-family: 'Be Vietnam Pro', sans-serif; color: #1e3a8a; margin-top: 0; font-size: 20px;\">Qu\u1ea3n l\u00fd SSL cho nhi\u1ec1u domain v\u00e0 subdomain?<\/h3>\n<p style=\"text-align: justify; font-size: 15px; margin-bottom: 15px;\">Khi ch\u1ea1y wildcard SSL cho nhi\u1ec1u subdomain, host 10+ website tr\u00ean c\u00f9ng server ho\u1eb7c traffic t\u0103ng \u0111\u1ed9t bi\u1ebfn m\u00e0 c\u1ea7n b\u1ed5 sung RAM\/CPU ngay, Cloud Server cho ph\u00e9p n\u00e2ng h\u1ea1 t\u00e0i nguy\u00ean nhanh m\u00e0 kh\u00f4ng c\u1ea7n d\u1ef1ng l\u1ea1i server. InterData cung c\u1ea5p Cloud Server v\u1edbi m\u1ea1ng t\u1ed1c \u0111\u1ed9 cao v\u00e0 h\u1ed7 tr\u1ee3 k\u1ef9 thu\u1eadt 24\/7.<\/p>\n<p><a style=\"background: linear-gradient(90deg, #2563EB 0%, #1E3A8A 100%); color: #fff; padding: 12px 25px; text-decoration: none; font-weight: 600; border-radius: 8px; font-size: 15px; display: inline-block; box-shadow: 0 5px 15px rgba(37,99,235,0.3);\" href=\"https:\/\/interdata.vn\/cloud-server\/\" target=\"_blank\" rel=\"noopener\">Xem g\u00f3i Cloud Server \u27f6<\/a><\/p>\n<\/div>\n<\/div>\n<p><!-- ==================== SECTION 7 ==================== --><\/p>\n<h2 id=\"section7\" style=\"color: #1e3a8a; font-size: 24px; font-weight: bold; text-align: left; border-left: 5px solid #2563EB; padding-left: 15px; margin: 40px 0 20px; line-height: 1.4;\">So s\u00e1nh c\u00e1c mode Certbot: Nginx plugin, Apache plugin, Standalone, Webroot<\/h2>\n<p style=\"text-align: justify;\">Certbot cung c\u1ea5p nhi\u1ec1u c\u00e1ch x\u00e1c minh v\u00e0 c\u00e0i ch\u1ee9ng ch\u1ec9. Ch\u1ecdn mode n\u00e0o ph\u1ee5 thu\u1ed9c v\u00e0o web server b\u1ea1n \u0111ang ch\u1ea1y v\u00e0 li\u1ec7u c\u00f3 th\u1ec3 d\u1eebng d\u1ecbch v\u1ee5 web hay kh\u00f4ng.<\/p>\n<table style=\"width: 100%; border-collapse: collapse; margin: 20px 0; font-size: 14px;\">\n<thead>\n<tr style=\"background: #1E3A8A; color: #fff;\">\n<th style=\"padding: 12px 15px; text-align: left; border: 1px solid #BFDBFE;\">Mode<\/th>\n<th style=\"padding: 12px 15px; text-align: left; border: 1px solid #BFDBFE;\">L\u1ec7nh<\/th>\n<th style=\"padding: 12px 15px; text-align: left; border: 1px solid #BFDBFE;\">Khi n\u00e0o d\u00f9ng<\/th>\n<th style=\"padding: 12px 15px; text-align: left; border: 1px solid #BFDBFE;\">L\u01b0u \u00fd<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr style=\"background: #F8FAFC;\">\n<td style=\"padding: 12px 15px; border: 1px solid #E2E8F0;\"><strong>Nginx plugin<\/strong><\/td>\n<td style=\"padding: 12px 15px; border: 1px solid #E2E8F0;\"><code>certbot --nginx<\/code><\/td>\n<td style=\"padding: 12px 15px; border: 1px solid #E2E8F0;\">Server ch\u1ea1y Nginx, mu\u1ed1n t\u1ef1 \u0111\u1ed9ng c\u00e0i + c\u1ea5u h\u00ecnh SSL<\/td>\n<td style=\"padding: 12px 15px; border: 1px solid #E2E8F0;\">T\u1ef1 s\u1eeda config Nginx. N\u00ean backup config tr\u01b0\u1edbc.<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 12px 15px; border: 1px solid #E2E8F0;\"><strong>Apache plugin<\/strong><\/td>\n<td style=\"padding: 12px 15px; border: 1px solid #E2E8F0;\"><code>certbot --apache<\/code><\/td>\n<td style=\"padding: 12px 15px; border: 1px solid #E2E8F0;\">Server ch\u1ea1y Apache, mu\u1ed1n t\u1ef1 \u0111\u1ed9ng c\u00e0i + c\u1ea5u h\u00ecnh SSL<\/td>\n<td style=\"padding: 12px 15px; border: 1px solid #E2E8F0;\">T\u1ef1 t\u1ea1o VirtualHost cho port 443. N\u00ean backup config tr\u01b0\u1edbc.<\/td>\n<\/tr>\n<tr style=\"background: #F8FAFC;\">\n<td style=\"padding: 12px 15px; border: 1px solid #E2E8F0;\"><strong>Standalone<\/strong><\/td>\n<td style=\"padding: 12px 15px; border: 1px solid #E2E8F0;\"><code>certbot certonly --standalone<\/code><\/td>\n<td style=\"padding: 12px 15px; border: 1px solid #E2E8F0;\">Kh\u00f4ng ch\u1ea1y Nginx\/Apache, ho\u1eb7c mu\u1ed1n t\u1ef1 c\u1ea5u h\u00ecnh th\u1ee7 c\u00f4ng<\/td>\n<td style=\"padding: 12px 15px; border: 1px solid #E2E8F0;\">Certbot t\u1ef1 d\u1ef1ng web server t\u1ea1m tr\u00ean port 80. Ph\u1ea3i d\u1eebng Nginx\/Apache tr\u01b0\u1edbc.<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 12px 15px; border: 1px solid #E2E8F0;\"><strong>Webroot<\/strong><\/td>\n<td style=\"padding: 12px 15px; border: 1px solid #E2E8F0;\"><code>certbot certonly --webroot -w \/var\/www\/html<\/code><\/td>\n<td style=\"padding: 12px 15px; border: 1px solid #E2E8F0;\">Kh\u00f4ng mu\u1ed1n d\u1eebng web server, kh\u00f4ng mu\u1ed1n Certbot s\u1eeda config<\/td>\n<td style=\"padding: 12px 15px; border: 1px solid #E2E8F0;\">\u0110\u1eb7t file x\u00e1c minh v\u00e0o webroot. Ph\u1ea3i ch\u1ec9 \u0111\u00fang th\u01b0 m\u1ee5c root.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"text-align: justify;\"><strong>Khuy\u00ean d\u00f9ng:<\/strong> N\u1ebfu server ch\u1ec9 ch\u1ea1y Nginx ho\u1eb7c Apache, d\u00f9ng plugin t\u01b0\u01a1ng \u1ee9ng (<code>--nginx<\/code> ho\u1eb7c <code>--apache<\/code>) v\u00ec Certbot x\u1eed l\u00fd to\u00e0n b\u1ed9 t\u1eeb x\u00e1c minh \u0111\u1ebfn c\u1ea5u h\u00ecnh. D\u00f9ng <code>standalone<\/code> khi server ch\u1ea1y \u1ee9ng d\u1ee5ng kh\u00e1c tr\u00ean port 80 (mail server, reverse proxy kh\u00f4ng ph\u1ea3i Nginx\/Apache). D\u00f9ng <code>webroot<\/code> khi b\u1ea1n mu\u1ed1n ki\u1ec3m so\u00e1t ho\u00e0n to\u00e0n c\u1ea5u h\u00ecnh web server v\u00e0 kh\u00f4ng mu\u1ed1n Certbot t\u1ef1 s\u1eeda config.<\/p>\n<p><!-- ==================== SECTION 8 ==================== --><\/p>\n<h2 id=\"section8\" style=\"color: #1e3a8a; font-size: 24px; font-weight: bold; text-align: left; border-left: 5px solid #2563EB; padding-left: 15px; margin: 40px 0 20px; line-height: 1.4;\">L\u1ed7i th\u01b0\u1eddng g\u1eb7p khi c\u00e0i SSL b\u1eb1ng Certbot v\u00e0 c\u00e1ch kh\u1eafc ph\u1ee5c<\/h2>\n<p style=\"text-align: justify;\">D\u01b0\u1edbi \u0111\u00e2y l\u00e0 c\u00e1c l\u1ed7i ph\u1ed5 bi\u1ebfn nh\u1ea5t m\u00e0 sysadmin v\u00e0 ch\u1ee7 website g\u1eb7p ph\u1ea3i khi c\u00e0i SSL Let&#8217;s Encrypt b\u1eb1ng Certbot, k\u00e8m nguy\u00ean nh\u00e2n v\u00e0 c\u00e1ch s\u1eeda c\u1ee5 th\u1ec3.<\/p>\n<h3 style=\"color: #1e3a8a; font-size: 20px; font-weight: 600; margin: 30px 0 15px;\">L\u1ed7i 1: Port 80 b\u1ecb ch\u1eb7n \u2014 Challenge failed<\/h3>\n<p style=\"text-align: justify;\"><strong>Bi\u1ec3u hi\u1ec7n:<\/strong> Certbot b\u00e1o <code>Connection refused<\/code> ho\u1eb7c <code>urn:ietf:params:acme:error:connection<\/code>.<\/p>\n<p style=\"text-align: justify;\"><strong>Nguy\u00ean nh\u00e2n:<\/strong> Port 80 ch\u01b0a m\u1edf tr\u00ean firewall, ho\u1eb7c c\u00f3 d\u1ecbch v\u1ee5 kh\u00e1c chi\u1ebfm port 80.<\/p>\n<pre><code># Ki\u1ec3m tra port 80 \u0111ang b\u1ecb process n\u00e0o chi\u1ebfm\r\nsudo ss -tlnp | grep :80\r\n\r\n# M\u1edf port 80 tr\u00ean UFW (Ubuntu)\r\nsudo ufw allow 80\/tcp\r\n\r\n# M\u1edf port 80 tr\u00ean firewalld (CentOS)\r\nsudo firewall-cmd --permanent --add-service=http &amp;&amp; sudo firewall-cmd --reload<\/code><\/pre>\n<h3 style=\"color: #1e3a8a; font-size: 20px; font-weight: 600; margin: 30px 0 15px;\">L\u1ed7i 2: certbot \u2014 command not found<\/h3>\n<p style=\"text-align: justify;\"><strong>Nguy\u00ean nh\u00e2n:<\/strong> Certbot ch\u01b0a c\u00e0i, ho\u1eb7c c\u00e0i qua Snap nh\u01b0ng ch\u01b0a t\u1ea1o symlink.<\/p>\n<pre><code># Ki\u1ec3m tra Certbot \u0111\u00e3 c\u00e0i ch\u01b0a\r\nwhich certbot\r\n\r\n# N\u1ebfu c\u00e0i b\u1eb1ng Snap m\u00e0 thi\u1ebfu symlink\r\nsudo ln -s \/snap\/bin\/certbot \/usr\/bin\/certbot\r\n\r\n# N\u1ebfu ch\u01b0a c\u00e0i, c\u00e0i l\u1ea1i\r\nsudo snap install --classic certbot<\/code><\/pre>\n<h3 style=\"color: #1e3a8a; font-size: 20px; font-weight: 600; margin: 30px 0 15px;\">L\u1ed7i 3: Domain ch\u01b0a tr\u1ecf v\u1ec1 IP server<\/h3>\n<p style=\"text-align: justify;\"><strong>Bi\u1ec3u hi\u1ec7n:<\/strong> Certbot b\u00e1o <code>DNS problem: NXDOMAIN looking up A for yourdomain.com<\/code> ho\u1eb7c tr\u1ea3 v\u1ec1 IP sai.<\/p>\n<pre><code># Ki\u1ec3m tra DNS \u0111\u00e3 tr\u1ecf \u0111\u00fang ch\u01b0a\r\ndig +short yourdomain.com\r\n# Output ph\u1ea3i l\u00e0 IP c\u1ee7a server VPS<\/code><\/pre>\n<p style=\"text-align: justify;\">N\u1ebfu IP sai ho\u1eb7c tr\u1ea3 v\u1ec1 r\u1ed7ng: v\u00e0o DNS provider ch\u1ec9nh b\u1ea3n ghi A, \u0111\u1ee3i 5\u201330 ph\u00fat cho DNS propagate r\u1ed3i ch\u1ea1y l\u1ea1i Certbot.<\/p>\n<h3 style=\"color: #1e3a8a; font-size: 20px; font-weight: 600; margin: 30px 0 15px;\">L\u1ed7i 4: Nginx\/Apache redirect ch\u1eb7n challenge<\/h3>\n<p style=\"text-align: justify;\"><strong>Bi\u1ec3u hi\u1ec7n:<\/strong> Certbot b\u00e1o <code>404<\/code> ho\u1eb7c <code>403<\/code> khi truy c\u1eadp <code>\/.well-known\/acme-challenge\/<\/code>.<\/p>\n<p style=\"text-align: justify;\"><strong>Nguy\u00ean nh\u00e2n:<\/strong> Config web server redirect to\u00e0n b\u1ed9 request sang HTTPS ho\u1eb7c sang domain kh\u00e1c tr\u01b0\u1edbc khi Certbot k\u1ecbp x\u00e1c minh. Ho\u1eb7c c\u00f3 rule ch\u1eb7n truy c\u1eadp th\u01b0 m\u1ee5c \u1ea9n.<\/p>\n<pre><code># Th\u00eam location block trong config Nginx (tr\u01b0\u1edbc block redirect)\r\nlocation \/.well-known\/acme-challenge\/ {\r\n    root \/var\/www\/html;\r\n    allow all;\r\n}<\/code><\/pre>\n<p style=\"text-align: justify;\">Sau khi th\u00eam, reload Nginx (<code>sudo systemctl reload nginx<\/code>) r\u1ed3i ch\u1ea1y l\u1ea1i Certbot.<\/p>\n<h3 style=\"color: #1e3a8a; font-size: 20px; font-weight: 600; margin: 30px 0 15px;\">L\u1ed7i 5: Ch\u1ee9ng ch\u1ec9 h\u1ebft h\u1ea1n \u2014 auto-renew kh\u00f4ng ch\u1ea1y<\/h3>\n<p style=\"text-align: justify;\"><strong>Nguy\u00ean nh\u00e2n ph\u1ed5 bi\u1ebfn:<\/strong> Systemd timer b\u1ecb disable, cron job b\u1ecb x\u00f3a, ho\u1eb7c port 80 b\u1ecb ch\u1eb7n l\u1ea1i sau khi c\u00e0i l\u1ea7n \u0111\u1ea7u (do thay \u0111\u1ed5i firewall rule).<\/p>\n<pre><code># Ki\u1ec3m tra timer c\u00f3 active kh\u00f4ng\r\nsudo systemctl list-timers | grep certbot\r\n\r\n# Gia h\u1ea1n th\u1ee7 c\u00f4ng ngay\r\nsudo certbot renew --force-renewal\r\n\r\n# Test dry-run sau khi s\u1eeda\r\nsudo certbot renew --dry-run<\/code><\/pre>\n<p><!-- ==================== SECTION 9 ==================== --><\/p>\n<h2 id=\"section9\" style=\"color: #1e3a8a; font-size: 24px; font-weight: bold; text-align: left; border-left: 5px solid #2563EB; padding-left: 15px; margin: 40px 0 20px; line-height: 1.4;\">So s\u00e1nh VPS v\u00e0 Cloud Server khi host website c\u1ea7n SSL<\/h2>\n<p style=\"text-align: justify;\">C\u1ea3 VPS v\u00e0 Cloud Server \u0111\u1ec1u cho quy\u1ec1n root \u0111\u1ec3 c\u00e0i Certbot v\u00e0 qu\u1ea3n l\u00fd SSL. S\u1ef1 kh\u00e1c bi\u1ec7t n\u1eb1m \u1edf kh\u1ea3 n\u0103ng m\u1edf r\u1ed9ng v\u00e0 qu\u1ea3n l\u00fd khi s\u1ed1 l\u01b0\u1ee3ng website t\u0103ng.<\/p>\n<table style=\"width: 100%; border-collapse: collapse; margin: 20px 0; font-size: 14px;\">\n<thead>\n<tr style=\"background: #1E3A8A; color: #fff;\">\n<th style=\"padding: 12px 15px; text-align: left; border: 1px solid #BFDBFE;\">Ti\u00eau ch\u00ed<\/th>\n<th style=\"padding: 12px 15px; text-align: left; border: 1px solid #BFDBFE;\">VPS<\/th>\n<th style=\"padding: 12px 15px; text-align: left; border: 1px solid #BFDBFE;\">Cloud Server<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr style=\"background: #F8FAFC;\">\n<td style=\"padding: 12px 15px; border: 1px solid #E2E8F0;\">Quy\u1ec1n root c\u00e0i Certbot<\/td>\n<td style=\"padding: 12px 15px; border: 1px solid #E2E8F0;\">C\u00f3<\/td>\n<td style=\"padding: 12px 15px; border: 1px solid #E2E8F0;\">C\u00f3<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 12px 15px; border: 1px solid #E2E8F0;\">Ph\u00f9 h\u1ee3p s\u1ed1 l\u01b0\u1ee3ng website<\/td>\n<td style=\"padding: 12px 15px; border: 1px solid #E2E8F0;\">1\u20135 site<\/td>\n<td style=\"padding: 12px 15px; border: 1px solid #E2E8F0;\">5+ site, nhi\u1ec1u subdomain<\/td>\n<\/tr>\n<tr style=\"background: #F8FAFC;\">\n<td style=\"padding: 12px 15px; border: 1px solid #E2E8F0;\">N\u00e2ng\/h\u1ea1 t\u00e0i nguy\u00ean<\/td>\n<td style=\"padding: 12px 15px; border: 1px solid #E2E8F0;\">C\u1ea7n li\u00ean h\u1ec7 ho\u1eb7c n\u00e2ng g\u00f3i<\/td>\n<td style=\"padding: 12px 15px; border: 1px solid #E2E8F0;\">T\u1ef1 n\u00e2ng\/h\u1ea1 nhanh qua panel<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 12px 15px; border: 1px solid #E2E8F0;\">Wildcard SSL nhi\u1ec1u subdomain<\/td>\n<td style=\"padding: 12px 15px; border: 1px solid #E2E8F0;\">\u0110\u01b0\u1ee3c, nh\u01b0ng t\u00e0i nguy\u00ean c\u00f3 gi\u1edbi h\u1ea1n<\/td>\n<td style=\"padding: 12px 15px; border: 1px solid #E2E8F0;\">Ph\u00f9 h\u1ee3p h\u01a1n khi traffic m\u1ed7i subdomain l\u1edbn<\/td>\n<\/tr>\n<tr style=\"background: #F8FAFC;\">\n<td style=\"padding: 12px 15px; border: 1px solid #E2E8F0;\">Chi ph\u00ed ban \u0111\u1ea7u<\/td>\n<td style=\"padding: 12px 15px; border: 1px solid #E2E8F0;\">Th\u1ea5p h\u01a1n, d\u1ec5 b\u1eaft \u0111\u1ea7u<\/td>\n<td style=\"padding: 12px 15px; border: 1px solid #E2E8F0;\">Cao h\u01a1n, tr\u1ea3 theo t\u00e0i nguy\u00ean s\u1eed d\u1ee5ng<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 12px 15px; border: 1px solid #E2E8F0;\">N\u00ean d\u00f9ng khi<\/td>\n<td style=\"padding: 12px 15px; border: 1px solid #E2E8F0;\">M\u1edbi b\u1eaft \u0111\u1ea7u, 1\u20135 site, traffic \u1ed5n \u0111\u1ecbnh<\/td>\n<td style=\"padding: 12px 15px; border: 1px solid #E2E8F0;\">Nhi\u1ec1u site, traffic bi\u1ebfn \u0111\u1ed9ng, c\u1ea7n scale nhanh<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"text-align: justify;\">N\u1ebfu b\u1ea1n \u0111ang ch\u1ea1y 1\u20133 website v\u1edbi traffic \u1ed5n \u0111\u1ecbnh, VPS \u0111\u1ee7 d\u00f9ng v\u00e0 chi ph\u00ed th\u1ea5p h\u01a1n. Khi s\u1ed1 l\u01b0\u1ee3ng domain t\u0103ng, ch\u1ea1y wildcard SSL cho nhi\u1ec1u subdomain ho\u1eb7c c\u1ea7n t\u0103ng CPU\/RAM nhanh theo chi\u1ebfn d\u1ecbch \u2014 chuy\u1ec3n sang Cloud Server \u0111\u1ec3 kh\u00f4ng b\u1ecb gi\u1edbi h\u1ea1n t\u00e0i nguy\u00ean c\u1ed1 \u0111\u1ecbnh.<\/p>\n<p><!-- ==================== SECTION FAQ ==================== --><\/p>\n<h2 id=\"section-faq\" style=\"color: #1e3a8a; font-size: 24px; font-weight: bold; text-align: left; border-left: 5px solid #2563EB; padding-left: 15px; margin: 40px 0 20px; line-height: 1.4;\">C\u00e2u h\u1ecfi th\u01b0\u1eddng g\u1eb7p v\u1ec1 SSL Let&#8217;s Encrypt v\u00e0 Certbot<\/h2>\n<h3 style=\"color: #1e3a8a; font-size: 18px; font-weight: 600; margin: 25px 0 10px;\">SSL Let&#8217;s Encrypt c\u00f3 mi\u1ec5n ph\u00ed kh\u00f4ng?<\/h3>\n<p style=\"text-align: justify;\">C\u00f3. Let&#8217;s Encrypt l\u00e0 Certificate Authority phi l\u1ee3i nhu\u1eadn, c\u1ea5p ch\u1ee9ng ch\u1ec9 DV (Domain Validation) ho\u00e0n to\u00e0n mi\u1ec5n ph\u00ed, kh\u00f4ng gi\u1edbi h\u1ea1n s\u1ed1 l\u1ea7n c\u1ea5p. Ch\u1ee9ng ch\u1ec9 n\u00e0y m\u00e3 h\u00f3a k\u1ebft n\u1ed1i gi\u1eefa tr\u00ecnh duy\u1ec7t v\u00e0 server t\u01b0\u01a1ng \u0111\u01b0\u01a1ng SSL tr\u1ea3 ph\u00ed c\u00f9ng lo\u1ea1i DV. Tuy nhi\u00ean, Let&#8217;s Encrypt kh\u00f4ng c\u1ea5p ch\u1ee9ng ch\u1ec9 OV (Organization Validation) ho\u1eb7c EV (Extended Validation) \u2014 lo\u1ea1i hi\u1ec3n th\u1ecb t\u00ean t\u1ed5 ch\u1ee9c tr\u00ean thanh \u0111\u1ecba ch\u1ec9, th\u01b0\u1eddng d\u00f9ng cho ng\u00e2n h\u00e0ng, e-commerce l\u1edbn.<\/p>\n<h3 style=\"color: #1e3a8a; font-size: 18px; font-weight: 600; margin: 25px 0 10px;\">Ch\u1ee9ng ch\u1ec9 Let&#8217;s Encrypt c\u00f3 h\u1ea1n bao l\u00e2u?<\/h3>\n<p style=\"text-align: justify;\">90 ng\u00e0y. Let&#8217;s Encrypt thi\u1ebft k\u1ebf th\u1eddi h\u1ea1n ng\u1eafn \u0111\u1ec3 khuy\u1ebfn kh\u00edch t\u1ef1 \u0111\u1ed9ng h\u00f3a gia h\u1ea1n v\u00e0 gi\u1ea3m r\u1ee7i ro khi kh\u00f3a b\u1ecb l\u1ed9. Certbot h\u1ed7 tr\u1ee3 auto-renew qua systemd timer ho\u1eb7c cron job \u2014 ch\u1ee9ng ch\u1ec9 \u0111\u01b0\u1ee3c gia h\u1ea1n t\u1ef1 \u0111\u1ed9ng khi c\u00f2n d\u01b0\u1edbi 30 ng\u00e0y, b\u1ea1n kh\u00f4ng c\u1ea7n thao t\u00e1c th\u1ee7 c\u00f4ng n\u1ebfu c\u1ea5u h\u00ecnh \u0111\u00fang.<\/p>\n<h3 style=\"color: #1e3a8a; font-size: 18px; font-weight: 600; margin: 25px 0 10px;\">Certbot c\u00f3 h\u1ed7 tr\u1ee3 wildcard SSL kh\u00f4ng?<\/h3>\n<p style=\"text-align: justify;\">C\u00f3. T\u1eeb phi\u00ean b\u1ea3n 0.22.0, Certbot h\u1ed7 tr\u1ee3 c\u1ea5p wildcard SSL (<code>*.yourdomain.com<\/code>) qua DNS-01 challenge. B\u1ea1n c\u1ea7n th\u00eam b\u1ea3n ghi TXT v\u00e0o DNS zone \u0111\u1ec3 x\u00e1c minh quy\u1ec1n s\u1edf h\u1eefu. \u0110\u1ec3 t\u1ef1 \u0111\u1ed9ng gia h\u1ea1n wildcard, s\u1eed d\u1ee5ng DNS plugin t\u01b0\u01a1ng \u1ee9ng v\u1edbi provider (Cloudflare, Route53, DigitalOcean\u2026) thay v\u00ec mode <code>--manual<\/code>.<\/p>\n<h3 style=\"color: #1e3a8a; font-size: 18px; font-weight: 600; margin: 25px 0 10px;\">C\u00e0i SSL b\u1eb1ng Certbot c\u00f3 c\u1ea7n VPS kh\u00f4ng?<\/h3>\n<p style=\"text-align: justify;\">V\u1ec1 m\u1eb7t k\u1ef9 thu\u1eadt, Certbot y\u00eau c\u1ea7u quy\u1ec1n sudo tr\u00ean server, quy\u1ec1n truy c\u1eadp c\u1ea5u h\u00ecnh web server (Nginx\/Apache) v\u00e0 kh\u1ea3 n\u0103ng m\u1edf port 80\/443 tr\u00ean firewall. Shared Hosting th\u01b0\u1eddng kh\u00f4ng cung c\u1ea5p nh\u1eefng quy\u1ec1n n\u00e0y. Do \u0111\u00f3, b\u1ea1n c\u1ea7n \u00edt nh\u1ea5t m\u1ed9t VPS c\u00f3 quy\u1ec1n root \u0111\u1ec3 ch\u1ea1y Certbot. M\u1ed9t s\u1ed1 control panel tr\u00ean Shared Hosting t\u00edch h\u1ee3p s\u1eb5n Let&#8217;s Encrypt (nh\u01b0 cPanel, DirectAdmin), nh\u01b0ng \u0111\u00f3 l\u00e0 do hosting provider c\u1ea5u h\u00ecnh s\u1eb5n, kh\u00f4ng ph\u1ea3i b\u1ea1n t\u1ef1 c\u00e0i Certbot.<\/p>\n<h3 style=\"color: #1e3a8a; font-size: 18px; font-weight: 600; margin: 25px 0 10px;\">L\u00e0m sao bi\u1ebft SSL \u0111\u00e3 c\u00e0i th\u00e0nh c\u00f4ng?<\/h3>\n<p style=\"text-align: justify;\">Ba c\u00e1ch nhanh nh\u1ea5t: (1) Truy c\u1eadp <code>https:\/\/yourdomain.com<\/code> tr\u00ean tr\u00ecnh duy\u1ec7t \u2014 n\u1ebfu hi\u1ec3n th\u1ecb \u1ed5 kh\u00f3a, SSL \u0111\u00e3 ho\u1ea1t \u0111\u1ed9ng. (2) Ch\u1ea1y l\u1ec7nh <code>echo | openssl s_client -servername yourdomain.com -connect yourdomain.com:443 2&gt;\/dev\/null | openssl x509 -noout -dates<\/code> \u0111\u1ec3 xem ng\u00e0y h\u1ebft h\u1ea1n. (3) Ki\u1ec3m tra chi ti\u1ebft c\u1ea5u h\u00ecnh SSL t\u1ea1i SSL Labs (ssllabs.com\/ssltest) \u2014 c\u00f4ng c\u1ee5 n\u00e0y ch\u1ea5m \u0111i\u1ec3m t\u1eeb A \u0111\u1ebfn F v\u00e0 ch\u1ec9 ra v\u1ea5n \u0111\u1ec1 c\u1ea7n s\u1eeda.<\/p>\n<p><!-- ==================== K\u1ebeT B\u00c0I ==================== --><\/p>\n<div style=\"border-top: 2px dashed #BFDBFE; margin-top: 50px; padding-top: 30px;\">\n<h3 style=\"font-family: 'Be Vietnam Pro', sans-serif; color: #1e3a8a; font-size: 22px; font-weight: bold; margin-bottom: 15px;\">T\u1ed5ng k\u1ebft<\/h3>\n<p style=\"text-align: justify;\">C\u00e0i SSL Let&#8217;s Encrypt b\u1eb1ng Certbot kh\u00f4ng ph\u1ee9c t\u1ea1p n\u1ebfu b\u1ea1n chu\u1ea9n b\u1ecb \u0111\u00fang \u0111i\u1ec1u ki\u1ec7n ti\u00ean quy\u1ebft: domain \u0111\u00e3 tr\u1ecf IP, web server \u0111ang ch\u1ea1y, port 80 v\u00e0 443 \u0111\u00e3 m\u1edf. Ch\u1ec9 c\u1ea7n m\u1ed9t l\u1ec7nh <code>sudo certbot --nginx<\/code> ho\u1eb7c <code>sudo certbot --apache<\/code> l\u00e0 website \u0111\u00e3 chuy\u1ec3n sang HTTPS v\u1edbi ch\u1ee9ng ch\u1ec9 mi\u1ec5n ph\u00ed. C\u1ea5u h\u00ecnh th\u00eam auto-renew qua systemd timer ho\u1eb7c cron job \u0111\u1ec3 kh\u00f4ng bao gi\u1edd lo ch\u1ee9ng ch\u1ec9 h\u1ebft h\u1ea1n. Khi s\u1ed1 l\u01b0\u1ee3ng website v\u00e0 subdomain t\u0103ng, wildcard SSL qua DNS challenge s\u1ebd gi\u00fap qu\u1ea3n l\u00fd t\u1eadp trung. B\u1eaft \u0111\u1ea7u v\u1edbi VPS khi c\u1ea7n to\u00e0n quy\u1ec1n c\u00e0i \u0111\u1eb7t, n\u00e2ng l\u00ean Cloud Server khi quy m\u00f4 \u0111\u00f2i h\u1ecfi.<\/p>\n<div style=\"background: #EFF6FF; border: 1px solid #2563EB; padding: 30px; margin-top: 25px; border-radius: 12px; text-align: center;\">\n<p style=\"font-family: 'Be Vietnam Pro', sans-serif; font-size: 20px; font-weight: bold; color: #1e3a8a; margin-top: 0;\">S\u1eb5n s\u00e0ng c\u00e0i SSL mi\u1ec5n ph\u00ed cho website?<\/p>\n<p style=\"font-size: 15px; margin-bottom: 20px; color: #4b5563;\">B\u1eaft \u0111\u1ea7u v\u1edbi VPS \u0111\u1ec3 c\u00f3 to\u00e0n quy\u1ec1n c\u1ea5u h\u00ecnh Certbot, Nginx\/Apache v\u00e0 firewall. N\u00e2ng l\u00ean Cloud Server khi c\u1ea7n qu\u1ea3n l\u00fd nhi\u1ec1u domain \u2014 v\u00e0 gh\u00e9 <a href=\"https:\/\/interdata.vn\/canhme\/\" target=\"_blank\" rel=\"noopener\">Canh Me<\/a> \u0111\u1ec3 s\u0103n deal tr\u01b0\u1edbc khi ch\u1ed1t g\u00f3i.<\/p>\n<p><a style=\"background: #2563EB; color: #fff; padding: 12px 30px; text-decoration: none; font-weight: 600; border-radius: 6px; display: inline-block;\" href=\"https:\/\/interdata.vn\/thue-vps\/\" target=\"_blank\" rel=\"noopener\">Ch\u1ecdn VPS c\u00e0i SSL ngay \u27f6<\/a><\/p>\n<\/div>\n<\/div>\n<p style=\"text-align: justify; font-size: 13px; font-style: italic; color: #6b7280; margin-top: 30px; border-top: 1px solid #E5E7EB; padding-top: 15px;\"><span style=\"font-size: 100%;\"><em>N\u1ed9i dung mang t\u00ednh tham kh\u1ea3o. C\u00e1c l\u1ec7nh c\u00e0i \u0111\u1eb7t, c\u1ea5u h\u00ecnh Certbot v\u00e0 Let&#8217;s Encrypt c\u00f3 th\u1ec3 thay \u0111\u1ed5i theo phi\u00ean b\u1ea3n Certbot, distro Linux (Ubuntu, CentOS, AlmaLinux), web server (Nginx, Apache) v\u00e0 m\u00f4i tr\u01b0\u1eddng th\u1ef1c t\u1ebf. Lu\u00f4n ki\u1ec3m tra t\u00e0i li\u1ec7u ch\u00ednh th\u1ee9c t\u1ea1i <a href=\"https:\/\/certbot.eff.org\/\" target=\"_blank\" rel=\"noopener nofollow\">certbot.eff.org<\/a> v\u00e0 <a href=\"https:\/\/letsencrypt.org\/\" target=\"_blank\" rel=\"noopener nofollow\">letsencrypt.org<\/a>, sao l\u01b0u c\u1ea5u h\u00ecnh tr\u01b0\u1edbc khi thay \u0111\u1ed5i v\u00e0 test b\u1eb1ng &#8211;dry-run tr\u01b0\u1edbc khi \u00e1p d\u1ee5ng cho production.<\/em><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>C\u00e0i SSL Let&#8217;s Encrypt b\u1eb1ng Certbot l\u00e0 c\u00e1ch nhanh nh\u1ea5t \u0111\u1ec3 chuy\u1ec3n website t\u1eeb HTTP sang HTTPS m\u00e0 kh\u00f4ng t\u1ed1n ph\u00ed ch\u1ee9ng ch\u1ec9. N\u1ebfu b\u1ea1n \u0111ang ch\u1ea1y VPS v\u1edbi Nginx ho\u1eb7c Apache v\u00e0 ch\u01b0a bi\u1ebft b\u1eaft \u0111\u1ea7u t\u1eeb \u0111\u00e2u, b\u00e0i vi\u1ebft n\u00e0y c\u1ee7a InterData s\u1ebd \u0111i th\u1eb3ng v\u00e0o t\u1eebng l\u1ec7nh c\u1ee5 th\u1ec3 \u2014 t\u1eeb c\u00e0i<\/p>\n","protected":false},"author":2,"featured_media":43145,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[161],"tags":[],"class_list":["post-43127","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-huong-dan-chung"],"_links":{"self":[{"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/posts\/43127","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/comments?post=43127"}],"version-history":[{"count":5,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/posts\/43127\/revisions"}],"predecessor-version":[{"id":43149,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/posts\/43127\/revisions\/43149"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/media\/43145"}],"wp:attachment":[{"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/media?parent=43127"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/categories?post=43127"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/tags?post=43127"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}