Express實現http和https服務


一、介紹Http與Https

概念

  • HTTP: 超文本傳輸協議(Hypertext transfer protocol) 是一種詳細規定了瀏覽器和萬維網服務器之間互相通信的規則,通過因特網傳送萬維網文檔的數據傳送協議。
  • HTTPS: 是以安全為目標的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協議安全。

二、 構建Https服務器

新建工程

$ cd /home
$ express -e ExpressServer
$ cd ExpressServer
$ sudo npm install

生成證書文件

# 創建一個文件夾存放證書
$ mkdir cert
$ cd cert

#生成私鑰key文件:
$ openssl genrsa -out privatekey.pem 1024

#通過私鑰生成CSR證書簽名
$ openssl req -new -key privatekey.pem -out certsign.csr

# 通過私鑰和證書簽名生成證書文件
$ openssl x509 -req -in certsign.csr -signkey privatekey.pem -out certificate.crt

生成了三個文件:

  • privatekey.pem (私鑰)
  • certsign.csr (CSR證書簽名)
  • certificate.crt (證書文件)

Express服務端代碼

var app = require('express')();
var fs = require('fs');
var http = require('http');
var https = require('https');

var httpServer = http.createServer(app);
var httpsServer = https.createServer({
    key: fs.readFileSync('./cert/privatekey.pem', 'utf8'), 
    cert: fs.readFileSync('./cert/certificate.crt', 'utf8')
}, app);

var PORT = 80;
var SSLPORT = 443;

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

// 訪問路徑
app.get('/:name', function(req, res) {
    if(req.protocol === 'https') {
        res.send('https:' + req.params.name);
    } else {
        res.send('http:' + req.params.name);
    }
});

啟動服務器

$ node app.js
HTTP Server is running on: http://localhost:80
https Server is running on: https://localhost:443

由於我們證書是自己創建的,沒有經過第三方機構的驗證,因此會出現警告的提示。可以去有資質的網絡運營商,去申請自己的證書。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM