احراز هویت پایه روی HTTPS در برابر IPsec: هر کدام چه چیزی را محافظت میکند
یک درخواست را از مرورگر تا برنامه دنبال کنید: پرش TLS، پاسخ 401 و تونل روابط متفاوتی را محافظت میکنند و با شواهد متفاوت شکست میخورند.
ابزارهای توسعهدهنده را باز کنید، برنامه داخلی را بارگذاری کنید و ببینید یک درخواست پیش از رندر شدن صفحه از چهار ایست بازرسی میگذرد. ابتدا نام حل میشود، سپس یک اتصال TCP باز میشود، سپس دستدادن TLS مشخص میکند سرور کیست و تنها پس از آن برنامه میپرسد شما کی هستید. اینها را رویدادهای جداگانه بدانید، چون هر یک با شواهد متفاوت شکست میخورد و هر یک متعلق به تیم متفاوتی است. بیشتر سردرگمی در رخدادها از خواندن 401 بهعنوان مشکل تونل یا مشکل تونل بهعنوان رمز عبور بد میآید.
ایست بازرسی یک: آیا این همان سروری است که میخواستید با آن صحبت کنید
دستدادن TLS پیش از ارسال هرگونه اعتبارنامه به آن پرسش پاسخ میدهد. کلاینت شما زنجیره گواهی را در برابر یک مخزن اعتماد اعتبارسنجی میکند و بررسی میکند که نام داخل گواهی با میزبانی که تایپ کردهاید مطابقت دارد. اگر این شکست بخورد، مرورگر خطای گواهی نشان میدهد و اصلاً سرآیند Authorization را نمیفرستد. بنابراین درخواست رمز عبور شاهد اصیل بودن سرور نیست؛ شاهد آن است که برنامه پاسخ داده است.
اینجا نخستین مرز پیدا میشود. TLS اتصال را تا نقطه پایان آن محافظت میکند. اگر یک متعادلکننده بار TLS را پایان دهد و HTTP ساده را به برنامه بفرستد، بخش رمزنگاریشده در متعادلکننده تمام میشود و اعتبارنامهها فقط در همان پرش نخست محافظت میشوند.
ایست بازرسی دو: در تبادل 401 واقعاً چه چیزی سفر میکند
احراز هویت پایه HTTP شناسه کاربر و رمز عبور را در یک سرآیند میفرستد که با Base64 کدگذاری شده است، همانگونه که در RFC 7617 توصیف شده است. Authorization: Basic dXNlcjpwYXNz شکل آن است؛ هر کسی که بتواند درخواست را بخواند میتواند کدگذاری را برگرداند، پس تمام پنهانکاری از لایه انتقال زیرین میآید. curl -v هم چالش WWW-Authenticate: Basic و هم سرآیندی را که برمیگردانید نشان میدهد.
آن سرآیند به برنامه میگوید چه کسی میپرسد. به شبکه نمیگوید چه کسی اجازه اتصال دارد و خودش چیزی را رمزنگاری نمیکند. برنامه هنوز باید اعتبارنامه را با یک مخزن بررسی کند و تصمیم بگیرد آن حساب چه کاری میتواند بکند، که همان مجوزدهی است و پس از احراز هویت رخ میدهد.
تونل IPsec کجای این مسیر قرار میگیرد
اکنون از مرورگر به بیرون بروید. یک تونل IPsec دروازهبهدروازه ترافیک انتخابی میان دو دروازه امنیتی را محافظت میکند، نه میان لپتاپ شما و فرایند برنامه. ESP در حالت تونل بسته اصلی را میپیچد، دروازهها آن را رمزنگاری و احراز هویت میکنند و نشانیهای درونی زنده میمانند تا طرف دور بتواند درخواست را به برنامه مسیریابی کند.
انتخاب همان بخشی است که مردم را گیر میاندازد. تونلهای مبتنی بر سیاست از انتخابگرهای ترافیک استفاده میکنند که اغلب بهصورت فهرستهای کنترل دسترسی بیان میشوند تا تعیین کنند کدام بستهها وارد تونل میشوند. تونلهای مبتنی بر مسیر در عوض از یک واسط مجازی و جدول مسیریابی استفاده میکنند. در Linux دستور ip xfrm policy انتخابگرها را نشان میدهد و ip xfrm state انجمنهای امنیتی برقرارشده را؛ روی یک دستگاه دیوار آتش معادل آن جدول SA تونل بههمراه یک ردیاب بسته است.
پیامد ارزش گفتن صریح را دارد. یک بسته میتواند درون تونلی کاملاً سالم بنشیند و با این حال درخواست HTTPSای را حمل کند که برنامه رد میکند، و اعتبارنامههای معتبر میتوانند از مسیری بدون هیچ تونلی برسند اگر مسیریابی اجازه دهد.
شکست را در لایهای بخوانید که آن را گزارش کرده است
401 یعنی برنامه اعتبارنامه را نپذیرفت. 403 یعنی هویت را پذیرفت و عملیات را رد کرد. خطای TLS یعنی کلاینت سرور را نپذیرفت. نبود مسیر یا ناسازگاری سیاست یعنی بسته هرگز به دروازه دور نرسید. چهار شکست متفاوت، چهار مالک متفاوت، و هیچکدام با خیره شدن به فرم ورود تشخیص داده نمیشود.
از شواهدی که هر لایه تولید میکند استفاده کنید: پنل شبکه مرورگر برای وضعیت و سرآیندها، openssl s_client -connect host:443 برای زنجیره گواهی، شمارندهها و گزارشهای SA دروازه برای ترافیک تونل، و گزارش برنامه برای تصمیم حساب. وقتی دو لایه همزمان خطا گزارش میکنند، ابتدا لایه پایینتر را درست کنید، چون یک تونل مرده بهراحتی میتواند شکست احراز هویت را بپوشاند و برعکس.
یک سرویس را سرتاسر نگاشت کنید
پنج خط برای سرویسی که عیبیابی میکنید بنویسید: تونل کدام همتاها را به هم وصل میکند، انتخابگرها کدام زیرشبکهها و درگاهها را مجاز میکنند، TLS کجا پایان مییابد و گواهی کدام هویت را تأیید میکند، کدام حساب و نقش برنامه استفاده میشود، و هر لایه کجا گزارش میدهد. آنها را در یک صفحه نگه دارید، چون هدف نگاشت نشان دادن جایی است که مسئولیت یک لایه تمام میشود و لایه بعدی آغاز میشود.
سپس برای هر لایه یک مورد منفی آزمایش کنید. از رمز عبور اشتباه استفاده کنید و تأیید کنید که 401 میگیرید، نه وقفه زمانی. از زیرشبکهای بیرون از انتخابگرها وصل شوید و تأیید کنید که بسته از تونل عبور نمیکند. گواهیای برای نام اشتباه ارائه دهید و تأیید کنید که کلاینت پیش از فرستادن اعتبارنامه امتناع میکند. آن سه نتیجه بیش از هر نمودار جعبهای درباره طراحی به شما میگویند.
در پایان، آگاهانه تصمیم بگیرید هر رابطه به چه محافظتی نیاز دارد. احراز هویت پایه روی TLS گزینهای معقول برای ابزار درونی کوچکی پشت یک دروازه است؛ جایگزین مجوزدهی برای هر کاربر یا محافظت از ترافیک فراتر از نقطه پایانی TLS نیست. تونل مسیر را محافظت میکند، گواهی پرش را محافظت میکند و 401 حساب را محافظت میکند، و تنها آخری میداند شما کی هستید.