2011-12-23 10 views
6

Tôi đã nhận được chứng chỉ X509 (một tệp .cer), tôi có thể decode nó, vì vậy không có vấn đề gì về điều đó. Bây giờ tôi muốn đăng ký một yêu cầu có chứng chỉ này trong nút, nhưng tôi không thể có được điều này để làm việc:Yêu cầu với Chứng nhận X509

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); 
    }); 
}); 

này không thành công với

Error: error:0906D06C:PEM routines:PEM_read_bio:no start line
at Object.createCredentials (crypto.js:72:31)
at Object.connect (tls.js:857:27)
at Agent._getConnection (https.js:61:15)
at Agent._establishNewConnection (http.js:1183:21)

Làm tương tự trong C# hoạt động tốt:

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(); 

Trả lời

2

Một theo dõi về vấn đề này:

Chỉ .cer tập tin có thể có nghĩa rằng chìa khóa riêng là trong Giấy chứng nhận (cũng đó là trường hợp với Certs Azure), bạn sẽ phải biến hình thành một tập tin PEM (bắt đầu với ----BEGIN RSA PRIVATE KEY----) và sau đó làm một yêu cầu với:

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

Bắt khóa riêng từ tập tin có thể là một chút khó khăn, nhưng điều này làm việc trên giấy chứng nhận Azure, vì vậy nó có thể giúp bất kỳ của bạn:

openssl pkcs12 -in ' + file + ' -nodes -passin pass: 

(lưu ý đối số truyền trống)

3

PEM_read_bio mong muốn chứng chỉ có định dạng PEM, trong khi bạn có chứng chỉ ở định dạng DER "thô". Rõ ràng bạn cần chuyển đổi chứng chỉ sang định dạng PEM.

Tệp BTW. Ở định dạng DER không chứa khóa cá nhân và không thể sử dụng để ký bất kỳ thứ gì.

Bạn cần phải kiểm tra lại những gì bạn thực sự có trong tệp .cer của bạn và ở định dạng nào.