Nodejs+Express創建HTTPS服務器


爲了使我的Nodejs服務器提供HTTPS服務,學習了一下如何利用express創建https服務器,現記錄如下。(一點一點的積累與掌握吧)


1. Http與Https

介紹

  • HTTP: 超文本傳輸協議 (Hypertext transfer protocol) 是一種詳細規定了瀏覽器和萬維網服務器之間互相通信的規則,通過因特網傳送萬維網文檔的數據傳送協議。
  • HTTPS:(Hypertext Transfer Protocol over Secure Socket Layer),是以安全爲目標的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。 它是一個URI scheme(抽象標識符體系),句法類同http:體系。用於安全的HTTP數據傳輸。https:URL表明它使用了HTTP,但HTTPS存在不同於HTTP的默認端口及一個加密/身份驗證層(在HTTP與TCP之間)。這個系統的最初研發由網景公司進行,提供了身份驗證與加密通訊方法,現在它被廣泛用於萬維網上安全敏感的通訊,例如交易支付方面。

區別

  • https協議需要到ca申請證書,一般免費證書很少,需要交費。
  • http是超文本傳輸協議,信息是明文傳輸,https 則是具有安全性的ssl加密傳輸協議。
  • http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,後者是443。
  • http的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。

2. 使用Express創建Https服務器

在Nodejs中,我們可以通過內置的https庫,來實現HTTPS服務器。

  • 首先,我們需要利用openssl生成證書文件:
#生成私鑰key文件
openssl genrsa 1024 > /path/to/private.pem
//
#通過私鑰文件生成CSR證書籤名
openssl req -new -key /path/to/private.pem -out csr.pem
//
#通過私鑰文件和CSR證書籤名生成證書文件
openssl x509 -req -days 365 -in csr.pem -signkey /path/to/private.pem -out /path/to/file.crt

新生成了三個文件:

  • private.pem: 私鑰
  • csr.pem: CSR證書籤名
  • file.crt: 證書文件
  • 修改Nodejs啓動文件server.js:
var app = require('express')();
var fs = require('fs');
var http = require('http');
var https = require('https');
var privateKey  = fs.readFileSync('/path/to/private.pem', 'utf8'),
var certificate = fs.readFileSync('/path/to/file.crt', 'utf8');
var credentials = {key: privateKey, cert: certificate};

var httpServer = http.createServer(app);
var httpsServer = https.createServer(credentials, app);
var PORT = 18080;
var SSLPORT = 18081;

httpServer.listen(PORT, function() {
    console.log('HTTP Server is running on: http://localhost:%s', PORT);
});
httpsServer.listen(SSLPORT, function() {
    console.log('HTTPS Server is running on: https://localhost:%s', SSLPORT);
});

// Welcome
app.get('/', function(req, res) {
    if(req.protocol === 'https') {
        res.status(200).send('Welcome to Safety Land!');
    }
    else {
        res.status(200).send('Welcome!');
    }
});
  • 啓動服務器:
    $ node server.js
    HTTP Server is running on: http://localhost:18080
    HTTPS Server is running on: https://localhost:18081
  • 打開瀏覽器

HTTP訪問:


HTTP訪問

HTTPS訪問:


HTTPS訪問

查看證書:


查看證書

由於我們證書是自己創建的,沒有經過第三方機構的驗證,所以會出現警告的提示。有條件的可以去godaddy SSL Cert官網申請,當然挺貴的,免費黨就選擇了WoSign,也是可以的,詳情見[https://weixin.frankfan.me]。


WoSign驗證證書


至此,我們成功的利用Nodejs內置https和express創建了HTTPS服務器。

參考:
http://blog.fens.me/nodejs-https-server/
http://heyrod.com/snippet/s/node-https-ssl.html

發佈了84 篇原創文章 · 獲贊 110 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章