【问题标题】:Unable to verify the first certificate using Amazon SDK and Minio无法使用 Amazon SDK 和 Minio 验证第一个证书
【发布时间】:2019-07-11 23:55:15
【问题描述】:

尝试使用以下代码连接到 minio 服务器:

var AWS = require('aws-sdk');

var s3  = new AWS.S3({
          accessKeyId: 'minio' ,
          secretAccessKey: 'minio123' ,
          endpoint: 'https://minio.dev' ,
          s3ForcePathStyle: true, // needed with minio?
          signatureVersion: 'v4',
          sslEnabled: false,
          rejectUnauthorized: false
});

// putObject operation.

var params = {Bucket: 'documents', Key: 'testobject', Body: 'Hello from MinIO!!'};

s3.putObject(params, function(err, data) {
      if (err)
       console.log(err)
      else   
       console.log("Successfully uploaded data to documents/testobject");
});

// getObject operation.

var params = {Bucket: 'documents', Key: 'testobject'};

var file = require('fs').createWriteStream('/tmp/mykey');

s3.getObject(params).
on('httpData', function(chunk) { file.write(chunk); }).
on('httpDone', function() { file.end(); }).
send();

我收到以下错误:

{ Error: unable to verify the first certificate
    at TLSSocket.onConnectSecure (_tls_wrap.js:1051:34)
    at TLSSocket.emit (events.js:189:13)
    at TLSSocket.EventEmitter.emit (domain.js:441:20)
    at TLSSocket._finishInit (_tls_wrap.js:633:8)
  message: 'unable to verify the first certificate',
  code: 'NetworkingError',
  region: 'us-east-1',
  hostname: 'minio.dev',
  retryable: true,
  time: 2019-07-11T23:38:45.382Z }

我已经通过了选项“sslEnabled: false”,但这并没有改变任何东西。我还尝试在节点端禁用 SSL,但它也无法改变行为。

有人对如何忽略自签名证书错误有任何想法吗? (如果这是问题所在,我相信是的)

【问题讨论】:

  • 你解决了这个问题吗?
  • 不,我从来没有弄清楚这个问题。

标签: ssl-certificate aws-sdk minio


【解决方案1】:
const AWS = require('aws-sdk');
const https = require('https');

// Allow use with Minio
AWS.NodeHttpClient.sslAgent = new https.Agent({ rejectUnauthorized: process.env.NODE_TLS_REJECT_UNAUTHORIZED !== '0' });

// the rest of the code snippet remains unchanged

rejectUnauthorized: false 是关键。在此示例中,我将其与切换request 模块中的行为的常用环境变量的存在联系起来。 AWS SDK 没有将它用于其 API,但重复使用它似乎是合适的,因为它执行相同的功能。

现在,如果设置了NODE_TLS_REJECT_UNAUTHORIZED=0,包括 AWS 开发工具包在内的整个 Node 进程都将使用模拟的 HTTPS 端点。

警告:仅在开发环境中使用它,例如在本地工作站上模拟公共服务。它会让你容易受到中间人攻击!

【讨论】:

    猜你喜欢
    • 2021-10-20
    • 2021-01-02
    • 2020-02-17
    • 2021-03-26
    • 1970-01-01
    • 2018-08-29
    • 2020-03-29
    • 2021-06-15
    • 1970-01-01
    相关资源
    最近更新 更多