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

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

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

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

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

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

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

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

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

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]:

然後是您的州或省份:

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

您的城市:

Locality Name (eg, city) []:

…以及您的組織名稱:

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

您可以將這些都留空。

只需記住將其設置為 localhost

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

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

Email Address []:

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

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

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

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

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

安裝了證書後:

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