使用基本身份验证的客户端SSL POST会出现DEPTH_ZERO_SELF_SIGNED_CERT错误

时间:2014-09-24 04:06:31

标签: node.js ssl https

我正在尝试针对具有自签名证书的Web服务器在HTTPS上执行method = POST。 我下载了服务器公共证书并将路径放在post选项中。 但我在第47行收到错误[错误:DEPTH_ZERO_SELF_SIGNED_CERT]。 对于具有自签名证书的Web服务器,HTTPS上的method = GET正常工作。 我做错了什么?

var https = require('https');
var querystring = require('querystring');
var fs = require('fs');


console.log("Starting...");

var certFile = "self_signed_cert.pem"

function ssl_post() {
  var username = "user";
  var password = "password";

  var post_data = '';
  var basic = 'Basic ' + new Buffer(username + ':' + password).toString('base64');
  // An object of options to indicate where to post to
  var post_options = {
      host: 'someservername',
      port: 443,
      path: '/add',
      method: 'POST',
      headers: {
          'accept': '*/*',
          'Content-Type': 'application/x-www-form-urlencoded',
          'Content-Length': post_data.length,
          'Authorization': basic,
          'ca': fs.readFileSync(certFile, 'utf8')
      }
  };
  // Set up the request
  var data = '';
  var post_req = https.request(post_options, function(res) {
      //res.setEncoding('utf8');
      res.on('data', function(res) {
            //res.setEncoding('utf8');
            res.on('data', function(chunk) {
              data += chunk;
            });
            res.on('end', function() {
              console.log(data);
            });
        });
  });
  post_req.on('error', function(e) {
    console.log(e);
  });
  // post the data
  post_req.write(post_data);
  post_req.end();
}


ssl_post();

console.log("Finished.");

1 个答案:

答案 0 :(得分:0)

您已将ca直接放入post_options,但放入headers部分。但是,ca不应该用作HTTP标头,因此请将其直接放入post_options