我想在Node.js中使用HTTP自簽名證書。不能在Node.js中使用IP作爲自簽名證書
我使用,我已經寫了下面的腳本生成的證書:
generate.sh
#!/bin/bash
read -p "FQDN: " FQDN
# for easy testing
rm ROOT.*
rm SERVER.*
openssl genrsa 4096 > ROOT.key
openssl req -x509 -nodes -sha256 -new -key ROOT.key -days 365 -subj "/C=AU/CN=example" > ROOT.crt
openssl req -newkey rsa:4096 -nodes -sha256 -keyout SERVER.key -subj "/C=AU/CN=${FQDN}" > SERVER.csr
openssl x509 -days 365 -req -in SERVER.csr -CA ROOT.crt -CAkey ROOT.key -CAcreateserial > SERVER.crt
而且我嘗試使用下面的測試證書:
test.js
let fs = require('fs')
let https = require('https')
// HTTP server
https.createServer({
key: fs.readFileSync('SERVER.key'),
cert: fs.readFileSync('SERVER.crt'),
ca: fs.readFileSync('ROOT.crt')
}, function (req, res) {
res.writeHead(200)
res.end('Hello world')
}).listen(4433)
// HTTP request
let req = https.request({
hostname: '127.0.0.1',
port: 4433,
path: '/',
method: 'GET',
ca: fs.readFileSync('ROOT.crt')
}, function (res) {
res.on('data', function (data) {
console.log(data.toString())
})
})
req.end()
然而,在測試:
> node test.js
Error: Hostname/IP doesn't match certificate's altnames: "IP: 127.0.0.1 is not in the cert's list: "
這似乎很奇怪,因爲如果我打印證書列表中的證書,則說明該IP是嗎?
如果我使用localhost
作爲FQDN和host
(在請求中),它確實有效。
我錯過了什麼?
編輯:
curl --cacert ROOT.crt https://127.0.0.1:4433
完成,沒有錯誤,那麼我在Node.js的代碼所缺少?
'Makefile:7:*** missing separator。 Stop' – MixerOID