پروتکل HTTPS چیست و چه فرقی با HTTP دارد؟
SSL به چه معناست؟
شیوه رمزنگاری اطلاعات در SSL به چه صورت است؟
چگونه مطمئن شویم که سایت از پروتکل امن استفاده می کند؟
چرا در برخی از سایت ها، مرورگر تقاضای تایید اعتبار می کند؟
چگونه برای سایت خود گواهی SSL تهیه کنیم؟
SSL رایگان و غیررایگان
اهمیت گواهی SSL برای موتورهای جستجو
مشکل تداخل منابع HTTP و HTTPS
نسخه های متفاوت SSL
پروتکل امن HTTPS و رمزنگاری SSL چیست؟
همان طور که می دانیم اطلاعاتی که به طور معمول در صفحات وب رد و بدل می شوند در بستر پروتکل 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 را شروع کرده و با شروع نشست اطلاعات رمزنگاری شده رد و بدل می شوند.
نکته 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 نیز می نامند).
آموزش کاربردی عبارات با قاعده (Regular Expressions)
اصطلاحات و مفاهیمی که مدیر سایت باید بداند!
حمله DDoS چیست و چگونه از آن جلوگیری کنیم؟
جلوگیری از بلاک یا ارسال ایمیل به اسپم با SPF
لیست کدهای وضعیت HTTP و معنی خطاهای سرور
دیدگاه جدید بر اساس تاریخ ارسال در انتهای دیدگاه های موجود نمایش داده می شود.
سوال
آیا httprequest که فرستاده می شود به سرور دارای شناسه هست یا نه؟
خواهش می کنم این رو بذارید تا ملت گول کلاهبرداری برتینا رو نخوره من تمام ماجرا رو اینجا نوشتم
http://iwhy.ir/?p=1066
من یه مال باختم و حتی به اینماد هم شکایت کردم چند ماهه هنوز جوابم ندادن، بیایید باهم جلوی ناعدالتی رو بگیریمشاید برای ماهم اتفاق بیافته
ممنون از وبگو
وقت بخیر من دو تا سوال داشتم
اول اینکه برای اضافه کردن 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 من آدرس سایت جایگذاری میکنم و درسته اما میخواستم به شیوه ای بنویسم که نیاز به آدرس سایت مشخص نباشد یعنی من روی هر هاست و با دامنه ای آپلود کردم جواب بدهد .
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 اصولا باید سبز رنگ باشه مثل سایت شما اما قفل طوسی رنگه و علامت مثلث زرد روی قفله . باید چیکار کنم به درستی کار کند مثل سایت شما؟
پاسخگویی به سوالات ممکن است تا ۲۴ ساعت زمان ببرد.
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.