یکشنبه ۰۲ دی ۱۴۰۳

Sunday, December 22, 2024 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 مطالب بیشتر:
آموزش کاربردی عبارات با قاعده (Regular Expressions)
اصطلاحات و مفاهیمی که مدیر سایت باید بداند!
حمله DDoS چیست و چگونه از آن جلوگیری کنیم؟
جلوگیری از بلاک یا ارسال ایمیل به اسپم با SPF
لیست کدهای وضعیت HTTP و معنی خطاهای سرور
دیدگاه
more ۳۶ دیدگاه برای این مطلب ارسال شده است.
more دیدگاه جدید بر اساس تاریخ ارسال در انتهای دیدگاه های موجود نمایش داده می شود.
۱۲:۰۱ ۱۳۹۷/۰۶/۰۶
عالییییییییییییییییی
nike
۱۰:۳۱ ۱۳۹۷/۰۷/۰۵
سلام
سوال
آیا httprequest که فرستاده می شود به سرور دارای شناسه هست یا نه؟
منظور از "شناسه" مشخص نیست؟! در هر درخواست از سمت کاربر به سرور اطلاعاتی رد و بدل می شود که می تواند شامل مقادیر کوکی، مشخصات واسط کاربری و... باشد.
رضا
۲۰:۰۴ ۱۳۹۸/۰۴/۱۱
سلام
خواهش می کنم این رو بذارید تا ملت گول کلاهبرداری برتینا رو نخوره من تمام ماجرا رو اینجا نوشتم
http://iwhy.ir/?p=1066
من یه مال باختم و حتی به اینماد هم شکایت کردم چند ماهه هنوز جوابم ندادن، بیایید باهم جلوی ناعدالتی رو بگیریم
شاید برای ماهم اتفاق بیافته
ممنون از وبگو
لازم به توضیح است انتشار دیدگاه ها دلیل بر رد یا تائید محتوای آنها نیست و قاعدتا حق پاسخگویی متقابل برای برند مطرح شده محفوظ می باشد.
Abbas rahmati
۱۴:۱۶ ۱۳۹۸/۰۵/۲۳
سلام همه چی توی قسمت اینکه اس اس ال چطور کار میکنه درست بود فقط اخرشو درست نگفتید
بسیار ممنون از نکته سنجی و یادآوری، در حال بررسی این قسمت هستیم و در صورت نیاز حتما اصلاح خواهد شد.
مریم
۱۲:۵۶ ۱۳۹۸/۰۷/۲۰
سلام
وقت بخیر من دو تا سوال داشتم
اول اینکه برای اضافه کردن https به سایت استفاده از کد
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
کافی است ؟
سوال دومم
اگر کاربر آدرسی اشتباه وارد کند من با این کد
RewriteRule ^error$ error-page.php
ErrorDocument 404 http://localhost/error
صفحه مورد نظرم نمایش میدهم همراه با لینک برای بازگشت به صفحه اول .
سوالم اینجاست بجای http://localhost/error من آدرس سایت جایگذاری میکنم و درسته اما میخواستم به شیوه ای بنویسم که نیاز به آدرس سایت مشخص نباشد یعنی من روی هر هاست و با دامنه ای آپلود کردم جواب بدهد .
در مورد سوال اول برای انتقال از آدرس HTTP به آدرس HTTPS دستور htaccess درج شده کفایت می کند، اما اگر به فرض بخواهید سایت صرفا به صورت بدون www نمایش داده شود باید متناسب با آن دستور اضافه کنید:
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
در مورد سوال دوم می توانید به جای آدرس دامنه سایت عبارت
%{HTTP_HOST}%
را قرار دهید، البته قاعدتا این دستور زمانی عمل می کند که فایل error-page.php نیز در سایت مورد نظر در همان دایرکتوری وجود داشته باشد!
مریم
۱۵:۰۰ ۱۳۹۸/۰۷/۲۰
ممنون مشکل دومم حل شد طبق راهنمایی شما
اما مورد اول قفل کنار https اصولا باید سبز رنگ باشه مثل سایت شما اما قفل طوسی رنگه و علامت مثلث زرد روی قفله . باید چیکار کنم به درستی کار کند مثل سایت شما؟
اگر بر روی آیکن کلیک کنید علت خطا توضیح داده شده است، ممکن است در بین صفحات HTTPS از آدرس های URL به صورت HTTP استفاده کرده باشید، به طور مثال در قسمت src تصاویر سایت آدرس ها با HTTP شروع شده باشند، در صفحات HTTPS باید تمام URL ها از منبع سایت شما به صورت HTTPS یا حالت نسبی (dir/..) باشند.
more لطفا پیش از ارسال دیدگاه نکات زیر را مد نظر داشته باشید:
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.



 refresh
10 × 10
5 × 8
20 × 20
=
آخرین دیدگاه ها
more برای دسترسی سریع به یادداشت مربوطه می توانید از لینک مطلب در کادر زیر استفاده کنید.
رضا
ممنونم از شما بابت وقتی که گذاشتید و پاسخ دادین. بی صبرانه منتظر برنامه شما هستیم. راستی یه سوال خدمت شما داشتم. بهترین راه...
۱۴۰۳/۰۹/۲۷

