~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 میتوان ارتباطات امن و پایدار ایجاد کرد.
نوشته و پژوهش شده توسط دکتر شاهین صیامی