پنجشنبه ۰۴ اردیبهشت ۱۴۰۴

Thursday, April 24, 2025 GMT +3:30

پروتکل امن HTTPS و رمزنگاری SSL چیست؟

web-ssl-https

همان طور که می دانیم اطلاعاتی که به طور معمول در صفحات وب رد و بدل می شوند در بستر پروتکل HTTP (مخفف Hyper Text Transfer Protocol) انتقال می یابند، این پروتکل استانداردی تعریف شده است که با آن متن و سایر اطلاعات چندرسانه ای را در وب منتقل می کنند که این داده ها به دلیل خام بودن و رمزنگاری نشدن برای افراد سوم شخص قابل خواندن هستند، به طور مثال اگر کلمه عبور خود را در بستر این پروتکل از صفحه مرورگر به سرور یک سایت ارسال کنیم ممکن است از طریق سرویس دهنده اینترنت یا اشخاص دیگری که به صورت مجاز یا غیر مجاز به ترافیک شبکه ما دسترسی دارند، قابل روئیت باشد (به فرض با استفاده از برنامه هایی تحت عنوان Sniffer)، لذا استفاده از پروتکل HTTP از لحاظ امنیتی برای انجام کارهایی که با اطلاعات حساس از جمله حساب های بانکی و رمزهای مشتریان سر و کار دارند به هیچ وجه شیوه مناسبی نیست، از این رو بانک ها، فروشگاه های اینترنتی و در کل سایت هایی که امنیت کاربران برایشان اهمیت زیادی دارد، از پروتکل دیگری به نام HTTPS (مخفف Hyper Text Transfer Protocol Secure) جهت انتقال داده های رمزنگاری شده به شیوه SSL (مخفف Secure Sockets Layer) استفاده می کنند.

پروتکل HTTPS چیست و چه فرقی با HTTP دارد؟


HTTPS پروتکلی است که در بستر آن امکان رمزنگاری (Encrypt) و انتقال اطلاعات رمزنگاری شده فراهم می شود، به لحاظ تخصصی در HTTP در حالت پیش فرض پورت 80 مورد استفاده قرار می گیرد در حالی که در HTTPS این پورت 443 است، از طرفی همانطور که گفتیم در HTTP داده ها به صورت ساده و خوانا هستند اما در HTTPS رمزنگاری داده ها به وسیله لایه SSL و نسل جدید آن یعنی TLS (مخفف Transport Layer Security) انجام می شود.

SSL به چه معناست؟


SSL مخففی است از سرواژه های Secure Sockets Layer و در اصطلاح به استاندارد رمزنگاری و انتقال داده ها در وب اطلاق می شود، SSL را ابتدا شرکت Netscape به منظور نقل و انتقال امن و رمز نگاری شده اطلاعات ایجاد نمود و اکنون تقریبا تمام مرورگرهای استاندارد از جمله فایر فاکس، اینترنت اکسپلورر، گوگل کروم، سافاری و اپرا از آن  پشتیبانی می کنند، همچنین در این رابطه شرکت هایی وجود دارند که گواهی SSL ارائه می کنند.

شیوه رمزنگاری اطلاعات در SSL به چه صورت است؟


