انجیناکس؛ شب ۱۴: سیاست TLS، HTTP/2 و HSTS
فهرست نوشته
HTTP/2 چند جریان درخواست را روی یک اتصال حمل میکند. امشب آن را با نحو سازگار نسخه فعال و سیاست TLS و HSTS را با امکان بازگشت تنظیم میکنیم.
این جلسه بخشی از دورهٔ انجیناکس در ۵۰ شب است. قرارداد آزمایشگاه، مسیرها و روال اعمال تغییر در راهنمای دوره آمده است.
محیط: HTTPS معتبر، curl دارای قابلیت HTTP2 و نسخهٔ Nginx ثبتشده؛ سیاست crypto توزیع بررسی شود.
نسخهٔ directive را انتخاب کن#
در HTTP_LAB برای پایهٔ مشترک TLS:
ssl_protocols TLSv1.2 TLSv1.3;
ssl_session_cache shared:LABTLS:10m;
ssl_session_timeout 10m;
Cipherها را بر اساس قابلیت OpenSSL، policy توزیع و مشتری واقعی انتخاب کن؛ کپی فهرست قدیمی جای تحلیل سازگاری نیست. این پیکربندی TLS 1.0/1.1 را مجاز نمیکند.
برای Nginx از 1.25.1 به بعد، داخل server HTTPS:
listen 443 ssl;
http2 on;
برای بستهٔ قدیمیتر، مانند پایهٔ Ubuntu 24.04:
listen 443 ssl http2;
این دو الگو جایگزین یکدیگرند. در الگوی قدیمی گزینههای listener مشترک 443 را در تمام serverها، از جمله default و سایتهای بعدی، هماهنگ کن تا هشدار protocol options نسازی. وجود HTTP/2 سمت کلاینت، نسخهٔ ارتباط backend را تعیین نمیکند.
HSTS مرحلهای#
در server HTTPS www:
add_header Strict-Transport-Security "max-age=300" always;
HSTS مرورگر را برای مراجعهٔ بعدی به HTTPS متعهد میکند. فعلاً includeSubDomains و preload نگذار. با curl و CA معتبر، --http2 -w '%{http_version}\n' باید نسخهٔ 2 و --http1.1 باید پاسخ سازگار بدهد. نسخهٔ TLS نامجاز را جدا آزمایش کن؛ شکست محلی cipher در کلاینت الزاماً رد شدن توسط سرور نیست.
بازگشت: Protocol و HTTP/2 را از backup برگردان. حذف هدر HSTS اثر ذخیرهشده در مرورگر را فوری پاک نمیکند؛ max-age=0 را روی HTTPS معتبر ارسال کن یا تا انقضا منتظر بمان.