ماژول 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 می‌توان ارتباطات امن و پایدار ایجاد کرد.


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