如何為 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
,瀏覽器將顯示以下內容:
安裝了證書後:
const fs = require('fs')
//...
https.createServer({
key: fs.readFileSync('server.key'),
cert: fs.readFileSync('server.cert')
}, app).listen(3000, () => {
console.log('Listening...')
})
Chrome 將告訴我們該證書無效(因為它是自簽名的),並要求我們確認後才能繼續(但是,HTTPS 連接仍然有效):