ساخت سرور ssl / https در nodejs

گاهی وقت‌ها باید https را در برنامه node خودمان، برای یک سناریوی واقعی یا برای تست چیزهایی مثل http/2 سرور ایجاد کنیم. امروز ما به شما نشان می‌دهیم که چگونه https سرور را هم با express و هم بدون آن برای nodejs ایجاد کنید.

ساخت سرور ssl / https در nodejs

همچنین در مورد ssl و اهمیت آن صحبت خواهیم کرد.

صحبت کوتاهی در مورد https

با پروتکل http یا Hyper Text Transfer Protocol، دو کامپیوتر (کلاینت و سرور) بدون هیچ رمزنگاری ارتباط برقرار می‌کنند. اما پروتکل https که مخفف Hyper Text Transfer Protocol Secure است، پیام‌های رد و بدل شده بین کلاینت و سرور را رمزنگاری می‌کند. این عملکرد از سرقت اطلاعات کاربران توسط هکرها جلوگیری می‌کند.

صحبت کوتاهی در مورد ssl

اگر در مورد https می‌دانید، پس قطعا اصطلاح SSL را هم شنیده‌اید. SSL یا Secure Sockets Layer یک تکنولوژی امنیتی استاندارد برای ساخت یک لینک رمزنگاری شده بین سرور و کلاینت است. بنابراین اساسا ssl دارای کلیدی برای رمزنگاری و رمزگشایی اطلاعات می‌باشد.

علاوه بر کلید، ssl گواهینامه (certificate) هم دارد. این گواهینامه برای تأیید هویت شما استفاده می‌شود. یک گواهینامه می‌تواند خودش امضاءشده باشد یا توسط یک (CA (Certificate Authority امضاء شود.

هر دو نوع گواهینامه نقشی در رمزنگاری ندارند. اگر یک گواهینامه خود امضاشده دارید، پس رمزنگاری https کار خیلی خوبی خواهد بود. اما گواهی‌نامه‌های امضاشده توسط CA مطمئن هستند. این‌ نوع گواهینامه‌های هویتی برای مرورگرها و دیگر مصرف‌کنندگان اینترنت شناخته شده هستند. بنابراین، اگر از گواهی‌نامه‌های امضاشده توسط CA استفاده کنید، مرورگرها و کاربران به سایت شما بیشتر اعتماد خواهند کرد.

ایجاد کلید و گواهینامه

برای دریافت امضا توسط CA، می‌توانید از وب‌سایت‌هایی مانند godaddy، hostgator و غیره استفاده کنید. همچنین برای ایجاد گواهینامه خود امضا می‌توانید از روش‌های زیر استفاده کنید.

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

به هر حال فرض کنید که openssl را روی سیستم خود نصب دارید، در زیر دستوری برای تولید کلید و گواهینامه وجود دارد، پس از اجرای دستور، سوالاتی از شما پرسیده می‌شود، به آن‌ها جواب دهید.

openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt

حالا که کلید خصوصی و گواهینامه را داریم، زمان استفاده از آن‌ها در برنامه node مان است. به خاطر داشته باشید که کلید خصوصی و گواهینامه را می‌توانید در هر مکانی از کامپیوتر خود تولید کنید. ما این دو را در ریشه فولدر گذاشته‌ایم.

ایجاد https node server

var https = require('https');
var fs = require('fs');
 
var options = {
  key: fs.readFileSync('privateKey.key'),
  cert: fs.readFileSync('certificate.crt')
};
 
https.createServer(options, function (req, res) {
  res.writeHead(200);
  res.end("hello world!");
}).listen(8000);
 
console.log("listening to port 8000");

کاری که همه شما باید انجام دهید این است که برای ساخت سرور،  از ماژول https به جای http استفاده کنید، و کلید خصوصی (private key) و گواهینامه (certificate) را انتخاب کرده و ارسال کنید. حالا می‌توانید به https://localhost:8000/ دسترسی داشته باشید. به یاد داشته باشید که هما‌ن‌طور که از گواهینامه خود امضا به جای CA استفاده می‌کنید، مرورگر سعی می‌کند اتصال شما را رد کند. اما در هر صورت می‌توانید به صفحه وب بروید.

انجام این کار با expressJS

var https = require('https');
var fs = require('fs');
express = require('express'),
app = express();
 
var options = {
  key: fs.readFileSync('privateKey.key'),
  cert: fs.readFileSync('certificate.crt')
};
 
https.createServer(options, app).listen(8000);
 
app.get('/', function (req, res) {
  res.header('Content-type', 'text/html');
  return res.end('Hello World!');
});
 
console.log("listening to port 8000");