/

創建一個帶有自簽名證書的 Express HTTPS 伺服器

創建一個帶有自簽名證書的 Express HTTPS 伺服器

如何為 Node.js 創建一個自簽名的 HTTPS 證書以在本地測試應用程式

要能夠從本地主機上提供 HTTPS 的網站,您需要創建一個自簽名證書。

自簽名證書足以建立一個安全的 HTTPS 連接,用於開發目的。儘管瀏覽器會報錯說該證書是自簽名的(並且因此不受信任)。

要創建證書,您必須在系統上安裝 OpenSSL

您可能已經安裝了它,只需在終端中嘗試鍵入 openssl 即可。

如果沒有,在 Mac 上,您可以使用 brew install openssl(如果您使用的是 Homebrew)。否則,請在 Google 上搜索“如何在 ”。

安裝了 OpenSSL 之後,運行以下命令:

1
openssl req -nodes -new -x509 -keyout server.key -out server.cert

您會被提示回答幾個問題。第一個是國家名稱:

1
2
3
4
5
6
7
8
9
10
11
12
Generating a 1024 bit RSA private key
...........++++++
.........++++++
writing new private key to 'server.key'
-----
You are about to be asked to enter information that will be incorporated into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:

然後是您的州或省份:

1
State or Province Name (full name) [Some-State]:

您的城市:

1
Locality Name (eg, city) []:

…以及您的組織名稱:

1
2
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:

您可以將這些都留空。

只需記住將其設置為 localhost

1
Common Name (e.g. server FQDN or YOUR name) []: localhost

…並添加您的電子郵件地址:

1
Email Address []:

完成!現在您在運行原始命令的文件夾中有兩個檔案:

  • server.cert 是自簽名證書檔案
  • server.key 是證書的私鑰

建立 HTTPS 連接時需要這兩個檔案,根據您將如何設定伺服器,使用它們的過程將有所不同。

這是一個使用 https 核心模組和 Express 的範例:

1
2
3
4
5
6
7
8
9
10
const https = require('https')
const app = express()

app.get('/', (req, res) => {
res.send('Hello HTTPS!')
})

https.createServer({}, app).listen(3000, () => {
console.log('Listening...')
})

如果不添加證書,如果我連接到 https://localhost:3000 ,瀏覽器將顯示以下內容:

without-cert

安裝了證書後:

1
2
3
4
5
6
7
8
9
10
const fs = require('fs')

//...

https.createServer({
key: fs.readFileSync('server.key'),
cert: fs.readFileSync('server.cert')
}, app).listen(3000, () => {
console.log('Listening...')
})

Chrome 將告訴我們該證書無效(因為它是自簽名的),並要求我們確認後才能繼續(但是,HTTPS 連接仍然有效):

with-cert

tags: [“Node.js”, “Express”, “HTTPS”, “self-signed certificate”, “OpenSSL”]