1. 程式人生 > >使用openSSL構造一個支援https的nodejs伺服器

使用openSSL構造一個支援https的nodejs伺服器

首先通過下面的連結下載openSSL https://slproweb.com/products/Win32OpenSSL.html

下載完畢後,執行openssl進入互動式介面:

使用命令生成privatekey.pem 1024意思是1024位長度。

openssl genrsa -out privatekey.pem 1024

生成的privatekey.pem,開啟看一看長啥樣:

什麼是pem檔案?

.pem - Defined in RFCs 1421 through 1424, this is a container format that may include just the public certificate (such as with Apache installs, and CA certificate files /etc/ssl/certs), or may include an entire certificate chain including public key, private key, and root certificates. Confusingly, it may also encode a CSR (e.g. as used here) as the PKCS10 format can be translated into PEM. The name is from Privacy Enhanced Mail (PEM), a failed method for secure email but the container format it used lives on, and is a base64 translation of the x509 ASN.1 keys.

簡單的說,就是一個金鑰檔案。

第二步,基於第一步生成的金鑰檔案生成一個證書請求: openssl req -new -key privatekey.pem -out certrequest.csr

如果懶得維護證書明細,直接敲回車,會自動填入預設值:

最後基於第一步生成的金鑰和證書請求生成一個數字證書:當然頒發機構就是自己了,僅用於測試目的。 openssl x509 -req -in certrequest.csr -signkey privatekey.pem -out certificate.pem

至此我們有了privatekey.pem和Certificate.pem兩個證書了。

下面是我https伺服器的程式碼,很簡單,只有50幾行:

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

var httpOptions =  {
 key: fs.readFileSync("keys/privatekey.pem"),
 cert: fs.readFileSync("keys/certificate.pem")
}

var server = https.createServer(httpOptions, app);
var io = require('socket.io')(server);

console.log("https server listens on port 8080...");

server.listen(8080);

function print_env(){
  console.log(process.env);
}

app.get('/', function (req, res) {

  var response = "Hello World";
  res.send(response);
});

app.get('/env', function (req, res) {

  print_env();
  // res.sendFile(__dirname + '/index.html');
  var response = JSON.stringify(process.env);
  res.send(response);
});

app.get('/redis', function (req, res) {

  var redisClient = require("./redisClient");
  
  function callback(response){
    // var response = "ok";//JSON.stringify(process.env);
    res.send(response);
  }
  redisClient.test(callback);
});

io.on('connection', function (socket) {
  console.log("connect comming from client: " + socket.id);
  socket.emit('messages_jerry', { hello: 'world greeting from Server!' });
  socket.on('messages', function (data) {
    console.log("data received from Client:" + JSON.stringify(data,2,2));
  });
});

從程式碼裡不難理解這兩個pem檔案是如何用在https伺服器裡的。 最後在瀏覽器裡測試。因為是自己頒發的證書,沒有經過CA驗證,所以瀏覽器會顯示一個警告。

要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":

相關推薦

使用openSSL構造一個支援https的nodejs伺服器

首先通過下面的連結下載openSSL https://slproweb.com/products/Win32OpenSSL.htm

編譯器實踐五 之 構造一個支援加減乘除的棧式計算機

最近學習了一點簡單的Bison再加上抽象語法樹,於是做了一下MOOC的留下的作業,按照要求,改了和增加了幾處程式碼,感覺學到了很多東西。不過為了減少難度,突出側重點,我沒有去管理記憶體,記憶體洩露有點嚴重,程式碼僅供參考。 功能是輸入一行或者多行算術表示式,對錶達式建立抽

一個支援 cgi 的簡易 http 伺服器

1. boa 移植以及使用測試 1. 下載 boa-0.94.14rc21.tar.bz2 2. 編譯安裝 解壓:tar -xjf boa-0.94.14rc21.tar.bz2 配置:./configure –host=arm-lin

編譯原理-如何使用flex和yacc工具構造一個高級計算器

