ماژول HTTPS در Node.js: سرور امن و درخواست‌های رمزگذاری‌شده

ماژول node:https در Node.js پیاده‌سازی پروتکل HTTP روی TLS/SSL است. این ماژول امکان ایجاد سرورهای امن، مدیریت اتصال‌های رمزگذاری‌شده، و ارسال درخواست‌های HTTPS را فراهم می‌کند. توسعه‌دهندگان می‌توانند با استفاده از گواهی‌های TLS ارتباطات امن برقرار کنند، از قابلیت‌هایی مانند Agent برای مدیریت اتصال‌ها بهره ببرند، و درخواست‌های کلاینت را با امنیت بالا ارسال کنند.

https.Agent / https.globalAgenthttps.Server / https.createServerhttps.request / https.getTLS certificates / session resumptionkeylog event / certificate pinning

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

1. معرفی


HTTPS نسخهٔ امن پروتکل HTTP است که با استفاده از TLS/SSL ارتباطات رمزگذاری‌شده برقرار می‌کند. در Node.js این قابلیت به‌صورت ماژول جداگانه ارائه شده است.


2. کلاس https.Agent


  • مشابه http.Agent اما برای اتصال‌های TLS.
  • گزینه‌ها شامل maxCachedSessions برای مدیریت کش نشست‌های TLS و servername برای SNI.
  • رویداد keylog: تولید کلیدهای TLS برای اشکال‌زدایی و رمزگشایی ترافیک.

3. کلاس https.Server


  • از tls.Server ارث‌بری می‌کند.
  • متدهای مهم: close()، setTimeout()، closeAllConnections()، closeIdleConnections().
  • ویژگی‌ها: headersTimeout، requestTimeout، keepAliveTimeout.

4. ایجاد سرور HTTPS


const https = require('node:https');
const fs = require('node:fs');

const options = {
  key: fs.readFileSync('private-key.pem'),
  cert: fs.readFileSync('certificate.pem'),
};

https.createServer(options, (req, res) => {
  res.writeHead(200);
  res.end('hello world\\n');
}).listen(8000);

برای ایجاد گواهی آزمایشی می‌توان از دستور openssl استفاده کرد.


5. متد https.get()


  • مشابه http.get() اما برای درخواست‌های امن.
  • به‌طور پیش‌فرض متد GET را ارسال می‌کند و req.end() را خودکار فراخوانی می‌کند.

6. متد https.request()


  • امکان ارسال درخواست‌های امن با کنترل کامل.
  • گزینه‌ها شامل ca، cert، key، pfx، rejectUnauthorized.
  • می‌توان از Agent سفارشی یا بدون Agent برای مدیریت اتصال‌ها استفاده کرد.

7. Certificate Pinning


با استفاده از checkServerIdentity و هش‌های SHA256 می‌توان گواهی یا کلید عمومی سرور را پین کرد تا امنیت افزایش یابد.


8. مثال ساده درخواست HTTPS


const https = require('node:https');

https.get('https://encrypted.google.com/', (res) => {
  console.log('statusCode:', res.statusCode);
  console.log('headers:', res.headers);

  res.on('data', (d) => process.stdout.write(d));
}).on('error', (e) => {
  console.error(e);
});

نتیجه‌گیری


ماژول https در Node.js ابزارهای قدرتمندی برای ایجاد سرورهای امن و ارسال درخواست‌های رمزگذاری‌شده فراهم می‌کند. با استفاده از گواهی‌های TLS، مدیریت Agent و قابلیت‌هایی مانند certificate pinning می‌توان ارتباطات امن و پایدار ایجاد کرد.


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

مقالات مرتبط

آشنایی کامل با ماژول 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ها ارائه می‌دهد.

ادامه