为什么我的快递服务器只通过浏览器支持 HTTPS,而不支持通过其他 nodejs 脚本?



我创建了一个 ExpressJS 服务器,它为 get 请求提供了路由。

我正在使用自签名证书来允许 https 调用。当我通过主要浏览器(chrome,safari和Firefox(执行请求时,它可以完美运行。但是,当涉及到实际用例时,即通过另一个nodeJs脚本执行get请求,服务器无法传递请求,我收到以下错误消息:

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)

我的快速应用配置:

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脚本调用你的服务器,它将执行完整的TLS检查过程(如你所希望(。这将检查证书的有效性等。自签名证书不会通过此过程,就像它们不会在您的浏览器中一样。在浏览器中,您需要进行干预并明确说"无论如何都要继续",您还需要使用调用代码执行此操作。查看所选库的文档,了解如何执行此操作。

注意:请确保不要在生产中启用此选项。使用某种环境变量来配置它,或者托管您的第一个服务,并且根本不禁用 TLS 检查。

最新更新