0%

[Node.js] 使用 SSL/TLS 憑證

TLS/SSL

簡介

SSL

SSL 全名是 Secure Sockets Layer (安全通訊端層),是一種標準的技術,用來保持網路連線安全,防止敏感資料被竊取或傳輸的資料被修改。此技術可使用加密演算法來混淆傳輸的資料,防止資料被竊取。

TLS

TLS (Transport Layer Security, 傳輸層安全協議) 是 IETF 將 SSL 標準化,並將名稱改為 TLS.

HTTPS

HTTPS (Hyper Text Transfer Protocol Secure, 超文字傳輸安全協定) 是一種安全的網路傳輸協議,經由 HTTP 進行通訊,但利用 SSL/TLS 來加密封包,保障資料傳輸的安全性及完整性。

產生 SSL/TLS 憑證

產生憑證有以下方式:

申請免費 SSL 憑證

詳細步驟可以參考: [SSL] Nginx + Let’s encrypt SSL 憑證

自行簽署憑證

使用 triple DES 演算法加密,產生長度為 2048 bits 的 RSA key:

1
$ openssl genrsa -des3 -out server.enc.key 2048

產生 csr file:

1
$ openssl req -new -key server.enc.key -out server.csr

產生未加密的 key:

1
$ openssl rsa -in server.enc.key -out server.key

最後,自行簽屬憑證:

1
$ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

使用 SSL/TLS 憑證

整合到目前的 Express app, 取代原本的 HTTP server:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const fs = require('fs');
const https = require('https');
const express = require('express');

const app = express();
app.get('/', (req, res) => {
res.send('Hello World!');
});

// 新增憑證 options
const options = {
key : fs.readFileSync('./ssl/server.key'),
cert : fs.readFileSync('./ssl/server.crt')
};
https.createServer(options, app).listen(3000, () => {
console.log('Started!');
});

參考資料