در بیانی ساده الگوریتم SSL اطلاعات را به وسیله دو کلید رمزنگاری می کند، کلید عمومی (Public Key) و کلید خصوصی (Private Key) که این ساز و کار را در اصطلاح PKI یا Public Key Infrastructure می گویند، بر این اساس پس از ارائه درخواست دریافت URL از طرف مرورگر (یا هر Client دیگری) به سرور در بستر اتصال امن، سرور کلید عمومی را به همراه پارامترهای شناسایی گواهی SSL خود با امضای دیجیتال در اختیار مرورگر قرار می دهد، کلید عمومی برای افراد سوم شخص دست یافتنی اما رمزنگاری شده و فاقد استفاده است، کلید خصوصی مقادیر رمزنگاری شده ای است که صرفا در اختیار سرور بوده و به صورت محفوظ نگهداری می شود.
در طی فرآیند برقراری ارتباط امن و به اصطلاح "دست دادن" (Handshake) بین دو طرف مرورگر وضعیت اعتبار گواهی را با بانکی که برایش تعریف شده می سنجد و در صورت مورد تایید بودن پیام پذیرش را به سرور ارسال می کند، در این هنگام سرور نشست SSL Encrypte را شروع کرده و با شروع نشست اطلاعات رمزنگاری شده رد و بدل می شوند.
SSL Handshake
نکته 1: کلید عمومی و کلید خصوصی به همدیگر مرتبط بوده و هر کدام به تنهایی کارایی نخواهند داشت.
نکته 2: از نظر فنی مراحل دیگری نیز در این فرآیند اتفاق می افتد، به طور مثال پس از تائید اعتبار گواهی SSL، مرورگر از کلید عمومی برای ایجاد Pre-Master Key استفاده و این کلید را به سرور ارسال می کند و در صورتی که این کلید مورد تائید سرور باشد ساز و کار Shared Secret شکل می گیرد که به معنی استفاده دو سمت (مرورگر و سرور) از عبارت رمزی شده مشترک برای حفاظت بستر ارتباط امن است.
نکته 3: گواهی SSL تحت فایل های خاصی که توسط شرکت های معتبر (Certification Authorities یا به اختصار CA) شناخته می شوند ایجاد می شود و لذا در صورتی که شخصی به هر طریق کلید عمومی خود را جایگزین کلید مرورگر کند، به جهت وجود این ساز و کار عملا درخواست او از طرف سرور رد خواهد شد.

چگونه مطمئن شویم که سایت از پروتکل امن استفاده می کند؟


چند فاکتور در تعیین معتبر بودن گواهی یک سایت نقش دارند، اول از همه کلید کوچکی است که در مرورگرهای مختلف با کمی اختلاف در مکان و شکل نشان داده می شود، برخی از مرورگرها در نسخه های جدید خود پس از برقراری یک اتصال امن، نوار آدرس را به رنگ سبز نیز نشان می دهند، فاکتور دیگر وجود عبارت HTTPS در ابتدای آدرس آن سایت است، باید دقت کنیم که برای برخی از سایت ها (بخصوص سایت های داخلی) ممکن است ابتدا نیاز به ثبت دستی گواهی آنها در بانک اطلاعاتی مرورگر باشد، متاسفانه اینگونه مشکلات گاهی به دلیل مسائل تحریم و گاهی به دلیل شخصی بودن ارائه کننده گواهی به وجود می آید.

چرا در برخی از سایت ها، مرورگر تقاضای تایید اعتبار می کند؟


بعضا ممکن است با صفحاتی روبرو شویم که مرورگر نسبت به منقضی شدن اعتبار گواهی ارتباط امن آنها پیام هشدار نمایش دهد، این اتفاق به چند دلیل ممکن است رخ دهد، یکی اینکه گواهی آن سایت واقعا به پایان رسیده و تمدید نشده باشد، دوم اینکه تاریخ و زمان سیستم ما از زمان حقیقی عقبتر یا حتی جلوتر باشد که در این صورت با اصلاح تاریخ و زمان مشکل برطرف می شود، دلیل سوم هم می تواند به مسائل فنی صفحه و ترکیب اشتباه داده های عادی با داده های رمزنگاری شده مربوط باشد که این عامل به مدیریت سایت ارتباط دارد و امکان رفع مشکل توسط کاربر میسر نیست.

چگونه برای سایت خود گواهی SSL تهیه کنیم؟


