我收到了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();
答案 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
}
(注意空传递参数)