فك تشفير HTTPS (هجوم الرجل في المنتصف، MitM)
يستطيع Chute فك تشفير حركة HTTPS عبر MitM. يرجى الاطلاع على مقال Wikipedia للمزيد من المعلومات. على iPhone و Apple TV و Android هذه ميزة مرخّصة يفرضها المحرك: بلا ترخيص لا يُفكّ تشفير شيء مهما قال الإعداد. انظر الترخيص والتفعيل.
يمكن لمولد الشهادات مساعدتك في إنشاء شهادة CA جديدة للتنقيح وجعل الشهادة موثوقة من قبل النظام. إنه متاح في Chute Mac و Chute iOS Chute Editor. يتم إنشاء هذه الشهادة محلياً وتحفظ فقط في ملف إعداداتك وسلسلة مفاتيح النظام. يتم إنشاء مفتاح الشهادة الجديدة عشوائياً باستخدام OpenSSL. لا يوجد مولّد في Chute Android: استورد PKCS#12 موجوداً من MitM ← تهيئة CA (Configure CA) في المحرر، ويسلّم تثبيت CA (Install CA) شهادة CA التي فيه إلى مثبّت الشهادات في Android — راجع تثبيت شهادة CA والوثوق بها.
يمكنك أيضاً استخدام شهادة CA موجودة. قم بتصدير الشهادة إلى تنسيق PKCS#12 (.p12) مع عبارة مرور. يرجى ملاحظة أن عبارة المرور لا يمكن أن تكون فارغة؛ فـ Chute يرفض تحميل ملف PKCS#12 بلا عبارة مرور. استخدم الأمر "base64" للترميز إلى نص base64 وألحق هذه الإعدادات أدناه إلى ملف الإعدادات الخاص بك.
[MITM]
enable = true
ca-p12 = MIIJtQ.........
ca-passphrase = password
hostname = *google.com
يفك Chute تشفير حركة المرور فقط للمضيفين المعلن عنهم هنا، فاضبط المفتاح دائماً. وعلى كل المنصات، القسم [MITM] المفعّل الذي لا يعلن أي hostname لا يفك تشفير شيء، سواء غاب المفتاح كلياً أو لم تُعطَ سوى مدخلات hostname-disabled. وعبر بروكسي HTTP لا يُفك إلا تشفير HTTPS الذي يصل عبر CONNECT: أما طلب HTTP العادي فيُمرَّر كالمعتاد، حتى لو كان مضيفه مدرجاً في hostname.
أحرف البدل و ? مدعومة. لاحظ أن ? لا يعمل كحرف بدل إلا إذا احتوت القاعدة أيضاً على `؛ أما القاعدة التي تحتوي على?` فقط فتُقارن حرفياً.
- استخدم البادئة - لاستبعاد اسم مضيف. تُفحص المدخلات بالترتيب الذي كُتبت به، وأول مدخل يطابق هو الذي يحسم، لذا يجب أن يأتي الاستبعاد قبل المدخل الذي يقتطع منه:
hostname = -*.apple.com, *يترك apple.com دون فك تشفير، بينماhostname = *, -*.apple.comيفك تشفيره. - افتراضياً، فقط الطلبات إلى المنفذ 443 يتم فك تشفيرها.
- استخدم اللاحقة :port للسماح بمنافذ أخرى.
- استخدم اللاحقة :0 للسماح بجميع المنافذ.
مثال:
-*.apple.com: يستبعد جميع الطلبات المرسلة إلى *.apple.com على المنفذ 443.www.google.com: يسمح بـ MitM لـ www.google.com على المنفذ 443.www.google.com:8080: يسمح بـ MitM لـ www.google.com على المنفذ 8080.www.google.com:0: يسمح بـ MitM لـ www.google.com على جميع المنافذ.*: يسمح بـ MitM لجميع أسماء المضيفين على المنفذ 443. (غير موصى به)*:0: يسمح بـ MitM لجميع أسماء المضيفين على جميع المنافذ. (غير موصى به)
أربع كلمات مفتاحية تمثل فئات كاملة من الوجهات، وتقبل البادئة - واللاحقة :port كما يقبلهما الاسم: <ip-address> (أي اتصال إلى عنوان IP حرفي)، و<ipv4-address>، و<ipv6-address>، و<simple-hostname> (اسم بلا نقطة مثل intranet). فـ hostname = -<simple-hostname>, * يفك تشفير كل شيء عدا الأسماء ذات المقطع الواحد، وhostname = <ip-address> لا يفك إلا الاتصالات الموجهة إلى عنوان. ولا تسري كلمات العناوين المفتاحية إلا على طلب CONNECT إلى عنوان عبر بروكسي HTTP: فاتصال TUN لا يُفك تشفيره إلا باسم المضيف — الاسم الذي حلّه Chute له، أو اسم الخادم في مصافحة TLS الخاصة به حين يكون sniffing-enabled مفعّلاً — لذا لا يُفك تشفير الاتصال الموجه إلى عنوان مجرد بلا اسم خادم أبداً.
يمكن أن يتضمن مدخل اسم المضيف أيضاً نمط مسار بعد أول /. غير أن قرار فك التشفير يُتخذ عند فتح الاتصال — عند CONNECT، أو عند بدء جلسة TUN — قبل أن يُعرف أي مسار طلب، لذا يفك المدخل المقيّد بمسار تشفير الاتصال كاملاً عند تطابق المضيف، ولا يسري الاستثناء بصيغة -host/path إطلاقاً. فلا تعتمد عليه لإبقاء مضيف خارج فك التشفير.
example.com/api/*: يسمح بـ MitM لـ example.com على المنفذ 443؛ ولا يضيّق المسارُ نطاقه.
قد يكون الإعداد العام مثل:
hostname = -*.apple.com, -*.icloud.com, *
سيطبق Chute قواعد إعادة كتابة الرابط وإعادة كتابة الترويسات وإعادة كتابة المحتوى والاستجابة الوهمية ([Map Local]) بالإضافة إلى السكريبتات على جميع طلبات MitM — أي على كل طلب في اتصال مفكوك التشفير، لا على أوله فقط. واتصال HTTP/1.1 المفكوك تشفيره لا يحمل إلا تبادلاً واحداً: فبعد إرسال الاستجابة يغلق Chute الاتصال، فيرسل العميل طلبه التالي على اتصال جديد يُعالَج بالطريقة نفسها. أما الطلب المُرسَل بالتتابع خلف الأول على الاتصال نفسه فلا يُعالَج، ويعيد العميل إرساله على الاتصال الجديد. والاستثناء هو الاتصال الذي يفك Chute Android تشفيره من VPN، إذ يبقى مفتوحاً ويُعالَج كل طلب عليه بدوره. لكنه يُغلق بعد إجابة يصنعها Chute بنفسه — استجابة وهمية، أو إجابة إعادة كتابة الرابط، أو response سكريبت — وبعد استجابة جاء محتواها من سكريبت http-response عمل على الترويسات. وتحتفظ اتصالات HTTP/2 باتصالها، وكذلك ترقية WebSocket: فبعد استجابة 101 تمر البيانات في الاتجاهين دون تغيير.
يدعم MitM بروتوكول HTTP/2، عبر بروكسي HTTP وعبر TUN على السواء. فقبل مصافحة TLS مع الخادم يقرأ Chute البروتوكولات التي يعرضها العميل (ALPN): فإذا عرض العميل h2 ولم يضبط [MITM] القيمة h2 = false، يُعرض على الخادم h2 وhttp/1.1، وإلا فـ http/1.1 وحده. ثم يُعرض على العميل البروتوكول الذي اختاره الخادم، فيتحدث الطرفان دائماً البروتوكول نفسه؛ وإذا لم يكن العميل قد عرض ذلك البروتوكول، لا يرد Chute بأي ALPN وتستمر المصافحة. وفي HTTP/2 تُمرَّر المقطورات (trailers، مثل grpc-status في gRPC) والاستجابات المؤقتة 1xx مثل 103 Early Hints كما هي؛ ولا تراها القواعد ولا السكريبتات. أما مفتاح tcp-connection في قسم [MITM] الخاص بـ Surge فيُقبل في ملفات الإعدادات لكنه يُتجاهل.
بعض التطبيقات لديها سياسة أمان صارمة لاستخدام الشهادات المثبتة أو CA. قد يتسبب تفعيل فك التشفير لهذه المضيفين في مشاكل.
يحتفظ Chute بشهادات المضيف التي أصدرها في مخزن، ويستبعد الأقل استخداماً عندما يمتلئ: 512 شهادة على macOS و128 على iOS وtvOS وAndroid.
تثبيت شهادة CA والوثوق بها
إنشاء شهادة CA (أو استيرادها) ليس سوى نصف الإعداد — يجب أن يثق بها نظام التشغيل أيضاً. وإلى أن تكتمل الخطوتان، يفشل كل موقع مفكوك التشفير بتحذير شهادة. تعرض صفحة الشهادة في التطبيق الحالة الراهنة ("Trusted CA Certificate" / "Not Trusted CA Certificate").
Chute iOS — في محرر الإعدادات افتح MITM ← تهيئة CA (Configure CA):
- إنشاء شهادة CA جديدة (Generate A New CA Certificate) (أو استيراد شهادة P12 (Import P12 Certificate) لشهادة موجودة).
- اضغط تثبيت شهادة CA في النظام (Install CA Certificate to System). تُفتح صفحة Safari — اضغط تثبيت الشهادة (Install Certificate) واسمح بالتنزيل، ثم ثبّت ملف التعريف المنزَّل من الإعدادات ← عام ← VPN وإدارة الجهاز.
- الوثوق بها: الإعدادات ← عام ← حول ← إعدادات الثقة بالشهادات، وفعّل الثقة الكاملة لشهادة CA الخاصة بـ Chute. هذه الخطوة هي التي يفوّتها معظم الناس — بدونها تكون الشهادة مثبتة لكن غير موثوقة، ويستمر فك التشفير في الفشل.
Chute Mac — في نافذة الإعدادات افتح MitM:
- إنشاء شهادة جديدة (Generate New Certificate) (أو استيراد شهادة من ملف PKCS#12 (Import Certificate from PKCS#12 File)).
- انقر تثبيت الشهادة في النظام (Install the Certificate to System). يطلب macOS كلمة مرور مسؤول ويضيف الشهادة إلى سلسلة مفاتيح النظام كجذر موثوق — لا حاجة إلى خطوات يدوية في «الوصول إلى سلسلة المفاتيح» (Keychain Access).
- تصدير الشهادة (Export the Certificate) يحفظ نسخة
.pemلتثبيتها على أجهزة أخرى.
Chute Android — في محرر الإعدادات افتح MitM ← تهيئة CA (Configure CA):
- استيراد P12 (Import P12) يكتب ملف PKCS#12 موجوداً في
ca-p12بترميز base64، كما تفعل تطبيقات Apple، فينقل الإعداد شهادة CA التي فيه إلى الأجهزة الأخرى؛ أدخل عبارة المرور الخاصة به في عبارة مرور CA (CA Passphrase). لا يوجد مولّد في Chute Android. وما زال يُقرأca-p12الذي يسمّي ملفاً، كما كانت تكتبه الإصدارات السابقة من المحرر. - تثبيت CA (Install CA) يسلّم شهادة CA الموجودة في ملف P12 ذاك إلى مثبّت الشهادات في Android. وبدءاً من Android 11 لم يعد بإمكان التطبيق تثبيت شهادة CA بهذه الطريقة: ثبّتها بدلاً من ذلك من ملف شهادة في إعدادات الأمان في النظام — نسخة
.pemأو.crtمنها، مثل النسخة التي يحفظها تصدير الشهادة (Export the Certificate) في Chute Mac. - يحفظها Android ضمن شهادات المستخدم، والتطبيقات التي تستهدف Android 7.0 أو ما بعده لا تثق بتلك الشهادات إلا إذا اختارت ذلك. لذا يظل كثير من التطبيقات يفشل في المصافحة بعد تثبيت الشهادة — استبعد مضيفيها من
hostname.
إذا استمر تطبيق معيّن في الفشل رغم شهادة موثوقة، فالأرجح أنه يعتمد تثبيت الشهادات المسبق (certificate pinning) — استبعد مضيفيه من hostname بالبادئة - بدلاً من محاربته.
الخيارات
skip-server-cert-verify
skip-server-cert-verify = true
عدم التحقق من شهادة المضيف البعيد أثناء تنفيذ MitM. عند التفعيل، سيقبل Chute أي شهادة يقدمها الخادم الأعلى، بما في ذلك الشهادات الموقعة ذاتياً أو غير الصالحة. هذا مفيد لبيئات التطوير لكنه يقلل من الأمان.
[MITM]
enable = true
ca-p12 = MIIJtQ.........
ca-passphrase = password
skip-server-cert-verify = true
hostname = *google.com
ملاحظة أمنية: تفعيل
skip-server-cert-verifyيجعل اتصالات MitM عرضة لهجمات الرجل في المنتصف بين Chute والخادم الأعلى. قم بتفعيل هذا فقط للشبكات الموثوقة أو لأغراض التطوير.
hostname-disabled
hostname-disabled = *.bank.example, pay.example.com:8443
مضيفون لا يُفك تشفيرهم أبداً، حتى إذا شملهم مدخل في hostname. تعمل أحرف البدل كما في hostname، ويحصر :port المدخل في منفذ واحد. وهذا مفيد لإيقاف مضيفين أضافتهم وحدة دون تعديل الوحدة.
auto-quic-block
auto-quic-block = true
يحظر QUIC إلى كل مضيف سيُفك تشفيره، فيعود عملاء HTTP/3 إلى TLS عبر TCP حيث يستطيع MitM رؤية حركة المرور. وهو يعمل إضافةً إلى block-quic لا بديلاً عنه.
هذه الصفحة ترجمة للنسخة الإنجليزية. في حال وجود اختلاف، يُعتمد على النسخة الإنجليزية.
ملاحظة: التطبيق لا يدعم اللغة العربية حاليًا.