【发布时间】:2018-10-17 23:21:52
【问题描述】:
我创建了一个 ExpressJS 服务器,它为获取请求提供路由。
我正在使用自签名证书来允许 https 调用。当我通过主要浏览器(chrome、safari 和 firefox)执行请求时,它可以完美运行。 然而,当涉及到真正的使用案例,即通过另一个nodeJs-script 执行get-request 时,服务器无法通过请求,我收到此错误消息:
Error: unable to verify the first certificate
at TLSSocket.<anonymous> (_tls_wrap.js:1105:38)
at emitNone (events.js:106:13)
at TLSSocket.emit (events.js:208:7)
at TLSSocket._finishInit (_tls_wrap.js:639:8)
at TLSWrap.ssl.onhandshakedone (_tls_wrap.js:469:38)
我的 Express 应用配置:
app.use([
express.urlencoded({ extended: true }),
express.json(),
function (req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
res.header("Access-Control-Allow-Methods", "GET");
next();
},
]);
使用节点 https 包创建服务器:
const credentials = {
key: fs.readFileSync(credits.sslPrivateKey, "utf8"),
cert: fs.readFileSync(credits.sslCertificate, "utf8")
};
let httpsServer = https.createServer(credentials, app);
对应的包:
express: "^4.16.3",
node: v8.10.0,
npm: 5.8.0
【问题讨论】:
-
我是否正确理解您正在使用自签名证书,已明确接受此证书在浏览器中受信任(或添加适当的例外),但您的 nodejs 脚本没有这样做?如果您希望您的 nodejs 脚本以某种方式检查浏览器添加了哪些异常并使用这些异常,那么您的期望是错误的。
标签: node.js express ssl https get