无法验证第一个证书 - Nodejs TLS

6

我正在使用node-module basic-ftp,尝试通过TLS/ SSL建立安全连接。服务器使用通配符CA签名证书作为主机名。 我找不到以下错误代码的答案。

Connected to 1.1.1.1:21
< 220 Welcome to ftp.foo.com  
> AUTH TLS 
< 234 Using authentication type TLS
{ Error: unable to verify the first certificate
   at TLSSocket.onConnectSecure (_tls_wrap.js:1051:34)
   at TLSSocket.emit (events.js:189:13)
   at TLSSocket._finishInit (_tls_wrap.js:633:8) code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE' 
}

以下是示例代码:

const ftp = require("basic-ftp");

async establishFtpsConnection() {
    const client = new ftp.Client();
    client.ftp.verbose = true;

    try {
        await client.access({
            host: "ftp.foo.com",
            user: "bar",
            password: "1234",
            port: 21,
            secure: true
        });

        const list = await client.list();
        console.log(list);
    } catch (err) {
        console.log(err);
    }

    client.close();
}

注意:我正在尝试使其在我的生产环境中正常工作,所以禁用或拒绝未授权的访问不是我选择的选项。

process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';

或者

rejectUnauthorized: false
1个回答

0

试试这个:

const ftp = require("basic-ftp");

async establishFtpsConnection() {
    const client = new ftp.Client();
    client.ftp.verbose = true;
    const tlsOptions = {
            cert: fs.readFileSync('fullchain.pem', 'ascii')
             // a PEM containing the SERVER and ALL INTERMEDIATES
           }


    try {
        await client.access({
            host: "ftp.foo.com",
            user: "bar",
            password: "1234",
            port: 21,
            secure: true,
           secureOptions:tlsOptions
        });

        const list = await client.list();
        console.log(list);
    } catch (err) {
        console.log(err);
    }

    client.close();
}

如果您仍然遇到错误,请尝试注入根SSL证书。
var sslRootCAs = require('ssl-root-cas/latest')
sslRootCAs.inject() 

点击此处阅读更多内容:https://dev59.com/EGIj5IYBdhLWcg3wmmNE - Sandeep Patel
似乎不起作用。我也尝试了手动包含中间证书,就像API中所解释的那样。 .addFile(__dirname + '/ssl/01-cheap-ssl-intermediary-a.pem') - M. Haenzi
在我的情况下,用户通过用户界面单独配置多个FTP连接。因此,逐个上传和提供每个证书并不是我想要的。我是否理解有误,应该以这种方式处理? - M. Haenzi
如果我没错的话,我们传递的是一个带有完整证书链的服务器证书。因此,同样的证书应该适用于所有用户,我认为这就是应该的。 - Sandeep Patel
“一个带有完整证书链的服务器证书”是什么意思?用户创建各种FTP连接,所以对于每个连接,我都必须手动添加一个带有其链证书的服务器证书吗? - M. Haenzi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接