2011-12-23 15 views
6

He recibido un certificado X509 (un archivo .cer), puedo decode, así que no hay problemas en eso. Ahora quiero firmar una petición con este certificado en el nodo, pero no puedo conseguir que esto funcione:Solicitud con certificado 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); 
    }); 
}); 

Esta falla 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)

Hacer lo mismo en C# funciona bien:

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

Respuesta

2

Un seguimiento a este:

archivo Sólo .cer probablemente significa que la clave privada se encuentra en el certificado (bueno, eso es el caso con los certs Azure), tendrá que transformarse en un archivo PEM (que comienza con ----BEGIN RSA PRIVATE KEY----) y luego hacer una solicitud con:

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

conseguir la llave privada del archivo puede ser un poco complicado, pero esto funcionó en los certificados de Azure, lo que podría ayudar a cualquiera de ustedes:

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

(tenga en cuenta el argumento de pase vacío)

3

PEM_read_bio espera el certificado en formato PEM, mientras que usted tiene el certificado en formato DER "sin procesar". Obviamente, necesita convertir su certificado al formato PEM.

BTW Los archivos .cer en formato DER no contienen clave privada y no se pueden usar para firmar nada.

Necesita volver a verificar lo que realmente tiene en su archivo .cer y en qué formato.

Cuestiones relacionadas