我收到了一个X509证书(一个.cer文件),我可以解码它,所以没有问题.现在我想在节点中使用此证书签署一个请求,但我无法使其工作:
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);
});
});
Run Code Online (Sandbox Code Playgroud)
这失败了
错误:错误:0906D06C:PEM例程:PEM_read_bio:
在Object._getConnection
上的Object.connect(tls.js:857:27)
处的Object.createCredentials(crypto.js:72:31)处没有起始行(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();
Run Code Online (Sandbox Code Playgroud)
对此的后续:
Only .cerfile 可能意味着私钥位于证书中(Azure 证书就是这种情况),您必须在文件中进行转换PEM(以 开头----BEGIN RSA PRIVATE KEY----),然后使用以下命令执行请求:
var key = fs.readFileSync("./key.pem");
var options = {
cert: key,
key: key
}
Run Code Online (Sandbox Code Playgroud)
从文件中获取私钥可能有点棘手,但这适用于 Azure 证书,因此它可能会对你们中的任何人有所帮助:
openssl pkcs12 -in ' + file + ' -nodes -passin pass:
Run Code Online (Sandbox Code Playgroud)
(注意空传递参数)
| 归档时间: |
|
| 查看次数: |
5377 次 |
| 最近记录: |