راهنمای جامع TLS/SSL در Node.js

ماژول node:tls پیاده‌سازی پروتکل‌های TLS و SSL را در Node.js فراهم می‌کند. این ماژول بر پایهٔ OpenSSL ساخته شده و امکان ایجاد ارتباطات رمزنگاری‌شده، مدیریت گواهی‌ها، احراز هویت، امنیت پیشرفته، و ویژگی‌هایی مانند ALPN، SNI، PSK، Session Resumption و کنترل Cipher Suite را ارائه می‌دهد. این ماژول برای ساخت سرورهای HTTPS، سرویس‌های امن TCP، و هر نوع ارتباط رمزنگاری‌شده ضروری است.

TLS / SSLOpenSSLCertificates & Private KeysPerfect Forward SecrecyALPN / SNIPSK (Pre‑Shared Keys)Session Resumption

~3 دقیقه مطالعه · آخرین به‌روزرسانی ۹ دی ۱۴۰۴

1. معرفی ماژول TLS


ماژول node:tls امکان ایجاد ارتباطات رمزنگاری‌شده را فراهم می‌کند. این ماژول مشابه مرورگرها از TLS استفاده می‌کند اما پیاده‌سازی آن بر پایهٔ OpenSSL است.


2. بررسی پشتیبانی از crypto


اگر Node.js بدون پشتیبانی از node:crypto ساخته شده باشد، استفاده از node:tls باعث خطا می‌شود. در CommonJS می‌توان با try/catch آن را مدیریت کرد.


3. مفاهیم پایه TLS/SSL


  • TLS/SSL بر پایهٔ PKI کار می‌کند.
  • هر سرور باید یک کلید خصوصی داشته باشد.
  • گواهی‌ها (Certificates) از طریق CA یا به‌صورت Self-Signed تولید می‌شوند.
  • برای ساخت گواهی از OpenSSL استفاده می‌شود (کلید، CSR، گواهی، PFX).

4. Perfect Forward Secrecy


ویژگی‌ای که باعث می‌شود حتی با افشای کلید خصوصی سرور، ارتباطات قبلی قابل رمزگشایی نباشند.


  • ECDHE: فعال به‌صورت پیش‌فرض.
  • DHE: غیرفعال به‌صورت پیش‌فرض، قابل فعال‌سازی.
  • در TLS 1.3 همیشه فعال است.

5. ALPN و SNI


  • ALPN: انتخاب پروتکل (HTTP/1.1، HTTP/2) در TLS handshake.
  • SNI: امکان استفاده از چند گواهی برای چند دامنه روی یک سرور.

6. Pre-Shared Keys (PSK)


روش احراز هویت بدون گواهی، مبتنی بر کلید از پیش‌اشتراک‌گذاری‌شده.


  • غیرفعال به‌صورت پیش‌فرض.
  • نیازمند pskCallback در کلاینت و سرور.
  • برای محیط‌هایی مناسب است که کلید امن قابل توزیع باشد.

7. جلوگیری از حمله Renegotiation


Node.js تعداد renegotiation را محدود می‌کند تا از حملات DoS جلوگیری شود.


  • tls.CLIENT_RENEG_LIMIT: پیش‌فرض ۳ بار.
  • tls.CLIENT_RENEG_WINDOW: پیش‌فرض ۱۰ دقیقه.

8. Session Resumption


برای افزایش سرعت handshake، TLS می‌تواند از Sessionهای قبلی استفاده کند.


8.1 Session Identifiers


  • کلاینت و سرور Session ID ذخیره می‌کنند.
  • سرور باید رویدادهای newSession و resumeSession را مدیریت کند.

8.2 Session Tickets


  • سرور Session را رمز کرده و به کلاینت می‌دهد.
  • نیاز به ذخیره‌سازی سمت سرور ندارد.
  • در TLS 1.3 ممکن است چندین Ticket ارسال شود.

9. مدیریت Cipher Suite


Node.js مجموعه‌ای از Cipherهای امن را به‌صورت پیش‌فرض فعال دارد.


  • قابل مشاهده با: crypto.constants.defaultCoreCipherList
  • قابل تغییر با: --tls-cipher-list
  • یا تنظیم tls.DEFAULT_CIPHERS قبل از ایجاد سرور.

10. سطوح امنیتی OpenSSL


OpenSSL دارای سطوح امنیتی ۰ تا ۵ است. سطح پیش‌فرض ۲ است.


برای فعال‌سازی ویژگی‌های قدیمی (مثل TLSv1) باید سطح امنیتی را کاهش داد:


ciphers: 'DEFAULT@SECLEVEL=0'

11. خطاهای گواهی X509


در صورت بروز خطا در گواهی، OpenSSL کدهای خطا مانند موارد زیر ارائه می‌دهد:


  • UNABLE_TO_VERIFY_LEAF_SIGNATURE
  • CERT_HAS_EXPIRED
  • SELF_SIGNED_CERT_IN_CHAIN
  • HOSTNAME_MISMATCH

