ساخت سرور ssl / https در Node.js

ترجمه و تالیف : امیررضا سیستانه ای
تاریخ انتشار : 13 خرداد 98
خواندن در 1 دقیقه
دسته بندی ها : نود جی اس

گاهی اوقات ممکنه نیاز باشه تا در اپلیکیشن node خودتون سرور https بسازید, مثلا برای انواع مثل تست http/2 server push. در این مقاله یاد می گیریم چطور در Node.js یک سرور https بسازیم. یکبار با express و یکبار بدون express انجامش میدیم.

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

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

توسط http یا Hyper Text Transfer Protocol کامپیوترها (چه کلاینت چه سرور) بدون هیچ کدگزاری ارتباط برقرار می کنند. درصورتی که https یعنی Hyper Text Transfer Protocol Secure و با این پروتکل کلاینت و سرور پیام ها رو کدگزاری شده پاس می دهند. این باعث میشه هکرها نتونند به راحتی به اطلاعات کاربران دسترسی پیدا کنند.

درمورد SSL

اگر شما درمورد https بدونید, قطعا درمورد موضوع ssl هم شنیدید. SSL یا Sockets Layer یک تکنولوژی امنیتی استاندارد برای تخمین لینک کدگزاری شده بین سرور و کلاینت هست. بنابراین اساسا ssl کلیدی برای کدگزاری یا رمزگشایی اطلاعات داره.

جدا از کلیدها, ssl همچنین یک گواهی داره. این گواهی برای تایید هویت شما استفاده میشه. یک گواهی میتونه توسط  خودش یا یک (CA (Certificate Authority تایید بشه. هردو روش نقشی در کدگزاری ندارند. اگر شما یک گواهی که خودش امضا شده باشد, دارید, کدگزاری https بدون مشکل کار میکنه, اما وقتی امضای CA رو داشته باشه, سرور قابل اطمینان میشه. این اطمینان برای مرورگرها و سایر ابزارهای مجری اینترنت بوجود میاد. اگر توسط CA امضا شده باشه, مرورگرها و کاربران به سایت شما اطمینان می کنند. 

ساخت کلید و گواهی

برای دریافت یک گواهی امضا شده شما میتونید از وبسایت هایی مثل godaddy یا hostgator استفاده کنید. و برای تولید یک گواهی که خودش امضا شده باشد شما میتونید از راه زیر استفاده کنید.

OpenSSL یک ابزار کامند لاین هست که میتونه برای تولید کلیدهای ssl و گواهی ها بکار بیاد. در مک و لینوکس بصورت پیشفرض نصب شده ولی در ویندوز احتمالا باید بصورت دستی نصبش کنید.

بهرحال بافرض اینکه openssl در سیستم شما نصب هست. کد پایین یک کلید و گواهی تولید میکنه. بعد از اجرای دستور, از شما دو سوال می پرسه, فقط بهشون پاسخ بدید.

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

حالا که ما کلید خصوصی و گواهی رو داریم, وقتشه که ازشون در اپلیکیشن Node استفاده کنیم. فراموش نکنید شما میتونید کلید خصوصی و گواهی رو در هر قسمت از کامپیوتر تولید کنید. من این دوتا رو در مسیر اصلی قرار میدم.

ساخت یک سرور node https

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 برای ساخت سرور استفاده کنید و کلید خصوصی و گواهی رو بعنوان option پاس بدید. و کار تمامه, حالا شما میتونید توسط آدرس https://localhost:8000 به اپلیکیشن دسترسی داشته باشید. فراموش نکنید ازاونجایی که شما دارید از گواهی که خودش امضا شده استفاده میکنید و از CA بهره نمی برید, مرورگر تلاش میکنه ارتباط صورت نگیره اما شما میتونید به صفحه وب دسترسی پیدا کنید.

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

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");

منبع

دیدگاه‌ها و پرسش‌ها

برای ارسال نظر لازم است ابتدا وارد سایت شوید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید