TLS درون کانال کنترل حرکت میکند، نه در کل تونل
همتاها بستههای خودشان را مبادله میکنند و TLS درون مبادله کنترل اجرا میشود. پروکسیای که HTTPS را میفهمد هیچ تصوری از این ترافیک ندارد.
دیدن واژه TLS در توضیح یک VPN و نتیجهگیری از اینکه یک پروکسی وب این ترافیک را خواهد فهمید، میانبری رایج است. درون این پروتکل همتاها بستههای خودشان را مبادله میکنند و TLS بهعنوان بخشی از یک کانال در آن مبادله اجرا میشود. باری که برای کاربر اهمیت دارد در قالبی متفاوت از پیام حرکت میکند، و به همین دلیل این دو هرگز با یک نشست HTTPS معمولی جور درنمیآیند.
پاکت اول میآید
هر بسته تونل با سرآیند خود پروتکل آغاز میشود: نوع پیام، شناسه کلید و، روی انتقال جریان بایتی، پیشوند طولی که نشان میدهد بسته کجا پایان مییابد. خوانندهای که آن پاکت را تجزیه نکند نمیتواند بداند فیلد بعدی از کجا شروع میشود.
outer transport (UDP datagram or TCP stream)
-> OpenVPN header (opcode, key id, length where needed)
-> control message (reliability wrapper, TLS exchange)
-> data message (protected inner packet)
این طرح یک نقشه است نه جدول بایت، چون فیلدهای دقیق به نوع پیام بستگی دارند، هرچند اکتت اول همیشه کد عملیات و شناسه کلید را با هم بستهبندی میکند. حدسزدن نوع پیام از شماره پورت همان چیزی است که باعث میشود رمزگشاها در نهایت آنچه میبینند را اشتباه نامگذاری کنند. برای عیبیابی ترتیب اهمیت دارد: انتقال، سپس پاکت پروتکل، سپس یکی از دو نوع کار. پیش از آنکه درباره آنچه بعد میآید نظری بسازید، پاکت را بخوانید. رمزگشایی که از جای اشتباه شروع کند، مزخرفی مطمئن تولید میکند.
لایه اطمینان متعلق به پروتکل است
پیامهای کنترل به تحویل منظم و تأییدشده نیاز دارند و پروتکل خودش این را با تأییدها و ارسالهای مجدد فراهم میکند. یک تأیید ممکن است بهصورت پیام مستقل برسد یا همراه پیام کنترل دیگری سفر کند، که باعث میشود ردها برای هر کسی که انتظار یک مبادله تمیز دارد نامنظم به نظر برسند.
مزیت این است که دستدادن TLS حتی وقتی انتقال بیرونی UDP است، حاملی مطمئن میگیرد. هزینه این است که یک دیتاگرام ممکن است فقط بخشی از آن گفتوگو را در خود داشته باشد، پس برخورد با آن بهعنوان یک رکورد مستقل TLS مزخرف تولید میکند. بازآرایی باید در لایه پروتکل رخ دهد. به همین دلیل بسته ضبطشده بهندرت شبیه یک مرحله کامل دستدادن به نظر میرسد.
تغییر انتقال بیرونی به TCP این لایه را حذف نمیکند. انتقال مطمئن یعنی ارسال مجدد کمتر در سطح پروتکل، نه اینکه قالببندی ناپدید شود یا ترافیک به HTTP تبدیل شود.
بستههای داده از قالب دیگری استفاده میکنند
وقتی نشست وجود دارد، بار مفید بهصورت پیامهای داده حاوی بستههای IP داخلی یا فریمهای Ethernet میرسد. آنها با کلیدها و پردازش خودشان محافظت میشوند و به هیچ معنایی که کتابخانه TLS بپذیرد، رکورد کاربرد TLS نیستند.
این جدایی در پیکربندی دیده میشود: کانال کنترل و کانال داده تنظیمات رمز جداگانه دارند، پس خطی از لاگ که یکی را نام میبرد چیزی درباره دیگری نمیگوید. خواندن رمز کنترل قوی بهعنوان اثبات رمز داده قوی خطای رایجی در گزارشهاست.
یک باور غلط مرتبط را هم از توضیح بیرون نگه دارید. TLS یک کانال کلید عمومی نیست که کنار کانال داده متقارن بنشیند، چون TLS خودش پس از برقراری کلیدها رکوردهایش را بهصورت متقارن محافظت میکند. تمایز واقعی نقش و قالب بسته است، نه اینکه هر طرف از چه نوع رمزنگاری استفاده میکند.
چرا یک پروکسی HTTPS نمیتواند کمک کند
پروکسیای که TLS را پایان میدهد انتظار جریانی از رکوردهای TLS و سپس یک پروتکل کاربرد درون آن را دارد. کانال کنترل این پروتکل درون قالببندی خودش و با لایه اطمینانی پیرامون آن حمل میشود، پس پروکسی پایاندهنده آن قالببندی را ورودی خراب میخواند.
یک هدایتکننده شفاف که بایتها یا دیتاگرامها را بدون تفسیر عبور میدهد میتواند کار کند، به شرطی که جریان را بازنویسی یا بازآرایی نکند. پرسشی که درباره هر واسطه باید پرسید این است که آیا انتقال و قالببندی واقعی را عبور میدهد، نه اینکه جایی از TLS پشتیبانی میکند. پیش از صرف یک شب روی قواعد پروکسی این را بپرسید. بیشتر شکستها در اینجا معماریاند نه تنظیمی که جا افتاده باشد.
خواندن درست یک رد
انتظار داشته باشید اول یک مبادله کنترل بیاید، سپس تعداد بسیار بیشتری پیام داده، که هر دو یک انتقال را شریکاند. اگر مرحله کنترل کامل شود و مرحله داده متوقف شود، ایراد به کلیدها، مسیریابی یا فیلتر کردن مسیر داده مربوط است نه به دستدادن. چند پیام داده ضبط کنید و بررسی کنید آیا اصلاً از کلاینت خارج میشوند. همان یک مشاهده جستوجو را نصف میکند.
توصیفهای تاریخی روشهای کلید در مستندات پروتکل به این معنا نیست که یک انتشار مشخص هنوز هر قالب قدیمی را پشتیبانی میکند. پیش از ساختن انتظار بر پایه پاراگرافی که توضیح میدهد چیزها قبلاً چگونه کار میکردند، نسخهای را که اجرا میکنید بررسی کنید.