12. کلاس tls.Server


سرور TLS از net.Server ارث‌بری می‌کند و رویدادهای زیر را ارائه می‌دهد:


12.1 رویدادهای مهم


  • connection: قبل از handshake.
  • secureConnection: بعد از handshake.
  • newSession: ایجاد Session جدید.
  • resumeSession: تلاش برای بازیابی Session.
  • OCSPRequest: درخواست وضعیت گواهی.
  • keylog: ثبت کلیدهای TLS برای دیباگ.
  • tlsClientError: خطا قبل از handshake.

12.2 متدهای مهم


  • server.addContext(): افزودن گواهی برای SNI.
  • server.setSecureContext(): تغییر گواهی در زمان اجرا.
  • server.getTicketKeys(): دریافت کلیدهای Session Ticket.
  • server.listen(): شروع سرور.
  • server.close(): توقف سرور.

نتیجه‌گیری


ماژول node:tls یکی از مهم‌ترین بخش‌های امنیتی Node.js است. این ماژول امکان ایجاد ارتباطات رمزنگاری‌شده،

نوشته و پژوهش‌شده توسط دکتر شاهین صیامی

مقالات مرتبط

آشنایی کامل با ماژول Cluster در Node.js و نحوه افزایش مقیاس‌پذیری سرور

ماژول Cluster در Node.js به توسعه‌دهندگان اجازه می‌دهد چندین پردازش همزمان ایجاد کنند که یک پورت سرور را به اشتراک می‌گذارند. این کار باعث استفاده بهتر از هسته‌های CPU و افزایش توان پردازش برنامه می‌شود. در این مقاله نحوه کار Cluster، مدیریت Workerها، تنظیمات مهم و مثال عملی را بررسی می‌کنیم.

ادامه

راهنمای جامع ماژول VM در Node.js (ماژول node:vm)

ماژول node:vm امکان کامپایل و اجرای کد جاوااسکریپت در کانتکست‌های ایزولهٔ V8 را فراهم می‌کند. این کانتکست‌ها مانند یک «سندباکس سبک» داخل برنامهٔ Node.js عمل می‌کنند و هرکدام globalThis مخصوص خود را دارند. این ماژول برای اجرای پویا، موتورهای قالب (Template Engines)، سیستم‌های افزونه (Plugin Systems)، REPLها و تست ایزولهٔ منطق بسیار مناسب است. اما نکتهٔ بسیار مهم: vm یک ابزار امنیتی نیست و نباید برای اجرای کدهای غیرقابل‌اعتماد استفاده شود.

ادامه

راهنمای جامع ماژول V8 در Node.js (ماژول node:v8)

راهنمای جامع ماژول V8 در Node.js (ماژول node:v8)

ادامه

راهنمای جامع Worker Threads در Node.js (ماژول node:worker_threads)

ماژول node:worker_threads امکان اجرای واقعی چندریسمانی (Multithreading) را در Node.js فراهم می‌کند. برخلاف مدل تک‌ریسمانی سنتی Node.js، Worker Threads اجازه می‌دهند کارهای سنگین CPU در ریسه‌های جداگانه اجرا شوند بدون اینکه حلقهٔ رویداد (Event Loop) مسدود شود. این ماژول از حافظهٔ اشتراکی، انتقال بدون کپی (Zero‑Copy)، کانال‌های پیام، Worker Pool، محدودیت منابع و ابزارهای همگام‌سازی پیشرفته پشتیبانی می‌کند. Worker Threads برای پردازش‌های محاسباتی سنگین ایده‌آل هستند، در حالی که I/O همچنان باید توسط ریسهٔ اصلی مدیریت شود.

ادامه

راهنمای جامع ماژول util در Node.js

ماژول node:util مجموعه‌ای از توابع کمکی قدرتمند برای استفاده در هستهٔ Node.js و همچنین توسعهٔ برنامه‌ها ارائه می‌دهد. این ماژول ابزارهایی برای دیباگ، بازرسی اشیا، تبدیل Callback ↔ Promise، قالب‌بندی رشته‌ها، بررسی انواع، مدیریت خطاها، رمزگذاری متن، پردازش MIME، پارس آرگومان‌های CLI، سیگنال‌های Abort، و ابزارهای متفرقه فراهم می‌کند. این ماژول یکی از جعبه‌ابزارهای اصلی و ضروری برای توسعه‌دهندگان Node.js است.

ادامه

راهنمای جامع ماژول URL در Node.js

ماژول node:url ابزارهایی برای تحلیل، ساخت، و دست‌کاری URLها در Node.js فراهم می‌کند. Node.js دو API برای کار با URL دارد: WHATWG URL API — استاندارد مدرن و سازگار با مرورگرها (توصیه‌شده). Legacy API — API قدیمی Node.js (غیرتوصیه‌شده). WHATWG URL API یک رابط تمیز، سازگار و قدرتمند برای کار با اجزای URL، پارامترهای query، الگوهای URL و حتی Blob URLها ارائه می‌دهد.

ادامه