HTTPS و SSL چیست؟ توضیح ساده وبسایتهای امن
HTTPS نسخه امن HTTP است، یعنی پروتکلی که مرورگرها برای صحبت با وبسایتها استفاده میکنند. این پروتکل هر درخواست و پاسخ را در یک اتصال رمزشده با TLS (Transport Layer Security) میپیچد، پس هیچکس بین بازدیدکننده و وبسایت نمیتواند دادههای ارسالشده را بخواند یا دستکاری کند. SSL نام قدیمی همان ایده است، یعنی پروتکل اصلیای که TLS جایگزینش شد؛ به همین دلیل مردم هنوز «گواهینامه SSL» میگویند.
چرا وقتی با هوش مصنوعی میسازید HTTPS مهم است
هر اپی که منتشر میکنید باید از طریق HTTPS ارائه شود. این فقط یک روش خوب نیست:
- مرورگرها انتظارش را دارند. سایتهایی که روی HTTP ساده باشند با برچسب «Not secure» نشان داده میشوند، و بعضی امکانات مرورگر، مثل دسترسی به موقعیت مکانی، دوربین و میکروفون، و service workerها برای اپهای آفلاین، معمولاً فقط در صفحات امن (HTTPS) کار میکنند.
- ورود و فرمها. بدون HTTPS، رمزها، کوکیهای نشست و داده فرمها بهصورت متن خوانا منتقل میشوند. هرکسی که به وایفای همان کافه متصل باشد بالقوه میتواند آنها را بگیرد.
- پرداختها و سرویسهای ثالث. سرویسهای پرداخت، ورود با OAuth و بسیاری از APIها برای آدرسهای بازگشت و callback به HTTPS نیاز دارند.
- اعتماد و جستجو. بازدیدکنندهها هشدار را میبینند و گوگل گفته که HTTPS را بهعنوان سیگنال رتبهبندی در نظر میگیرد.
خبر خوب این است که در بیشتر سرویسهای میزبانی امروزی HTTPS خودکار راهاندازی میشود. آنچه بیشتر لازم دارید این است که اجزا را به اندازه کافی بفهمید تا وقتی دامنه اختصاصی یا هشدار محتوای مخلوط مشکل پیدا کرد، بتوانید آن را درست کنید.
یک مثال روزمره
فرستادن داده با HTTP ساده مثل پست کردن یک کارت پستال است: هر کارمند پستی که آن را دست میگیرد میتواند آن را بخواند، و حتی ممکن است پیام را عوض کند.
HTTPS مثل فرستادن یک پاکت مهرومومشده و غیرقابل دستکاری است، که قبلش هویت گیرنده را هم با یک کارت شناسایی رسمی بررسی کردهاید. گواهینامه همان کارت شناسایی است که یک نهاد صادرکننده معتبر (certificate authority) آن را داده و تأیید کرده که وبسایت واقعاً کنترل دامنه را دارد. رمزنگاری همان پاکت مهرومومشده است. کارت شناسایی ثابت میکند به آدرس درست مینویسید، و پاکت محتوا را خصوصی نگه میدارد.
HTTPS سادهشده چطور کار میکند
وقتی مرورگری https://shop.example.com را باز میکند:
- سلام. مرورگر وصل میشود و اعلام میکند کدام روشهای رمزنگاری را پشتیبانی میکند.
- گواهینامه. سرور گواهینامه خود را میفرستد که میگوید «این کلید متعلق به
shop.example.comاست» و توسط یک مرجع صدور گواهینامه امضا شده است. - بررسی. مرورگر امضا را با نهادهایی که از قبل به آنها اعتماد دارد تطبیق میدهد، بررسی میکند گواهینامه منقضی نشده، و دامنه را هم چک میکند.
- کلیدها. مرورگر و سرور یک کلید مخفی تازه برای همین نشست توافق میکنند، بدون اینکه آن را آشکارا بفرستند.
- گفتگوی رمزشده. حالا همه درخواستها و پاسخها، از صفحات تا داده فرم و کوکیها، رمزشده منتقل میشوند.
این دستدهی TLS چند میلیثانیه طول میکشد و خودکار انجام میشود. بازدیدکننده فقط نماد قفل را میبیند، یا در بعضی مرورگرها یک نماد اطلاعات سایت خنثی.
HTTPS چه چیزی را محافظت میکند و چه چیزی را نه
| محافظت میکند | محافظت نمیکند |
|---|---|
| داده در مسیر انتقال بین مرورگر و سرور | داده وقتی روی سرور یا پایگاه داده شما باشد |
| در برابر شنود در وایفای عمومی | در برابر وبسایت مخرب یا کلاهبرداری |
| در برابر تغییر صفحات در مسیر | در برابر باگهای اپ شما، مثل بررسی نکردن دسترسی |
| کوکیها و رمزها در حین ارسال | در برابر رمزهای ضعیف یا کلیدهای API لو رفته |
HTTPS محتوای درخواستها را رمز میکند، از جمله مسیر صفحه و رشته query. اما نام دامنهای که بازدید میکنید معمولاً هنوز برای شبکههای مسیر ارسال قابل مشاهده است. این یکی از دلایلی است که حتی با HTTPS هم هرگز داده شخصی را در URL نگذارید؛ URLها در لاگها و تاریخچه مرورگر هم ثبت میشوند.
یک مثال کامل: وصل کردن دامنه اختصاصی
فرض کنید یک اپ رزرو نوبت منتشر کردهاید و میخواهید آن زیر book.myyogastudio.com باشد:
- یک رکورد DNS اضافه میکنید که
book.myyogastudio.comرا به میزبان شما وصل کند. ببینید دامنهها و DNS چطور کار میکنند. - میزبان به یک مرجع صدور گواهینامه ثابت میکند که کنترل آن نام را دارد، معمولاً با پاسخ دادن به یک چالش روی همان دامنه، و یک گواهینامه دریافت میکند.
- میزبان آن را نصب میکند و قبل از انقضا خودکار تمدیدش میکند. گواهینامهها عمداً کوتاهمدتاند، پس تمدید خودکار مهم است.
- بازدیدکنندگانی که به
http://book.myyogastudio.comمیروند بهhttps://هدایت میشوند.
اگر مرحله ۱ اشتباه باشد، مثلاً رکورد به جای دیگری اشاره کند یا یک پروکسی وسط باشد، مرحله ۲ شکست میخورد و بازدیدکننده خطای گواهینامه میبیند. این رایجترین مشکل HTTPS است که هنگام وصل کردن دامنه اختصاصی پیش میآید.
اصطلاحات کلیدی
| اصطلاح | معنی |
|---|---|
| TLS | Transport Layer Security، پروتکل رمزنگاری پشت HTTPS. |
| SSL | Secure Sockets Layer، جانشین قدیمی TLS. نامش هنوز رایج است. |
| Certificate (گواهینامه) | فایل امضاشدهای که یک دامنه را به یک کلید عمومی وصل میکند. |
| Certificate authority (CA) | سازمانی که مرورگرها به آن برای صدور گواهینامه اعتماد دارند، مثل Let's Encrypt. |
| Domain validation (DV) | گواهینامهای که کنترل دامنه را ثابت میکند؛ چیزی که تقریباً همه سایتها استفاده میکنند. |
| Wildcard certificate | همه زیردامنههای یک سطح را پوشش میدهد، مثل *.example.com. |
| Mixed content | صفحه HTTPS که بعضی منابع را با HTTP ساده بارگذاری میکند. مرورگرها آنها را مسدود یا هشدار میدهند. |
| HSTS | هدری که به مرورگرها میگوید از آن به بعد همیشه برای سایت شما از HTTPS استفاده کنند. |
| Port 443 | پورت استاندارد HTTPS (HTTP از پورت 80 استفاده میکند). |
تصورات غلط رایج
- «قفل یعنی سایت قابل اعتماد است.» یعنی اتصال خصوصی است و دامنه تطابق دارد. کلاهبردارها هم گواهینامه میگیرند.
- «HTTPS فقط برای صفحات پرداخت لازم است.» هر صفحهای با ورود، فرم یا کوکی به آن نیاز دارد، و این تقریباً همه اپهاست. آن را همه جا استفاده کنید.
- «گواهینامهها گراناند.» گواهینامههای رایگان و معتبر استاندارد هستند و بیشتر میزبانها آنها را برای شما مدیریت میکنند.
- «HTTPS اپ من را امن میکند.» فقط اتصال را امن میکند. اپ شما هنوز به بررسی دسترسی در سمت سرور، نگهداری امن رمزها و اعتبارسنجی ورودی نیاز دارد. ببینید چکلیست امنیتی برای اپهای ساختهشده با هوش مصنوعی.
- «HTTPS سایت را کند میکند.» TLS مدرن سربار بسیار کمی دارد، و امکاناتی مثل HTTP/2 که سایت را سریعتر میکنند، در مرورگرها معمولاً به HTTPS نیاز دارند.
رفع مشکلات رایج HTTPS
| علامت | علت احتمالی |
|---|---|
| «اتصال شما خصوصی نیست» | گواهینامه این دامنه دقیق را پوشش نمیدهد، منقضی شده، یا هنوز صادر نشده است |
روی www. کار میکند ولی روی دامنه بدون www نه (یا برعکس) | فقط یکی از این دو نام DNS و گواهینامه دارد |
| قفل نیست و «Not secure» روی بعضی صفحات | محتوای مخلوط: تصویر، اسکریپت یا فونتی با http:// بارگذاری شده |
| خطای گواهینامه بلافاصله بعد از وصل کردن دامنه | DNS هنوز در حال انتشار است، یا یک پروکسی جلوی بررسی گواهینامه را گرفته است |
از ابزار ساخت با هوش مصنوعیتان چه بخواهید
- «مطمئن شو هر تصویر، اسکریپت و فونت با HTTPS یا آدرس نسبی بارگذاری میشود؛ هیچ لینک
http://نباشد.» - «همه ترافیک HTTP را به HTTPS هدایت کن.»
- «کوکیهای نشست را با پرچمهای
SecureوHttpOnlyتنظیم کن.» - «برای همه آدرسهای callback در OAuth، پرداخت و webhook از
https://استفاده کن.» - «دامنه اختصاصی من خطای گواهینامه نشان میدهد. میزبان کدام رکورد DNS را میخواهد؟»
HTTPS در Mythex
وقتی در Mythex یک دامنه اختصاصی وصل میکنید (امکان طرح Pro)، یک رکورد CNAME اضافه میکنید که به هدفی مثل slug.mythex.ai که Mythex نشان میدهد اشاره کند، روی Verify کلیک میکنید، و Mythex HTTPS را برای دامنه خودکار صادر میکند. مستندات دو مشکل رایج را پوشش میدهد: اگر DNS شما روی Cloudflare است، رکورد را روی «DNS only» (ابر خاکستری) تنظیم کنید نه پروکسیشده، تا Mythex بتواند گواهینامه را صادر کند؛ و DNS ممکن است پیش از کامل شدن HTTPS تأیید شود، پس چند دقیقه صبر کنید و دوباره verify کنید. برای جزئیات دامنههای اختصاصی را در مستندات ببینید و راهنمای ما درباره وصل کردن دامنه اختصاصی را.
پرسشها
تفاوت HTTP و HTTPS چیست؟
HTTP دادهها را بین مرورگر و وبسایت بهصورت متن خوانا میفرستد. HTTPS همان HTTP است که از یک اتصال رمزشده TLS عبور میکند؛ بنابراین کسانی که روی همان شبکه یا مسیر ارسال هستند نمیتوانند دادهها را بخوانند یا تغییر دهند، و مرورگر هم میتواند بررسی کند که با سایت واقعی صحبت میکند.
آیا SSL و TLS یک چیزند؟
TLS جانشین مدرن SSL است. همه نسخههای SSL قدیمی و ناامن شدهاند و وبسایتهای امن امروزی از TLS استفاده میکنند. مردم از عادت هنوز «گواهینامه SSL» میگویند، اما گواهینامهها با TLS کار میکنند.
آیا قفل مرورگر یعنی سایت امن است؟
نه. قفل نشان میدهد اتصال رمزنگاری شده و گواهینامه با دامنه مطابقت دارد. یک سایت کلاهبرداری هم میتواند گواهینامه معتبر داشته باشد. این فقط یعنی کسی نمیتواند اتصال را شنود کند، نه اینکه صاحب سایت قابل اعتماد است.
آیا برای گواهینامه SSL باید پول بدهم؟
معمولاً نه. مراجع صدور گواهینامه رایگان و خودکار مثل Let's Encrypt گواهینامههایی صادر میکنند که مرورگرها به آنها اعتماد دارند، و بیشتر سرویسهای میزبانی آنها را برای شما میگیرند و تمدید میکنند. گواهینامههای پولی بیشتر پشتیبانی یا بررسیهای هویتی اضافه میکنند.
چرا سایتم «Not Secure» نشان داده میشود؟
دلایل رایج اینهاست: باز کردن سایت با http:// بهجای https://، گواهینامهای که منقضی شده یا آن دامنه دقیق را پوشش نمیدهد، یا صفحهای که تصاویر یا اسکریپتها را با http:// ساده بارگذاری میکند (محتوای مخلوط یا mixed content).