برای داشتن یک ارتباط امن در بستر HTTPS برای سایت خود نیاز به تهیه گواهی معتبر SSL داریم، معمولا این گواهی از طریق نمایندگی ها و سرویس دهندگان خدمات هاستینگ قابل خریداری (یا در برخی موارد رایگان) است و با یک جستجوی ساده در وب با تعداد زیادی از این شرکت ها روبرو خواهیم شد، گواهی SSL در انواع مختلف ارائه می شود که از صرف رمزنگاری داده ها تا تائید کامل اعتبار سایت و شرکت متغیر هستند، این موضوع در مدت زمان و مدارک مورد نیاز جهت فعال سازی گواهی و هزینه نهایی آن موثر خواهد بود، اگر صرفا نیاز به رمزنگاری داده ها و حفظ امنیت اطلاعات داریم معمولا روند تهیه گواهی SSL به صورت آنی، بدون نیاز به ارائه مدارکی خاص و با هزینه کمتر یا رایگان (مانند گواهی Let's Encrypt) انجام می گیرد، اما برای سایر انواع گواهی ها بسته به اعتباری که به برند ما می بخشند ممکن است نیاز به مدت زمانی خاص، ارائه مدارک معتبر هویتی یا حتی ثبت شرکت (شخص حقوقی) باشد، علاوه بر این موارد به لحاظ فنی به سروری با قابلیت پشتیانی از SSL و یک IP اختصاصی احتیاج خواهیم داشت، البته نگران نباشید اغلب شرکت های میزبان سایت به لحاظ فنی چنین قابلیتی را فراهم می کنند، همچنین مشکل تهیه IP اختصاصی با فعال بودن امکانی تحت عنوان SNI (مخفف Server Name Indication) قابل حل است، در صورت فعال بودن SNI در سرور می توان با استفاده از یک IP به سایت های مختلفی امکان استفاده از گواهی SSL را داد، بنابراین جهت جلوگیری از هزینه های اضافی بهتر است قبل از خرید گواهی SSL در این زمینه به دقت تحقیق، بررسی و با پشتیبانی سرور سایت خود مذاکره داشته باشیم، توصیه ما این است حتما هاستینگ هایی که SSL رایگان ارائه می دهند را بررسی داشته باشیم.

SSL رایگان و غیررایگان


اگر هدف از تهیه گواهی SSL صرفا نیاز به تبادل امن اطلاعات و بحث سئو سایت باشد استفاده از گواهی های رایگانی مثل Let's Encrypt کفایت می کند، Let's Encrypt از 12 آوریل 2016 مرجع صدور گواهی های ارائه شده توسط گروه عامل المنفعه ISRG (مخفف Internet Security Research Group) است و از نظر فنی تفاوت چندانی بین این نوع گواهی ها با نوع غیررایگان آن وجود ندارد اما از جنبه های دیگر تفاوت هایی وجود دارد که با توجه به هزینه بالای تهیه گواهی غیررایگان شاید این موارد برای طیف وسیعی از کسب و کارها قابل چشم پوشی باشد، از جمله این تفاوت ها اینکه مدت اعتبار گواهی رایگان دوره های 90 روزه است هرچند در حال حاضر به صورت خودکار تمدید می شود، همچنین باید توجه کنیم گواهی های رایگان ممکن است در برنامه ها و مرورگرهای قدیمی پشتیبانی نشوند به طور مثال با به روزرسانی اخیر Let's Encrypt این گواهی صرفا در OpenSSL 1.1.0 به بعد شناسایی می شود و در مرورگرهای قدیمی هم احتمالا خطای عدم اتصال امن دریافت خواهیم کرد، علاوه بر این طبق قوانین جاری مرکز توسعه تجارت الکترونیکی سایت هایی که به اینماد دو ستاره نیازمند هستند نمی توانند این نوع گواهی را مستند قرار دهند چون برای دریافت نماد اعتماد سطح دو ستاره حداقل زمان باقیمانده تا انقضای گواهی SSL باید یکسال باشد، البته قاعدتا این قانون ممکن است در آینده مورد بازنگری واقع شود و ذاتا به معنی ناکارآمد بودن گواهی های رایگان نیست.

اهمیت گواهی SSL برای موتورهای جستجو


استفاده از پروتکل HTTPS و رمزنگاری SSL از نظر موتورهای جستجو یک فاکتور مهم محسوب می شود اما به دلیل نیاز به انجام فرایندهای فنی اتصال بین مرورگر و سرور یا بعضا اعمال محدودیت هایی از سمت ISP ها، کم و بیش ممکن است سرعت انتقال اطلاعات از این طریق نسبت به شیوه معمول یعنی HTTP پائینتر باشد، لذا در صورتی که با مشکل کندی مواجه بودیم و بحث سئو (SEO یا بهینه سازی برای موتورهای جستجو) با توجه به نوع سایت (اداری، سازمانی، شخصی و...) اهمیت زیادی نداشت می توانیم موقتا یا دائمی تنها در صفحاتی از این پروتکل استفاده کنیم که اطلاعات حساسی در آنها رد و بدل می شود، خوشبختانه طی سالیان اخیر با فراگیر شدن استفاده از گواهی SSL مشکلات زیرساختی مرتبط با آن نیز کمتر شده است.

مشکل تداخل منابع HTTP و HTTPS


در استفاده از پروتکل HTTPS دقت داشته باشیم نباید محتوایی از قسمت HTTP سایتمان را در صفحات HTTPS استفاده کنیم، به طور مثال نباید فایل تصویر را که قسمت src آن با آدرس http://yoursite.com شروع می شود در صفحه ای که به صورت https://yoursite.com است وارد کنیم، در این صورت مرورگر پیام هشداری مبنی بر امن نبودن اتصال به کاربر نمایش خواهد داد، برای رفع این حالت می توانیم کلیه فایل ها را به صورت آدرس مطلق با https درج یا اینکه فایل ها را به صورت آدرس دهی نسبی به طور مثال به صورت
../images/logo.png
استفاده کنیم.

نسخه های متفاوت SSL


علاوه بر SSL که استاندارد معمول و متداول در خصوص رمزنگاری داده ها در وب است، ممکن است با عبارت دیگری تحت عنوان TLS (مخفف Transport Layer Security) روبرو شویم، این استاندارد در واقع نسخه پیشرفته و بهبود یافته SSL است و صرفا به لحاظ فنی تفاوت هایی وجود دارد (آخرین نسخه از SSL نسخه 3.0 است و برخی TLS را نسخه 3.1 SSL نیز می نامند).
دسته بندی: مهارتهای وب » دانستنی ها
related مطالب بیشتر:
چگونه با برنامه Outlook ایمیل ارسال و دریافت کنیم؟
IP چیست و چه کاربردی دارد؟
لیست کدهای وضعیت HTTP و معنی خطاهای سرور
اصطلاحات و مفاهیمی که مدیر سایت باید بداند!
دلایل بهم ریختن قالب وبلاگ و سایت
دیدگاه
more ۳۶ دیدگاه برای این مطلب ارسال شده است.
more چینش دیدگاه ها به ترتیب از جدیدترین به قدیمی ترین است.
سایه
۲۲:۲۳ ۱۳۹۲/۱۱/۱۲
با سلام ممنون از مطلب مفیدتون
یه سوال داشتم اگر از این پروتکل در ارسال ایمیل استفاده کنیم برای مثال جیمیل , ایا محتوای اون ایمیل توسط گوگل قابل خوندنه؟
سوالتان دقیق نیست! اگر منظورتان این است که از طریق پروتکل HTTPS ایمیلی به حساب های گوگل (جیمیل) ارسال کنید، بله، محتوا توسط این سرویس قابل خواندن است، در واقع این پروتکل روند انتقال اطلاعات را ایمن سازی می کند، قاعدتا اطلاعات برای فرستنده و گیرنده باید قابل خواندن باشند.
مازيار
۱۱:۳۵ ۱۳۹۲/۱۰/۲۴
با سلام
وقت شما بخير
ممنون از اطلاعات كاربردي شما.
براي من سوال اساسي اينجاست كه در اولين مراحل چگونه كليد ها و هويت سرويس گيرنده و سرويس دهنده به هم اثبات ميشود؟
به عبارت بهتر گام اول براي برقراري كليد چيست؟
چگونه اولين كليد چه سري در متقارن و چه كليد عمومي در نامتقارن رد و بدل ميشود؟
هر چند این مسئله کمی تخصصی است، اما توضیحی در حد توان.
ابتدا دو نکته:
- پروتکل Secure Sockets Layer یا SSL یک قرارداد تعریف شده بین واسط کاربری (مرورگر) و سرور است.
- این پروتکل برای کد کردن اطلاعات از دو کلید استفاده می کند (عمومی و شخصی).
شرح اتفاقی که می افتد:
هنگامی که مرورگر درخواست مربوط به یک صفحه وب را به سرور ارسال می کند، سرور اطلاعات مربوط به اعتبارسنجی گواهی SSL خود را به همراه کلید عمومی به مرورگر می فرستد، مرورگر صحت اطلاعات را با بانکی که برایش تعریف شده یا با ارتباط با سرور خود می سنجد، در صورت مورد تایید بودن گواهی، پاسخ پذیرش را به سرور سایت ارسال می کند، در این هنگام سرور، نشست SSL Encrypte را شروع کرده و مرورگر با کلید عمومی که در اختیار دارد تحت استاندارد خاصی اطلاعات ارسالی را کدگذاری می کند و در گام آخر اطلاعات کد شده با کلید اختصاصی که در اختیار سرور است تبدیل به اطلاعات قابل خواندن می شود.
sam
۱۷:۳۶ ۱۳۹۲/۰۸/۱۷
با سلام.
مطالب بسيار عالي و دقيق بيان شده اند.
بسيار عاليست.
متشكرم.
hjjat
۱۴:۳۶ ۱۳۹۲/۰۲/۱۲
با سلام و خسته نباشید. چند روزه که نمیتونم وارد سایت هایی بشم که از پروتکل https استفاده میکنن. لطفا راهنمایی کنید ممنونم.
این مشکل ممکن است علت های مختلفی داشته باشد، ابتدا بررسی کنید که مشکل در تمام مرورگرها وجود دارد یا خیر، اگر تنها در یک مرورگر دیده می شود، ببینید چه برنامه یا پلاگینی را جدیدا نصب کرده اید، آن را موقتا غیر فعال یا حذف کنید، تنظیمات قسمت پراکسی را نیز چک کنید که در حالت انتخاب نشده باشد (یعنی نباید از طریق پراکسی به اینترنت وصل شوید).
اما اگر مشکل در تمام مرورگرها دیده می شود، یا ایراد از وجود یک نرم افزار خاص در سیستم (مانند آنتی ویروس یا فایروال) است یا اینکه بخشی از سیستم عامل دچار اختلالی شده است (به دلایل مختلف، مانند نصب یک برنامه غیر استاندارد، ویروسی شدن و...) در چنین شرایطی کد های زیر را در محیط Dos وارد کنید (از طریق برنامه command prompt):
regsvr32 softpub.dll
regsvr32 wintrust.dll
regsvr32 initpki.dll
regsvr32 dssenh.dll
regsvr32 rsaenh.dll
regsvr32 gpkcsp.dll
regsvr32 sccbase.dll
regsvr32 slbcsp.dll
regsvr32 cryptdlg.dll
این دستورات اطلاعات فایل های لازم در رجیستری را در صورت حذف شدن به حالت قبل برمی گردانند.
محمدمهدی
۱۳:۴۴ ۱۳۹۲/۰۲/۰۲
استفاده کردم خیلی ممنون .
hamid
۱۰:۴۳ ۱۳۹۱/۰۹/۱۴
خسته نباشید. خیلی چیزا از سایتتون یاد گرفتم.
more لطفا پیش از ارسال دیدگاه نکات زیر را مد نظر داشته باشید:
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.



 refresh
10 × 10
2 × 5
20 × 20
=