نشر HTTP الأصلي وضبط TLS والثقة
لبات 0.7.0 · الإصدار الحالي
نشر برامج 0.7.0 الأصلية مع شهادات TLS وثقة المضيف أو CA خاص وطلبات الطرف العلوي وفشل البدء.
محتويات الصفحة
اختيار المضيف الأصلي والمصادر
المضيف الأصلي فقط، لبات 0.7.0 المنشور. اتبع التثبيت الأصلي وتحقق من طباعة aspl --version للنص aspl 0.7.0. يلزم Linux x86-64 مع glibc 2.34 أو أحدث و/lib64/ld-linux-x86-64.so.2 وlibc.so.6 وlibm.so.6. تضم الأداة المثبتة تصريحات HTTP الموردة وقوالب أصلية مجهزة بتبعيات HTTP خاصة مرتبطة ساكنا. لا تحتاج حزمة خلفية HTTP منفصلة أو مكتبة OpenSSL وقت التشغيل أو مترجم C. OpenSSL وcurl أداتا مضيف للتمرين المحلي أدناه.
استخدم دليل HTTP للمعالجات والجلسات ومرجع الواجهة للتسميات المكافئة والتواقيع والحدود الدقيقة. يرفض المتصفح والتضمين الخاص استيراد HTTP قبل التنفيذ. يحتفظ تنزيل النشر الخام السابق (يفتح في نافذة جديدة) بنطاق إصداره السابق؛ تغطي هذه التعليمات 0.7.0.
أنشئ مجلد عمل اسمه http-work ومجلدي مصدر منفصلين ar وen. نزّل النسخ الموردة المطلوبة ووحداتها المطابقة من هذه العائلات ذات الهويات الثابتة:
| العائلة | الملفات والتجهيز |
|---|---|
| خدمة عادية وطلب إلى طرف علوي | خدمة.لبات, إعدادات.لبات, معالجات.لبات / service.aspl, settings.aspl, handlers.aspl; 8080 |
| خدمة TLS مباشر | اتصال-مشفر-مباشر.لبات, إعدادات.لبات, معالجات.لبات / direct-tls.aspl, settings.aspl, handlers.aspl; 8443, server.pem, server.key |
| عميل HTTPS بمرجع CA خاص | عميل-مشفر.لبات, طلبات.لبات / client-tls.aspl, requests.aspl; localhost:8443, server.pem |
| عميل HTTPS بالثقة الافتراضية | ثقة-افتراضية.لبات / default-trust.aspl; localhost:9443 |
تملك صفحات العائلات تنزيلات المصدر والوحدات الدقيقة والنتائج المتوقعة. لا أصول TLS مرفقة ولا أسطر إدخال. احتفظ بأسماء الملفات وبايتاتها الأصلية؛ تعديلات الإعدادات أدناه تخص نسخا منفصلة. نفّذ كل الأوامر أدناه من http-work، حتى الأوامر التي تسمي مصدرا تحت ar/ أو en/. تحل استيرادات المصدر بجانب الملف المستورد، وتحل مسارات TLS النسبية من مجلد عمل العملية.
ضبط الإعدادات قبل الشبكة
تعيد http::runtime_config() إعدادات التنفيذ الافتراضية. استدع http::configure قبل أول محاولة شبكة اجتازت التحقق. لخفض سعة الاتصالات الصادرة إلى 8، اخفض idle_client_connections أيضا إلى 8 أو أقل؛ قيمتها الافتراضية 16. تفحص عائلة الحدود الجمع غير الصالح وتصحيحه. راجع حقول التنفيذ وقواعد الضبط.
يحمل ClientOptions حدود الرسائل والمهل وأعلام التحويل وgzip واختيار الثقة لكل طلب. يحمل ServerConfig المستمعين وحدود الرسائل والمهل. تنسخ الخيارات وإعدادات الخدمة للعملية. لا تحجز الإعدادات الرقمية ذاكرة أو مقابس، وقد تمنع حدود Linux أو الذاكرة المتاحة القبول رغم صحة القيم.
تثبت محاولة الشبكة المجتازة للتحقق إعدادات التنفيذ حتى لو فشل الاتصال أو بدء TLS. تستهلك محاولة serve أو start المجتازة للتحقق فرصة الخدمة الوحيدة للتنفيذ. يعيد الضبط أو البدء اللاحق http.already_started؛ صحح مواد البدء وشغّل عملية جديدة. تترك أخطاء التحقق المحض الإعدادات وفرصة الخدمة متاحتين. المنفذ 0 غير صالح. مستمع IPv6 خاص بـIPv6؛ استخدم مستمعين منفصلين لـIPv4 وIPv6 عند طلب الاثنين صراحة.
اختيار ثقة CA
يحمل ClientOptions الافتراضي use_private_ca=false ومسارا فارغا في ca_file. عند أول استخدام HTTPS وقبل الاتصال يختار 0.7.0 أول مسار موجود بهذا الترتيب:
/etc/ssl/certs/ca-certificates.crt/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem/etc/ssl/cert.pem/etc/pki/tls/certs/ca-bundle.crt/etc/ssl/certs/ca-bundle.crt
يعيد المخزن المختار الموجود غير المقروء أو الفارغ أو المشوه أو المتجاوز للحجم http.ca_load_failed. لا يجرب حزمة لاحقة. تفشل أيضا أخطاء الاكتشاف غير غياب المسار. لا يغير SSL_CERT_FILE ولا SSL_CERT_DIR هذا البحث. جهّز حزمة PEM صالحة بأدوات إدارة CA للمضيف؛ تعيين متغير بيئة ليس إصلاحا.
عند غياب الحزم الخمس كلها يفحص العقد الأصلي /etc/ssl/certs/ بترتيب أسماء البايتات، ويتبع الروابط إلى الملفات العادية ويزيل تكرار أزواج الجهاز وinode. يتجاهل العناصر غير العادية. يتحقق تجهيز 0.7.0 المعزول من حالة المجلد وحده؛ يبقى المخزن المجلدي الفارغ أو غير المقروء أو المشوه سببا لـhttp.ca_load_failed. لا تفترض صلاحية أي مجلد شهادات عشوائي للمضيف. يسرد مرجع TLS حدود الفحص والمواد.
لاختيار CA خاص بصيغة PEM، عيّن use_private_ca=true وca_file إلى مساره المقروء. يحل محل الثقة الافتراضية؛ لا يضيف مخزن المضيف ولا يعطل التحقق. يتطلب العلم false مسارا فارغا ويتطلب true مسارا غير فارغ. يمكن أن يعمل CA الخاص حتى مع مخزن افتراضي غير صالح. تثبت الثقة المحللة بنجاح لذلك التنفيذ. أعد التشغيل بعد تغيير ملفات CA.
يتحقق عملاء TLS 1.2 و1.3 من السلسلة والتواريخ وهوية DNS أو IP في SAN. لا يكفي Common Name وحده. يغطي wildcard في DNS تسمية واحدة يسارية؛ يتطلب URL بعنوان IP قيمة IP SAN مطابقة. يعطي CA صالح غير متعلق أو SAN خاطئ http.tls_verify_failed، وهو مختلف عن فشل تحميل CA. لا تؤثر هذه الفحوص في check وbuild دون شبكة أو HTTP العادي.
تجهيز TLS المباشر وتشغيله محليا
لهذا التمرين عبر loopback، أنشئ شهادة RSA ذاتية التوقيع لمدة يومين ومفتاحا مطابقا غير مشفر. الشهادة أيضا مرجع الثقة المختار صراحة. أنشئهما في http-work:
openssl req -x509 -newkey rsa:2048 -nodes -days 2 \
-subj /CN=localhost \
-addext 'basicConstraints=critical,CA:TRUE' \
-addext 'subjectAltName=DNS:localhost,IP:127.0.0.1' \
-keyout server.key -out server.pem
chmod 600 server.key
aspl check ar/اتصال-مشفر-مباشر.لبات
aspl build -o tls-service ar/اتصال-مشفر-مباشر.لبات
./tls-serviceللمصدر الإنجليزي استبدل ar/اتصال-مشفر-مباشر.لبات بـen/اتصال-مشفر-مباشر.لبات. وفّر المنفذ 8443. تبقى العملية في المقدمة دون خرج. في نافذة ثانية من مجلد العمل نفسه:
aspl check ar/عميل-مشفر.لبات
aspl run ar/عميل-مشفر.لبات
curl --silent --show-error --http1.1 --cacert server.pem \
--request POST https://localhost:8443/stopللمصدر الإنجليزي استخدم en/عميل-مشفر.لبات. يطبع العميل checked text, JSON, 00 FF 41, and 404 دون سطر جديد ويعيد 0. للطلب POST الموثق متن فارغ ويصرّف الخدمة التي تعيد 0. رد HTTP 404 بيانات استجابة ناجحة وليس فشل نقل.
للنشر وفّر سلسلة شهادة التطبيق بصيغة PEM ومفتاحها المطابق غير المشفر مع إمكانية قراءتهما لحساب الخدمة. يحمل كل مستمع سلسلة ومفتاحا واحدين عند البدء، ويفحص تطابقهما ولا يعيد تحميل الملفات المجددة. أعد التشغيل بمواد جديدة. تبقى عائلات المفاتيح المدعومة والحدود الدقيقة في مدخلات TLS. اختيار شهادة الخادم بحسب SNI والمصادقة بشهادة عميل مستبعدان.
التحقق من طلب المعالج إلى الطرف العلوي
انسخ جذر TLS المباشر المختار ووحداته المطابقة إلى upstream/. غيّر فقط منفذ TLS في إعدادات.لبات لهذه النسخة من 8443 إلى 9443. الحقل العربي منفذ والإنجليزي port. اترك الملفات المنزلة الأصلية كما هي. من http-work شغّل الطرف العلوي في نافذة مستقلة:
aspl check upstream/اتصال-مشفر-مباشر.لبات
aspl build -o upstream-service upstream/اتصال-مشفر-مباشر.لبات
./upstream-serviceشغّل الخدمة العادية دون تعديل في نافذة أخرى:
aspl check ar/خدمة.لبات
aspl build -o plain-service ar/خدمة.لبات
./plain-serviceللمصدر الإنجليزي استخدم en/service.aspl. تجد الخدمتان server.pem وserver.key في http-work. من نافذة ثالثة:
curl --silent --show-error --http1.1 http://127.0.0.1:8080/upstreamالاستجابة 200 مع مرحبا من ASPL. تثبت تطبيق::إعدادات المنسوخة للخدمة العادية URL الطرف العلوي https://localhost:9443/hello وCA الخاص server.pem. يقرأ معالجها هذه الإعدادات وينفذ طلبا ابنا مرتبطا بالسياق. للنشر مع نظير آخر عدّل إعدادات الجذر في نسخة ثم افحصها وأعد بناءها. شهادات خدمة HTTPS وثقة CA الصادرة مدخلان مستقلان.
مع بقاء الطلب الأب حيا، ينتج CA مفقود أو مشوه 502 مع http.ca_load_failed، وينتج CA صالح غير متعلق 502 مع http.tls_verify_failed، وينتج النظير المتوقف 502 مع http.connect_failed. راقب كل حالة في عملية جديدة لأن الثقة المحملة ثابتة. قد تنتج مهلة الابن http.timeout. يلغي انتهاء مهلة الأب أو اكتشاف انقطاعه المعالج ويسقط النتائج المتأخرة والنشر. يمرر المثال الحالة وبايتات المتن فقط دون بيانات Content-Length أو Content-Encoding القديمة للطرف المقابل. لا إعادة محاولة تلقائية ولا تراجع عن آثار الطرف المقابل.
مع استمرار الطرف العلوي، ينجح aspl run ar/ثقة-افتراضية.لبات فقط إذا وثق المضيف شهادته. للشهادة المحلية غير الموثوقة يطبع http.tls_verify_failed ويعيد 1؛ تعطي ثقة المضيف الغائبة أو غير الصالحة بدلا من ذلك http.ca_load_failed. لا تثبّت شهادة التمرين في مخزن ثقة الجهاز لمجرد تشغيل مسار CA الخاص.
أوقف الخدمة العادية والطرف العلوي TLS بطلبات موثقة:
curl --silent --show-error --http1.1 --request POST http://127.0.0.1:8080/stop
curl --silent --show-error --http1.1 --cacert server.pem \
--request POST https://localhost:9443/stopوضع HTTP العادي خلف وكيل موجود
يمكن لوكيل عكسي موجود إنهاء TLS العام وتمرير HTTP/1.1 إلى الخدمة العادية على 127.0.0.1:8080. اضبط مستمعه العام وتجديد الشهادة وحدوده ومهله منفصلة. لـnginx يكون موضع التمرير:
location / {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header Connection "";
}ترى لبات اتصالا عاديا من الوكيل. ترويسات العنوان والمخطط الممررة بيانات تطبيق عادية ولا تغير IncomingRequest::tls أو التوجيه أو الصلاحية. حدد الوكيل الذي تثق به قبل استخدام هذه الترويسات لاتخاذ قرارات أمنية. نقطة /stop في المثال بلا مصادقة؛ احذفها أو قيّد الوصول إليها قبل كشف التطبيق. لا يجهّز هذا المقتطف وكيلا ولا يحول تمرين loopback إلى خدمة عامة.
نقل البرامج المولدة
ابن قبل النقل. يعمل aspl check وaspl build دون شبكة ولا يبدآن مستمعين أو يقرآن مواد CA أو يحملان مكتبات C المصرح بها للتطبيق أو يستدعيان أدوات C. يختار أي استيراد HTTP في شبكة الوحدات القالب الأصلي لـHTTP حتى لو لم يستخدم.
انسخ الملف التنفيذي المولد tls-service أو plain-service أو upstream-service إلى المضيف المستهدف. ابدأه من مجلد العمل المقصود مع ملفات TLS المطلوبة. يضم ELF شبكة الوحدات المفحوصة والآلة، فلا يحتاج لبات أو المصدر أو الوحدات المساعدة هناك. تبقى محمل ومكتبات النظام وملفات شهادة ومفتاح وCA التطبيق ومكتبات C المشتركة المصرح بها تبعيات خارجية. تقبل الملفات التنفيذية خيارات التشخيص واللون المحجوزة؛ لا تضبط وسائط تطبيق عشوائية هذه الأمثلة.
./tls-service --aspl-diagnostic-language=en --aspl-color=neverاختر حساب خدمة يستطيع قراءة المفتاح وربط العنوان والمنفذ المضبوطين. قيّد المفتاح، واستخدم مجلد عمل يحوي الملفات المقصودة، وأعد التشغيل بعد تجديد الشهادة أو تغيير الإعدادات. لا تحتاج منافذ مثال loopback إعداد منفذ ذي امتيازات. راجع متطلبات المضيف الأصلي وأوامر البرنامج المولد.
تشخيص البدء والإغلاق
| الملاحظة | الإجراء |
|---|---|
http.tls_config_failed قبل الاستماع |
افحص سلسلة PEM المقروءة والمفتاح المدعوم غير المشفر وتطابقه مع شهادة الطرف وحدود الحجم |
http.ca_load_failed قبل اتصال HTTPS |
أصلح حزمة المضيف المختارة أو CA الخاص الصريح؛ الحزم اللاحقة ليست بديلا لملف مختار سيئ |
http.tls_verify_failed |
صحح السلسلة والتواريخ وهوية SAN للرابط؛ لا يمكن تعطيل التحقق |
http.bind_failed أو http.listen_failed أو http.resolve_failed |
افحص العنوان والمنفذ الحر وأذونات المضيف وحل الاسم |
http.invalid_argument |
صحح المجالات أو المنفذ أو علم ومسار CA أو سعات الاتصال غير المتوافقة قبل الشبكة |
http.already_started |
ابدأ تنفيذا جديدا بعد فشل بدء اجتاز التحقق أو تغيير إعدادات ثابتة |
البدء كلي أو لا شيء. يحرر فشل مستمع لاحق المستمعين السابقين والتخصيصات قبل إعادة فشل قابل للاسترداد. تطبع جذور الخدمة الرمز المستقر دون سطر جديد وتعيد 1؛ استخدم مرجع الأخطاء الكامل للتمييز.
يطلب POST /stop التصريف والعودة العادية 0. يصرّف SIGINT أو Ctrl+C أو SIGTERM الأول وينهي بالحالة 7؛ تتجاوز الإشارة الثانية التصريف المتبقي. تبقى الفخاخ النهائية بالحالة 5 ولا تتحول تلقائيا إلى 500. قيمة الانتظار والإيقاظ 10 ms هدف استجابة وليست ضمان زمن حقيقي للمضيف. راجع الإغلاق والإلغاء.