Secure Sockets Layer یا به اختصار SSL ، یکی از پروتکل های رمزنگاری است که به منظور برای حفظ امنیت تبادل اطلاعات از طریق اینترنت ایجاد شده است. پروتکل SSL توسط شرکت Netscape به منظور نقل و انتقال امن و رمزی اطلاعات ایجاد شد. امروزه تقریبا تمام مرورگرهای استاندارد از جمله فایر فاکس، اینترنت اکسپلورر، اپرا، گوگل کروم و سافاری از این قابلیت پشتیبانی میکنند. در ادامه با این پروتکل رمزگذاری بیشتر آشنا خواهیم شد.
SSL چیست؟
اطلاعات و داده ها در اینترنت به صورت پیشفرض در بستر پروتکل HTTP یا Hyper Text Transfer Protocol انتقال مییابند. در این پروتکل دادهها رمزگذاری نمیشوند و برای افراد دیگر قابل خواندن هستند. مثلا اگر پسورد و اطلاعات شخصی خود را در بستر این پروتکل به سروری منتقل کنید، این امکان وجود دارد که از طریق سرویس دهنده اینترنت، این اطلاعات قابل مشاهده باشند. بنابراین بسیاری از سرویسهای مبتنی بر اینترنت از پروتکل دیگری جهت انتقال دادهها بین سرویس دهنده (Server) و سرویس گیرنده (Client) استفاده کردند.
این پروتکل امنیتی همان SSL است که اطلاعات را با استفاده از کلیدهای خصوصی و عمومی رمزنگاری (Encrypt) میکند. اطلاعات رمزگذاری شده توسط این پروتکل در سمت دیگر رمزگشایی (Decrypt) می شوند. امنیت در این پروتکل در مبدا و مقصد اطلاعات حفظ میشود، یعنی در هر دو طرف، فرایند رمزنگاری و رمزگشایی انجام می گیرد. در ابتدا از این پروتکل فقط در سایت هایی که اطلاعات حساس کاربران مانند اطلاعات شخصی، اطلاعات حسابهای بانکی و... را دریافت میکردند، استفاده میشد.
اما امروزه از این پروتکل معمولا در بیشتر سایتها استفاده میشود. زیرا موضوع امنیت اطلاعات کاربران بیش از پیش در دنیای اینترنت اهمیت پیدا کرده است. از طرفی دیگر استفاده از پروتکل امنیتی SSL در سایتها از نظر سئو بسیار مفید خواهد بود. وب سایت هایی که از این پروتکل جهت رمزگذاری دادهها استفاده می کنند، معمولا از طریق پروتکل HTTPS با کلاینتها ارتباط برقرار می کنند. برای داشتن یک ارتباط امن در بستر پروتکل HTTPS برای سایت خود، نیاز به تهیه یک گواهی معتبر ssl دارید.
امنیت در پروتکل SSL
همان طور که اشاره شد، در این پروتکل اطلاعات تبادل شده بین سرور و کلاینت رمزگذاری می شوند؛ بر این اساس این اطلاعات توسط شخص سوم قابل مشاهده نخواهند بود. البته همچنان دسترسی به این دادهها امکان پذیر است، اما با توجه به اینکه آنها رمزگذاری شده اند، برای مشاهده دادههای آن ها، نیازمند رمزگشایی هستند.رمزگشایی این داده بدون کلید مورد استفاده در نشست (session) ارتباطی امن امکان پذیر نیست. بنابراین، این پروتکل عملاً غیرقابل نفوذ است.
این موضوع به این منظور نیست که راهی برای سرقت اطلاعات وجود ندارد. زیرا این دادهها فقط در طول مسیر انتقال میان سرور و کلاینت رمزگذاری شده اند؛ اما دادههای اصلی، در سمت سرور و کلاینت توسط پروتکل امن SSL رمزنگاری نمی شوند. به همین دلیل، ممکن است با استفاده از بدافزاری یا روشهای دیگر، این اطلاعات قبل از رمزگذاری و یا پس از رمزگشایی به سرقت روند. حتی ممکن است کلیدهای رمزگشایی و رمزگذاری اطلاعات، از سمت سرویس دهنده پروتکل امن، به سرقت رفته باشند. البته تاکنون هیچ گزارشی مبنی بر سرقت اطلاعاتی که با استفاده از این پروتکل تبادل شده اند، منتشر نشده است.
رمزگذاری اطلاعات توسط SSL
برقراری ارتباط از طریق SSL، نیازمند پیش نیازهایی از جمله کلیدهای نامتقارن (شامل کلید عمومی و کلید خصوصی) و کلید سیشن (Session key) است. کلید عمومی همانطور که از نامش مشخص است، برای اشخاص سوم شخص قابل خواندن است. اما کلید خصوصی فقط توسط ارسال کننده و دریافت کننده اطلاعات، قابل استفاده میباشد.
همچنین این پروتکل میتواند از ترکیب رمزنگاری متقارن و نامتقارن استفاده کند. در الگوریتم رمزنگاری متقارن کلید رمزگذاری و رمزگشایی یکسان است ولی در الگوریتم رمزگذاری نامتقارن، این کلیدها متفاوت هستند. کلیدهای نامتقارن روی سرور قرار دارند، ولی کلید سیشن توسط سرور و کلاینت برای برقراری ارتباط SSL ساخته می شود. کلید سیشن ساخته شده توسط کلاینت و سرور یکسان و یا به عبارتی بهتر متقارن است. در این روش پس از اینکه اتصال امن برقرار شد، دادهها به وسیله دو کلید عمومی (Public key) و خصوصی (Private key) رمزنگاری میشوند. فرآیند برقراری ارتباط در این روش به صورت زیر است :
سرور یک کپی از کلید عمومی خود را برای کلاینت (مرورگر کاربر) ارسال می کند.
کلاینت با استفاده از کلید عمومی که دریافت کرده است، کلید سیشن ساخته شده را کدگذاری میکند و برای سرور میفرستد.
سرور با استفاده از کلید خصوصی که دارد، اطلاعات دریافتی را رمز گشایی میکند تا به Session key دسترسی پیدا کند.
در نهایت سرور و کلاینت هر دو با استفاده از کلید سیشن، اطلاعاتی را رمزنگاری و رمزگشایی می کنند. این فرآیند یک مسیر ارتباطی امن میان کلاینت و سرور ایجاد می کند. زیرا تنها این دو از کلید سیشن اطلاع دارند و این کلید فقط با هدف این اتصال ایجاد شده است. در هر زمان که اتصال میان سرور و کلاینت قطع شود، این مراحل باید دوباره انجام شوند.
اهمیت پروتکل در مباحث سئو
یکی از فاکتورهای بسیار مهمی که گوگل در چندسال اخیر به آن اهمیت ویژه ای داده است، بحث امنیت اطلاعات کاربران در سطح وب میباشد. سایت هایی که هنور از پروتکلهای غیرامن مانند http استفاده میکنند امروز شانس زیادی برای نمایش در SERP (Search Engine Results Pages) ندارند، به همین دلیل گوگل توصیه اکید داشته که وب سایتها از پروتکلهای امن SSL استفاده کنند تا هم امنیت اطلاعات کاربران تامین شود هم مانع از دست دادن رتبه نشوند.
اگر میخواهید بیشتر در زمینه پروتکلهای مطالعه کنید مقالات زیر را دنبال کنید
با عرض سلام .لطفا در صورت امکان در رابطه با کتابخانه ssl در پایتون نیز توضیحاتی بفرمایید.ظاهرا هیچ رفرنس جامعی به زبان فارسی در این مورد وجود ندارد.
نازنین کریمی مقدم۰۵ آذر ۱۴۰۱، ۲۱:۳۲
درود
سعی میکنیم بررسی کنیم و در صورت امکان در تقویم محتوایی قرار بدیم اما تا اون زمان میتونید از <a href="https://snyk.io/blog/implementing-tls-ssl-python/" target="_blank" rel="noopener nofollow ugc">راهنمای ssl در پایتون</a> استفاده کنید. چون کد هست فارسی و انگلیسی خیلی تفاوت نداره.
بابک راد۱۶ شهریور ۱۳۹۹، ۱۸:۴۰
عالی بود..
یه سوال، منظور از سرویسدهنده ssl دقیقا چی هست؟ سروری هست که یک سرور دیگه برای ایجاد کلیدهای عمومی و خصوصی به اون درخواست میده؟
المیرا ناصح۲۱ شهریور ۱۳۹۹، ۱۰:۰۸
سلام دوست عزیز.
ببینید شما وقتی یک وبسایتی روی وب سروری راه اندازی میکنید، اگر بیاید و تنظیمات مربرط به پروتکل SSL رو روی سرور خودتون فعال کنید یک لایه امنیتی به سرور خودتون افزودید که مکالمات بین سرور شما و کلاینت هاش بر اساس پروتکل SSL امن بشه. در واقع همون سرور خودتون رو مجهز به پشتیبانی از پروتکل SSL کردید.
poweral۱۶ خرداد ۱۳۹۹، ۱۱:۳۴
سلام
مطالب شما عالی و قابل استفاده بود
تشکر
محمود یادگاری۲۱ بهمن ۱۳۹۸، ۱۰:۱۶
مررسی از آقای آوند عزیز. انشالله همیشه پایند و موفق باشی.
hamid۰۷ خرداد ۱۳۹۸، ۲۱:۵۵
با سلام
با تشکر از مطالب مفیدتون که در سایت قرار میدید لازم دونستم دو موضوع رو بگم
یکی اینکه یه مثال عملی برای خوانندگان قرار بدین که با این مفهوم بهتر آشنا بشن
دوم اینکه منابع خوب معرفی کنین که خوانندگان بتونن دانششون رو در این زمینه تکمیل کنن
بازم تشکر از سایت خوب و مطالب آموزندتون
حمید
مهدی علامه۱۱ خرداد ۱۳۹۸، ۰۵:۱۲
سلام حمید جان
مرسی از بازخوردهای بسیار خوبت
حتما در مقالات آینده سعی میکنیم این موارد را لحاظ کنیم
تشکر