使用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的原創文章,請關注公眾號"汪子熙":
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2643505/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用OpenSSL自建一個HTTPS服務HTTP
- QT支援https及編譯OpenSSLQTHTTP編譯
- [譯] 使用 NodeJS 建立一個 GraphQL 伺服器NodeJS伺服器
- .NetCore+OpenSSL實現HttpsNetCoreHTTP
- 使用nodeJS寫一個簡單的小爬蟲NodeJS爬蟲
- import,export的支援[nodejs]ImportExportNodeJS
- 又造了一個輪子—session庫!使用簡單!支援多儲存!Session
- NET Core Kestrel部署HTTPS 一個伺服器綁一個證書 一個伺服器綁多個證書HTTP伺服器
- Node.js: 一個剛剛夠用的 HTTPS 伺服器Node.jsHTTP伺服器
- 使用openssl在windows 10下本地xampp配置https開發環境WindowsHTTP開發環境
- 基於OpenSSL的HTTPS通訊C++實現HTTPC++
- 一個簡單的爬蟲 頭部構造爬蟲
- 本地化部署hoppscotch —— 使用docker compose一鍵部署 + https支援DockerHTTP
- 使用Netty構建一個帶註解的Http伺服器框架NettyHTTP伺服器框架
- [How HTTPS works Part 1 — Building Blocks] HTTPS 的工作方式第 1 部分-基本構造塊HTTPUIBloC
- centos下 openssl 生成區域網ip的https證書CentOSHTTP
- 轉一篇OpenSSL的例子:簡單的TLS伺服器TLS伺服器
- OpenSSL支援TLS1.3特性前瞻TLS
- 阿里雲伺服器部署 nodejs + mongodb + nginx 反向代理 + https配置 ssl證書阿里伺服器NodeJSMongoDBNginxHTTP
- 利用nodejs搭建 https 代理伺服器並實現中間人攻擊NodeJSHTTP伺服器
- 伺服器 升級OpenSSL伺服器
- openssl命令使用
- 一分鐘開啟Tomcat https支援TomcatHTTP
- nodejs:開發併釋出一個nodejs包NodeJS
- 一個故事看懂HTTPSHTTP
- 密碼學系列之:使用openssl檢測網站是否支援ocsp密碼學網站
- 在nodejs伺服器和ABAP伺服器上使用jsonpNodeJS伺服器JSON
- 自動的HTTPS伺服器:HTTPS-PORTALHTTP伺服器
- https--OpenSSL生成root CA及簽發證書HTTP
- 探索使用 Golang 和 Webassembly 構建一個多人遊戲伺服器GolangWeb遊戲伺服器
- 寫一個“特殊”的查詢構造器 – (二、第一條語句)
- nodeJS做一個簡單的爬蟲NodeJS爬蟲
- 利用angular4和nodejs-express構建一個簡單的網站(九)—使用者登入AngularNodeJSExpress網站
- Serverless部署應用並使用Cloudflare加速和支援HTTPSServerCloudHTTP
- 使用 RxJs 實現一個支援 infinite scroll 的 Angular ComponentJSAngular
- OpenSSL 1.1.1釋出 正式支援TLS1.3TLS
- 使用nodejs構建Docker image最佳實踐NodeJSDocker
- 使用letsencrypt給伺服器新增https證書伺服器HTTP