موضوع هفته پیش جلسات باز نرمافزاری تبریز، امنیت در وب بود و مسعود خیلی عالی مباحث رو مطرح کرد، و من هم یکی از مواردی که مسعود اشاره کرد و در موردش توضیح داد رو انتخاب کردم, بریم ببینیم SSL چیه و چه کار میکنه؟
SSL چیست:
میدونیم که اطلاعات ردوبدل شده بین سرور و کلاینت (سمت سرویس دهنده و سمت کاربر)، در طول مسیر میتونن توسط ISP ها و … خونده بشن و تقریبن همه میخوایم ارتباط امنی داشته باشیم در نتیجه از روشهای رمزگذاری اطلاعات استفاده میکنیم البته در صورت رمز شدن هم باز امکان خونده شدن اطلاعات در شبکه هست, ولی به سختی ، تا حدی که سازمانها و … اطلاعات رمز شده افراد خاصی رو رمزگشایی میکنن. (البته غیر از سازمانها افراد دیگری هم احنمالن مشتاق باشن به اطلاعات دسترسی داشته باشن 🙂 ).
یکی از راههای رمزنگاری متنها در اینترنت SSl است، یه پروتکل (مجموعه قوانین) رمزنگاری که ارتباطات بین سرور و کلاینت رو رمزگذاری میکنه. شرکت Netscape برای اولین بار از SSL استفاده کرد در واقع ابداعاش کرد، نسخه 1.0 که هیچوقت بیرون نیومد و برای استفاده خودشون(Netscape) بود و بعد در سال 1995 نسخه 2.0 منتشر شد که به دلیل داشتن حفرههای امنیتی نسخه 3.0 در سال 1996 منتشر شد و نسخههای بالاتر از 3.0 که TLS هست و الان در موردش صحبت نمیکنم هرچند TLS و SSL زیاد متفاوت نیستن.
مدل رمزنگاری SSL:
SSL از مدل رمزنگاری نامتقارن استفاده میکنه به این صورت که یه جفت کلید می سازه، کلید عمومی برای رمز گذاشتن و کلید خصوصی برای رمزگشایی، اطلاعات رمز شده با کلید عمومی فقط قابل خوندن برای کاربری هست که کلید خصوصی متناظر با اون کلید عمومی رو داره.
این دو کلید با هم رابطه ریاضی دارند ولی نمیشه از روی کلید عمومی کلید خصوصی رو بدست آورد به همین دلیل کلید عمومی رو میتونین با خیال راحت منتشر کنین و فقط کلید خصوصی که برای رمزگشایی استفاده میشه رو باید مخفی نگردارین.(این بحث رو بیشتر توضیح میدم ولی نه الان. بعدن در موردش مینویسم).
استفاده از SSL برای انتقال متن:
آدرسهای اینترنتی (url) برای استفاده از SSl به جای پروتکل http از https استفاده میکنن، حتمن تا حالا خیلی از آدرسهای اینترنتی رو دیدین که با https شروع میشن و کنار آدرس اینترنتیاشون آیکون قفل بسته هست به معنی رمز شده، مثل سرویس ایمیل گوگل (جیمیل)، https://gmail.com، گوگل برای برقراری امنیت بیشتر به صورت پیش فرض از https استفاده میکنه. یا مثلن وقتی تو فروشگاه اینترنتی خرید میکنین و میرین برای پرداخت اینترنتی و وارد درگاه بانک مورد نظر میشین اگه به آدرس دقت کنین میبینین که با https شروع شده و شما میتونین اطلاعات بانکیاتون رو وارد کنین با این پیش فرض که ارتباط امن هست و اطلاعات کارت بانکی شما به صورت رمز شده منتقل میشه.
برای استفاده از SSL هر دو طرف نیاز به گواهینامه معتبر SSl دارن که در طرف سرور 1-با دنبال کردن یک سری دستورات فرد میتونه خودش روی سرور این گواهی رو ایجاد کنه و یا 2-از شرکتهای صادر کننده این گواهی، درخواست گواهینامه SSL کنه.
اگه طرف سرور این گواهینامه رو نداشته باشه https همون http میشه و یه ارتباط بدون رمزگذاری خواهیم داشت و اگر داشته باشه ولی گواهینامه اش منقضی شده باشه یا گواهینامه معتبر نداشته باشه (میتونه به دلیل شماره 1 در پاراگرف قبلی باشه ) و … که مرورگر یه اخطار میده که این ارتباط امن نیست میخوای ادامه بدی یا نه ؟ مثل عکس زیر:
و اگه این حالت پیش بیاد چه کنیم؟ به نظرم اگه قرار نیست اطلاعاتی منتقل کنین مثل ایمیل و پسورد و شماره کارت اعتباری و … اون وقت Process anyway رو بزنین و برین تو وبسایت و در غیر این صورت محتاط باشین. ولی این حالت همیشه به معنی امن نبودن ارتباط نیست.
و اگر رو سرور گواهینامه SSL معتبر باشه که کلاینت و سرور شروع میکنن به ردوبدل کردن یک سری اطلاعات تا یه ارتباط رمزگذاری شده رو شروع کنن، و من ترجیح میدم این موضوع رو که سرور و کلاینت چه اطلاعاتی ردوبدل میکنن و چه جوری ارتباط برقرار میشه رو برای پست بعدی مرتبط بنویسم.
من در حقیقت میخواستم در باره نحوه ارتباط سرور و کلاینت و اینکه چه جوری اطلاعات رمز میشه بنویسم دیدم بهتره یه توضیح کوچیکی بدم و تو پست بعدی این مبحث رو باز کنم. به همین خاطر سعی کردم زیاد تو ریز نرم، و یه سری نکته های کلی و ساده رو نوشتم، امیدوارم مفید باشه و در هر حال سعیام رو کردم. 🙂
سوال بپرسیم حتا اگه دوستامون از دستمون دیوونه میشن ولی از گوگل هم استفاده کنیم. 😉
با تشکر از همه رفقایی که سوالهای منو جواب دادن، دوستون دارم همهتونو 🙂