2011-12-23 16 views
6

Otrzymałem certyfikat X509 (jeden plik .cer), mogę decode go, więc nie ma problemu. Teraz chcę podpisać wniosek z tego certyfikatu w węźle, ale nie mogę uzyskać to do pracy:Wniosek z certyfikatem 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); 
    }); 
}); 

To nie z

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)

robi to samo w C# działa prawidłowo:

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

Odpowiedz

2

kontynuacją tej sprawie:

Tylko .cer plik prawdopodobnie oznacza, że ​​klucz prywatny jest w certyfikacie (dobrze, że w przypadku lazurowego CERT), trzeba będzie przekształcić w pliku PEM (który rozpoczyna z ----BEGIN RSA PRIVATE KEY----), a następnie wykonać żądania z:

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

Uzyskanie klucza prywatnego z pliku może być nieco kłopotliwe, ale to działało w sprawie świadectw Azure, więc może pomóc każdemu z was:

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

(uwaga na argument pustego przejścia)

3

PEM_read_bio oczekuje certyfikatu w formacie PEM, podczas gdy posiadasz certyfikat w "surowym" formacie DER. Oczywiście musisz przekonwertować swój certyfikat na format PEM.

Pliki BTW .cer w formacie DER nie zawierają klucza prywatnego i nie można ich używać do podpisywania czegokolwiek.

Musisz ponownie sprawdzić, co faktycznie masz w pliku .cer iw jakim formacie.

Powiązane problemy