HTTPS چیست؟
پروتکل HTTPS یک نسخه امن از یک وب سایت HTTP است. این رمزگذاری با استفاده از پروتکل Secure Sockets Layer (SSL) فعال شده و با گواهی SSL اعتبار می یابد. وقتی به وب سایت HTTPS وصل می شوید ، اطلاعات منتقل شده بین وب سایت و کاربر رمزگذاری می شوند.
این رمزگذاری به شما کمک می کند تا از داده ها در مقابل سرقت اطلاعات از طریق روش Man-in-the-Middle-Attack (MITM) محافظت کنید. لایه امنیتی اضافه شده نیز به بهبود وضعیت وب سایت شما در موتورهای جستجوهم كمك می كند. گفته می شود ، HTTPS هنوز نقص هایی دارد که HSTS می تواند به رفع آن کمک کند.
HSTS چیست؟
HSTS یک هدر واکنشی است که به یک مرورگر اطلاع می دهد که وب سایت های فعال شده فقط از طریق HTTPS قابل دسترسی هستند. این امر مرورگر شما را مجبور می کند تا فقط به نسخه HTTPS وب سایت و منابع موجود در آن دسترسی داشته باشد.
شما ممکن است از این موضوع که حتی اگر گواهی SSL خود را به درستی تنظیم کرده باشید و HTTPS را برای وب سایت خود فعال کرده باشید ، هنوز هم نسخه HTTP در دسترس باشد، آگاه نباشید. این امردر زمانیکه شما با استفاده از ریدایرکت 301 سایت خود را به https ریدایرکت کرده باشید هم صادق است.
با فعال کردن HSTS ، حملات پروتکل SSL و هایجک کردن کوکی (cookie hijacking) ، دو آسیب پذیری که در وب سایت های دارای SSL وجود دارد، متوقف می شود. Hsts علاوه بر ایمن تر کردن وب سایت شما ، با کاهش یک مرحله در پروسه بارگذاری سایت ها باعث می شود سایت ها سریعتر بارگذاری شوند.
HSTS چگونه کار می کند
به طور معمول ، هنگامی که یک URL را در مرورگر وب وارد می کنید ، قسمت پروتکل را رد می کنید. به عنوان مثال ، شما www.iranserver.com را تایپ می کنید ، نه http:// www.iranserver.com. در چنین حالتی ، مرورگر فرض می کند که شما می خواهید از پروتکل HTTP استفاده کنید ، بنابراین یک درخواست HTTP را به www.iranserver.com ارسال می کند.
در این مرحله ، وب سرور با یک تغییر مسیر (کد پاسخ 301) که به سایت HTTPS اشاره می کند پاسخ می دهد. مرورگر اتصال HTTPS به www.iranserver.com ایجاد می کند. این زمانی است که حفاظت از خط مشی امنیتی HSTS با استفاده از یک هدر پاسخ HTTP شروع می شود:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
هدر Strict-Transport-Security دستورالعمل های خاصی به مرورگر می دهد. از زمان اضافه کردن این کدها ، هر اتصال به سایت و زیر دامنه های آن برای یک سال آینده (31536000 ثانیه) از لحظه دریافت این هدر باید یک اتصال HTTPS باشد. اتصالات HTTP به هیچ وجه مجاز نیست. اگر مرورگر درخواست بارگیری یک منبع را با استفاده از HTTP دریافت کند ، باید به جای آن درخواست HTTPS را امتحان کند. اگر HTTPS در دسترس نباشد ، اتصال باید خاتمه یابد.
علاوه بر این ، اگر گواهی معتبر نباشد ، از ایجاد ارتباط جلوگیری می شود. معمولاً اگر گواهی معتبر نباشد (منقضی شده ، self-signed باشد ، توسط یک CA ناشناخته امضا شده باشد و غیره) مرورگر هشداری را نشان می دهد که می توانید دور بزنید. اما اگر سایت دارای HSTS باشد ، مرورگر به هیچ وجه به شما اجازه نمی دهد هشدار را دور بزنید. برای دسترسی به سایت ، باید سایت را از لیست HSTS در داخل مرورگر حذف کنید.
هدر Strict-Transport-Security برای وب سایت مشخصی ارسال می شود و نام دامنه خاصی را در بر می گیرد. بنابراین ، اگر هدر HSTS برای www.iranserver.com را دارید ، این هدر فقط زیر دامنه www. را پوشش میدهد و آدرس iranserver.com را پوشش نمی دهد. به همین دلیل ، برای محافظت کامل، وب سایت شما باید دامنه پایه (در این مورد ، iranserver.com) را در بر بگیرد و یک هدر Strict-Transport-Security برای آن دامنه با includeSubDomains دریافت کند.
آیا HSTS کاملاً ایمن است؟
متأسفانه ، اولین باری که به وب سایت دسترسی پیدا می کنید ، با HSTS محافظت نمی شوید. اگر وب سایت یک هدر HSTS به اتصال HTTP اضافه کند ، آن هدر نادیده گرفته می شود. این امر به این دلیل است که یک مهاجم می تواند در حین حمله man-in-the-middle ، می تواند هدرها را حذف یا اضافه کند. به هدر HSTS قابل اعتماد نیست مگر اینکه از طریق HTTPS تحویل داده شود.
همچنین باید بدانید که هر بار مرورگر شما سرصفحه را بازخوانی می کند حداکثر سن HSTS ریست می شود و همچنین حداکثر مقدار آن دو سال است. این بدان معنی است که تا زمانی که بیش از دو سال از بازدیدهای شما نگذرد ، محافظت از آن دائمی است. اگر به مدت دو سال به وب سایت مراجعه نکنید ، با آن به عنوان یک سایت جدید برخورد می شود. در عین حال ، اگر شما از هدر HSTS با max-age برابر با 0 استفاده کنید ، مرورگر در کانکشن بعدی سایت شما را به عنوان مورد جدید در نظر خواهد گرفت (که این کار می تواند برای آزمایش مفید باشد)
می توانید از یک روش محافظت اضافی به نام لیست پیش بارگذاری HSTS استفاده کنید. پروژه Chromium لیستی از وب سایت هایی که از HSTS استفاده می کنند را نگه می دارد و این لیست با مرورگرهای دیگر به اشتراک گذاشته می شود. اگر شما وب سایت خود را به لیست preload اضافه کنید ، ابتدا مرورگر لیست داخلی را بررسی می کند و بنابراین وب سایت شما هرگز توسط HTTP در دسترس نخواهد بود ( حتی در اولین تلاش برای اتصال به HTTP ) این روش جزئی از استاندارد HSTS نیست ، اما توسط همه مرورگرهای اصلی (Chrome ، Firefox ، Safari ، Opera، IE11 و Edge) استفاده می شود.
تنها روشی که در حال حاضر شناخته شده است که می تواند برای دور زدن HSTS مورد استفاده قرار گیرد ، حمله NTP-based attack است که تحت شرایطی، فقط یک بار می توان سایت را با http بارگذاری نمود.
چگونه دامنه ای را به لیست Preload HSTS اضافه کنیم؟
برای افزودن دامنه به لیست پیش بارگذاری HSTS ، سایتهای مربوط به آن دامنه باید چند پیش نیاز داشته باشیم. کارهایی که باید برای افزودن دامنه خود به لیست پیش بارگذاری hsts انجام دهید به شرح زیر می باشد:
- مطمئن شوید که سایت شما دارای گواهینامه معتبر می باشد.
- اگر سایت های شما از طریق HTTP در دسترس هستند ، کلیه درخواست ها را به HTTPS هدایت کنید.
- اطمینان حاصل کنید که نقاط 1 و 2 فوق در مورد همه دامنه ها و زیر دامنه های شما (طبق سوابق DNS شما) اعمال شده باشد.
- هدر Strict-Transport-Security را روی HTTPS برای دامنه اصلی خود و با max-age حداقل 31536000 (1 سال) ، بخشنامه includeSubDomains و بخشنامه preload اضافه نمایید.
- به سایت org بروید و دامنه خود را با استفاده از فرم موجود ارسال کنید. در صورت رعایت شرایط ، دامنه شما برای افزوده شدن به preload وارد صف می شود.
برای این مورد باید مقادیر زیر را به هدر اضافه نماییم:
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
در صورتیکه دایرکت ادمین داشته باشید باید مقدار زیر را در بخش اول custom httpd در دایرکت ادمین قرار می دهیم:
|*if SSL_TEMPLATE="1"|
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
|*endif|