رضا
اصلاح می کنم دیکودر ایرانی یون ۱۲ هم گویا پیدا شده امان از دست ...
۱۴۰۳/۰۹/۲۱

رضا
سلام ممنون برای پاسخ خوبتون. فرمودین <نکته 1: با مبهم سازی، سورس ها همچنان قابل کپی هستند منتها برای انسان گیج کننده، نامفهوم و...
۱۴۰۳/۰۹/۲۱

رضا
سلام من چند ماهی هست که کلی روی یه پروژه سیستم مدیریت محتوا با زبان php کار کردم و پروژه کامل شده. قصد...
۱۴۰۳/۰۹/۲۰

ناشناس
سلام خسته نباشید وقتتون بخیر چطور می تونم با استفاده از حلقه وایل بزرگ ترین و کوچک ترین عدد را از بین چند عدد پیدا...
۱۴۰۳/۰۹/۱۸

علایی
با سلام و درود بی پایان و خوشحالم که با این سایت آشنا شدم بنده وردپرس کار هستم اگه لطف بکنید و نحوه شمسی سازی...
۱۴۰۳/۰۹/۱۲

روزمرگی های یک مهندس عمران
در جستجوی یک مطلب در مورد مهندسی عمران داشتم میگشتم که رسیدم به این سایت وبگو که یک سایت تخصصی آموزش برنامه نویسی وب و...
۱۴۰۳/۰۹/۱۱

روزمرگی های یک مهندس عمران
من یک وبلاگ در بلاگ اسپات دارم و میخوام موتور جستجوی گوگل در وبلاگ استفاده کنم، پرسشم اینه که آیا خود بلاگر این ابزار را...
۱۴۰۳/۰۹/۰۹

سیدعباسی
با تشکر از شما استاد بزرگوار تست کردم واسه اعداد بزرگتر بالا و پایین می کنه و صحیح نیست مثلا از یک تا ۹...
۱۴۰۳/۰۹/۰۴

هیوا
سلام ببخشید من کد زنی رو بصورت آموزش شروع کردم اما اینکه چطور صفحه رو رفرش کنم که همزمان ببینم کدهایی که میزنم تاچه حد...
۱۴۰۳/۰۹/۰۳

سیدعباسی
با تشکر از شما استاد خیلی خوب بود کارم درست شد خدا خیرتون بده فقط یه سوال دیگه هم دارم چطوری string قبلی رو...
۱۴۰۳/۰۹/۰۳

سیدعباسی
با سلام و خسته نباشید با تشکر از راهنمایی های شما کارم درست شد سپاسگزارم یه مشکل دارم من داده های به این شکل...
۱۴۰۳/۰۸/۳۰

ایمان
سلام و عرض ادب شکل و شمایل سایتم در موبایل و فایر فاکس درست است در کروم به هم ریخته امکان داره کمکم کنید
۱۴۰۳/۰۸/۲۹

سیدعباسی
با تشکر از شما استاد من مشکل خودم رو بصورت زیر حل کردم تغییر بدید چون وقتی کدهارو می نویسیم مشخص نیست...
۱۴۰۳/۰۸/۱۹

سیدعباسی
با سلام و تشکر از شما دست شما درد نکنه مشکل این کد چیه؟ کار نمی کنه
۱۴۰۳/۰۸/۱۶

سیدعباسی
با سلام و خسته نباشید واسه حذف کپی رایت نمی خوام واسه لینک های خودم میخوام که تابعش رو داشته باشم بصورت عادی لینکها...
۱۴۰۳/۰۸/۱۴

سیدعباسی
با تشکر از شما درست شد ببخشید یه سوال دیگه هم دارم چطور می تونم لینک یک مطلب رو پیدا کنم بعد بگم اگه...
۱۴۰۳/۰۸/۱۳

سیدعباسی
ببخشید کد قبلی اشتباه بود دقت نکرده بودم شرمنده کد اصلاح شده اینه می خوام در انتها همه ی برچسب هارو داشته باشم با...
۱۴۰۳/۰۸/۱۰

سیدعباسی
با سلام خسته نباشی من از این تابع برای استخراج برچسب های سایتم استفاده می کنم تنها مشکلی که این تابع داره اینکه...
۱۴۰۳/۰۸/۰۹

سیدعباسی
با تشکر از شما مشکلم حل شد خیلی ممنون از شما یه سوال دیگه هم دارم البته ببخشید من یه textarea دارم...
۱۴۰۳/۰۸/۰۶

سیدعباسی
با سلام ببخشید هی مزاحمتون میشم من یه پلاگین دارم برای خروجی گرفتن از sitemap لینکهایی که برام خروجی می گیره از بالا به...
۱۴۰۳/۰۸/۰۵

سیدعباسی
با تشکر از شما دوست عزیز خیلی خوب بود یه سوال دیگه هم دارم البته ببخشید وقتی از سایت مپ خروجی میگیریم؟ که لینکها رو...
۱۴۰۳/۰۸/۰۴
  در انتظار بررسی: ۰
 پاسخگویی به سوالات ممکن است تا ۲۴ ساعت زمان ببرد.