2011-12-23 8 views
6

Ho ricevuto un certificato X509 (un file .cer), lo posso decode, quindi non ci sono problemi. Ora voglio firmare una richiesta con questo certificato nel nodo, ma non riesco a far funzionare tutto questo:Richiesta con certificato 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); 
    }); 
}); 

Questo viene a mancare con

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)

fare lo stesso in C# funziona bene:

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

risposta

2

un follow-up su questo:

file solo .cer probabilmente significa che la chiave privata è nel certificato (beh questo è il caso con i CERT Azure), si dovrà trasformare in un file PEM (che inizia con ----BEGIN RSA PRIVATE KEY----) e poi fare una richiesta con:

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

Ottenere la chiave privata dal file può essere un po 'complicato, ma questo ha lavorato sui certificati Azure, quindi potrebbe aiutare qualcuno di voi:

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

(notare l'argomento passaggio vuoto)

3

PEM_read_bio si aspetta il certificato in formato PEM, mentre si dispone di certificato in formato DER "raw". Ovviamente è necessario convertire il certificato in formato PEM.

I file BTW .cer in formato DER non contengono la chiave privata e non possono essere utilizzati per la firma di alcunché.

È necessario ricontrollare ciò che si ha effettivamente nel file .cer e in quale formato.