申请X509证书

时间:2011-12-23 16:12:22

标签: node.js ssl x509

我收到了X509证书(一个.cer文件),我可以decode,所以没有问题。现在我想在节点中使用此证书签署一个请求,但我无法使其工作:

var https = require("https");
var fs = require("fs");

var options = {
    host: 'management.core.windows.net',
    path: '/my-subscription-id/services/hostedservices',
    port: 443,
    method: 'GET',
    cert: fs.readFileSync("./SSLDevCert.cer"),
    agent: false
};

var req = https.request(options, function(res) {
    console.log("statusCode: ", res.statusCode);
    console.log("headers: ", res.headers);

    res.on('data', function(d) {
        process.stdout.write(d);
    });
});

失败
  

错误:错误:0906D06C:PEM例程:PEM_read_bio:无起始线
      在Object.createCredentials(crypto.js:72:31)
      在Object.connect(tls.js:857:27)
      在Agent._getConnection(https.js:61:15)
      在Agent._establishNewConnection(http.js:1183:21)

在C#中做同样的事情很好:

var req = (HttpWebRequest)WebRequest.Create(string.Format("https://management.core.windows.net/{0}/services/hostedservices", "my-subscription-id"));
req.ClientCertificates.Add(new X509Certificate2(File.ReadAllBytes("./SSLDevCert.cer"));
var resp = req.GetResponse();

2 个答案:

答案 0 :(得分:3)

PEM_read_bio需要PEM格式的证书,而您拥有“原始”DER格式的证书。显然,您需要将证书转换为PEM格式。

DER格式的BTW .cer文件不包含私钥,不能用于签名任何内容。

您需要重新检查.cer文件中的实际内容以及格式。

答案 1 :(得分:2)

跟进此事:

只有.cer文件可能意味着私钥在证书中(与Azure证书一样),您必须转换PEM文件(以{{开头) 1}})然后用:

执行请求
----BEGIN RSA PRIVATE KEY----

从文件中获取私钥可能有点棘手,但这适用于Azure证书,因此它可能对您有所帮助:

var key = fs.readFileSync("./key.pem");
var options = {
    cert: key,
    key: key
}

(注意空传递参数)