轉換 bin 們的 構造 roc ann 邏輯 計算 文件指針 Flex工具的使用方法 Lex 是一種生成掃描器的工具。 Lex是Unix環境下非常著名的工具,主要功能是生成一個掃描器(Scanner)的C源碼。 掃描器是一種識別文本中的詞匯模式的程序。 這些詞匯模式(或者

構造一個對象的時候,系統先構造父類對象,再構造子類對象

調用 sys arr tom 對象 tarray div ray new 當構造一個對象的時候,系統先構造父類對象,再構造子類對象。 構造一個對象的順序:(註意:構造父類對象的時候也是這幾步) ① 遞歸地構造父類對象; ② 順序地調用本類成員屬性賦初值語句; ③ 本類的構造

實現一個支援執行時併發修改配置生效的Configuration類

可配置性是一個好的應用程式的重要指標。我們常常需要實現類似能夠執行時修改配置的功能。最近在開發一箇中間層的服務程式,最終釋出的方式是把程式碼打成jar包交給呼叫方使用。這個中間層服務需要一些配置資訊,考慮了一下有幾個基本的需求: 1. 在ja包中提供一個service-defalut.prope

一個node.js伺服器應用

首先我們編寫js檔案如下 var http=require('http'); http.createServer(function(request,response){ //傳送HTTP頭部 //HTTP狀態值:300:OK //內容型別: text/plain response.wri

我發起了一個 支援 ServerFul 架構 的 .Net 開源專案 ServerFulManager

大家好,  我發起了一個 支援 ServerFul 架構 的 .Net 開源專案 ServerFulManager 。   ServerFulManager 的 目標 是 實現一個 支援 ServerFul 架構 的 管理工具 。   什麼是 ServerFul 架構呢

41. 構造一個觸發器audit_log

題目描述 構造一個觸發器audit_log,在向employees_test表中插入一條資料的時候,觸發插入相關的資料到audit中。 CREATE TABLE employees_test( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AG

python學習之網站的編寫(HTML,CSS,JS)(十七)----------示例,構造一個網頁的框架,上部標題,登入,logo,左側選單,右側內容,原始碼

結果: 顏色為了明顯,所以較為難看,可以根據自己的需要進行更改 原始碼: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title

python學習之網站的編寫(HTML,CSS,JS)(十六)----------示例,構造一個左側管理選單的功能,點選主選單才顯示下面的內容

結果: 程式碼: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>逆水行舟不進則退</title>

Tensorflow程式設計構造一個簡單的線性迴歸模型

模型 本次使用的是線性迴歸模型  y=Wx+b 其中 W 為權重, b 為偏置。  # -*- coding: utf-8 -*- import numpy as np import tensorflow as tf import matpl

支援 Appium 伺服器的客戶端程式庫列表

這些庫封裝了標準的 Selenium 客戶端,提供了所有 JSON Wire protocol 指定的常規 selenium 命令,額外新增操控移動裝置相關的命令,例如 多點觸控手勢 和 螢幕方向。 Appium 客戶端程式庫實現了 M

一個簡易git伺服器的搭建

檢視本機ssh公鑰,生成公鑰 檢視ssh公鑰方法: 1. 開啟git bash視窗 2. 進入.ssh目錄: cd ~/.ssh 3. 找到id_rsa.pub檔案: ls 4. 檢視公鑰:cat id_rsa.pub 或者 vim id_rsa.pub 何為公鑰: 1. 很多

簡易NIS——搭建一個客戶端/伺服器模式的網路認證環境

背景知識 NIS(Network Information Service網路資訊系統)是美國Sun公司開發的一套開源的網上身份認證系統。NIS基於RPC,是由一個伺服器、一個客戶端庫以及幾個管理工具組成。起初,NIS被稱作黃頁(Yellow Pages),或YP,現在仍然使用這個名稱來非正式地指

使用python的Flask實現一個RESTful API伺服器端 使用python的Flask實現一個RESTful API伺服器端[翻譯]

使用python的Flask實現一個RESTful API伺服器端[翻譯] 最近這些年,REST已經成為web services和APIs的標準架構,很多APP的架構基本上是使用RESTful的形式了。 本文將會使用python的Flask框架輕鬆實現一個RESTful的服務。 R

最簡單的dockerfile使用教程 - 建立一個支援SSL的Nginx映象

什麼是dockerfile?簡單的說就是一個文字格式的指令碼檔案,其內包含了一條條的指令(Instruction),每一條指令負責描述映象的當前層(Layer)如何構建。 下面通過一個具體的例子來學習dockerfile的寫法。 新建一個dbuild資料夾,建立一個自定義的Nginx首頁,邏

OpenSSL:製作一個證書主題為空的證書_七俠鎮莫尛貝_20181029

目的:使用OpenSSL製作一個證書主題為空的證書. 有什麼用:測試某些證書應用外掛(運行於瀏覽器的ActiveX控制元件或PC客戶端服務程式,具有列出證書,使用證書籤名,加解密等功能). 測試什麼:一般這些控制元件或服務在列出計算機裡的證書時,會解析證書的主題(即使用者).如果證書主

docker:一個支援django的dockerfile

其中,包括了主要的生產環境模組, 從alpine作起,映象不大。儲存用。 FROM alpine:3.7 COPY . /target-dir WORKDIR /target-dir RUN sed -i 's/dl-cdn.alpinelinux.org/mirror.tuna.tsin

內網搭建一個yum源伺服器(基於httpd)

環境 httpserver 192.168.182.143 客戶端使用者 192.168.182.144 1,首先我們安裝 httpd 用到epel源或者163的源或者阿里雲的源做好本地的 yum -y install httpd* httpd-devel 2,安裝完成測試 serv