Apache2 Node Express 无法验证第一个证书

问题描述 投票:0回答:1

我想做的是使用 Node Express 和 Swagger 创建 api 端点。 我要部署项目的服务器是Ubuntu。

在服务器上设置节点项目后,安装 Apache2 并使用 SSL 证书和密钥设置 HTTPS,访问该站点效果良好。

但是,每当我尝试从本地向服务器发送 API 请求时,它都会返回一条错误,并显示“无法验证第一个证书”消息。

我拥有的证书和密钥文件是:

  1. CA_GLOBALSIGN_ROOT_CA.crt
  2. File_Wildcard.servername.com.crt
  3. ChainFile_ChainBundle.crt
  4. KeyFile_Wildcard.servername.com_crt.key
  5. complete_chain.crt(这是我结合(1)、(2)、(3)文件制作的。

.conf 文件:

<VirtualHost *:80>
    ServerName servername.com
    Redirect permanent / https://servername.com/
</VirtualHost>
<VirtualHost *:443>
    ServerName servername.com

    SSLEngine on
    SSLProxyEngine on
    SSLProxyVerify none
    SSLProxyCheckPeerCN off
    SSLProxyCheckPeerName off
    SSLProxyCheckPeerExpire off
    SSLCertificateKeyFile /etc/apache2/ssl/KeyFile_Wildcard.servername.com_crt.key
    SSLProxyCACertificateFile /etc/apache2/ssl/CA_GLOBALSIGN_ROOT_CA.crt
    SSLCertificateFile /etc/apache2/ssl/complete_chain.crt

    ProxyRequests Off
    ProxyPreserveHost On
    ProxyPass / https://servername.com:3005/
    ProxyPassReverse / https://servername.com:3005/
</VirtualHost>

node项目中的app.js文件:

const express = require('express');
const orderRoutes = require('./routes/orderRoutes');
const swaggerUi = require('swagger-ui-express');
const swaggerJSDoc = require('swagger-jsdoc');
const swaggerDef = require('./utils/swaggerDef');
const https = require('https');
const fs = require('fs');

const app = express();

app.use(express.json());

const options = {
  swaggerDefinition: swaggerDef,
  apis: ['./routes/*.js', './controllers/*.js'],
};

const swaggerSpec = swaggerJSDoc(options);

app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerSpec));
app.use('/api', orderRoutes);

const PORT = process.env.PORT || 3005;

const privateKey = fs.readFileSync('/etc/apache2/ssl/KeyFile_Wildcard.servername_crt.key');
const certificate = fs.readFileSync('/etc/apache2/ssl/complete_chain.crt');

const credentials = {
        key: privateKey,
        cert: certificate
}

const httpsServer = https.createServer(credentials, app);

httpsServer.listen(PORT, () => {
    console.log(`Server is running on port ${PORT}`);
});

module.exports = app;

我测试了 openssl s_client -connect servername.com:443,但它也返回无法验证第一个证书。

我也尝试过使用nginx,但结果是一样的。

有人可以帮我解决这个问题吗?

提前致谢!

node.js ssl https apache2 swagger-node-express
1个回答
0
投票

链中包含什么?要设置服务器(无需客户端身份验证),您需要链和密钥文件。

客户端期望的第一个证书是服务器的证书,后跟任何中间证书,然后可选地后跟根证书。毕竟,客户端应该已经在其信任存储中拥有根证书。

© www.soinside.com 2019 - 2024. All rights reserved.