【node.js】簡單!原生node使用https,配置SSL,這麼肝!

寫在前面:大家好K。首先爲你點進這篇有趣的文章點贊👍!文章在撰寫過程中難免有疏漏和錯誤,歡迎你在下方留言指出文章的不足之處;如果覺得這篇文章對你有用,也歡迎你點贊和留下你的評論。更多內容請點進👉我的博客K。👈閱覽。

本文重點從第二部分開始

1. 本文前提環境

  1. 要有個域名,SSL通常頒發給域名用的,但是IP也可以用,但是能申請的地方不多👉環度網信IP SSL申請(付費的!)

  2. 有服務器,本文示例用阿里雲的雲服務器

  3. 域名要解析到雲服務器

2. 獲取SSL證書

  1. 對於阿里雲,在搜索框搜索ssl,點擊進入ssl控制檯

搜索ssl

  1. 點擊購買證書

點擊購買證書

  1. 個人使用選擇個人版,這裏以個人版作案例

立即購買

  1. 之後關於證書的配置保持默認就行,然後等待發放ssl證書

  2. 點擊下載,下載nginx的證書(本文沒有安裝nginx環境,但也下載nginx的證書)

下載nginx證書

  1. 將下載到的證書(後綴爲.key.pem)文件,上傳到服務器任意一個目錄(記住這個目錄的路徑),如果需要文件類型轉換,只需使用OpenSSL命令
  • 將DER文件(.crt .cer .der)轉換爲PEM
openssl x509 -inform der -in 文件名.cer -out 文件名.pem
  • 將PEM文件轉換爲DER
openssl x509 -outform der -in 文件名.pem -out 文件名.der
  • 將PEM轉換爲CRT(.CRT文件)
openssl x509 -outform der -in 文件名.pem -out 文件名.crt

3. 加載SSL證書(重點)

我們可以看到https模塊(👉官方文檔)中,createServer()方法有一個[options]可選參數,這裏就放兩個證書文件

// options參數的數據類型是對象,所以先把文件讀出來放在對象裏
// 通過fs模塊的readFileSync()方法讀取內容
// 推薦使用絕對路徑,原因在下面
const options = {
  key: fs.readFileSync('路徑/文件名.key'),
  cert: fs.readFileSync('路徑/文件名.pem')
};

// 在用createServer()方法創建服務時,把上面讀出來的文件放進去
// 這裏回調函數沒寫,完整代碼在下下節
const server = https.createServer(options, 回調函數()=>{})

readFile()是異步的,也就是後面的代碼不會等待文件讀取完成,會跳過讀取文件直接執行,這就導致運行createServer()時,options參數值還沒準備好,所以不能用readFile()方法。

要使用同步的readFileSync()方法來讀取文件,它是從上到下執行的,不會跳過讀取文件這一步執行後面的代碼。

推薦使用絕對路徑,如果不使用絕對路徑,可能出現一些問題,詳細請見此文

學習更多異步的內容,請點擊閱讀此文

4. 啓動服務器

// 啓動服務
// 處理請求的代碼寫在回調函數中
server.on('request', (req, res) => {
	res.end('Hello world')
})

// https協議瀏覽器默認使用443端口
// 也可以設置其他端口號,那麼用瀏覽器訪問時需手動輸入端口號
server.listen(443, () => {
    console.log('Started!')
})

用啓動http服務的方式啓動https服務和設置監聽端口,這三步可以合成一步,請見下節。

5. 全部代碼

// 啓動https服務需要https包
// 讀取文件需要fs包
const https = require('https');
const fs = require('fs');

// 將兩個證書文件讀取放到options對象中
// 使用readFileSync()方法,順序地執行讀文件和啓動服務操作
const options = {
	key: fs.readFileSync('路徑/文件名.key'),
	cert: fs.readFileSync('路徑/文件名.pem')
};

// 創建服務器,啓動服務器,設置監聽端口號寫在一起
https.createServer(options, (req, res) => {
	res.end('hello world\n');
}).listen(443);

結果截圖

可以看到url前有個小鎖,表示用了https協議

url前有個小鎖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章