2013-04-25 35 views
13

Ich habe Probleme, mein SSL-Server immer die Arbeit mit dem Zertifikat des von GoDaddyLauf SSL node.js Server mit GoDaddy gd_bundle.crt

Mit Express: 3.1.0

Darunter mit einem Schlüssel arbeitet/crt, die lokal erzeugt wurde/nicht von go Daddy unterzeichnet (Der Browser beschwert, aber wenn Sie Ausnahme hinzufügen funktioniert es.

var http = require('https');  
var privateKey = fs.readFileSync('/var/www/dev/ssl/server.key').toString(); 
    var certificate = fs.readFileSync('/var/www/dev/ssl/server.crt').toString(); 
    var credentials = {key: privateKey, cert: certificate}; 
    var https = http.createServer(credentials, app); 

Mit goDaddy ich bin vorgesehen eine zusätzliche Datei gd_bundle.crt whi ch Ich glaube, du so implementieren, aber ich einen Fehler

var http = require('https'); 
    var privateKey = fs.readFileSync('/var/www/prod/ssl/mysite.key').toString(); 
    var certificate = fs.readFileSync('/var/www/prod/ssl/mysite.com.crt').toString(); 
    var ca = fs.readFileSync('/var/www/prod/ssl/gd_bundle.crt').toString(); 
    var credentials = {key: privateKey, cert: certificate, ca: ca}; 
    var https = http.createServer(credentials, app); 

Mit dieser Konfiguration ich bin immer: Fehler 107 (net :: ERR_SSL_PROTOCOL_ERROR): SSL-Protokollfehler.

Ehrlich gesagt, ich erstelle sie nicht Keys/certs unser Devops Typ tut ... Ich bin mir nicht sicher, wie ich Fehler beheben kann, wenn ich die godaddy falsch implementiere oder wenn es einen Weg gibt, um den Schlüssel einzurichten/crt files korrekt ....

Sieht jemand offensichtlich eklatant falsch?

Antwort

21

Knoten erfordert, dass jedes Zertifikat in der CA-Kette separat in einem Array übergeben wird. gd_bundle.crt sieht wohl so aus:

-----BEGIN CERTIFICATE----- 
MIIE3jCCA... 
-----END CERTIFICATE----- 
-----BEGIN CERTIFICATE----- 
MIIEADCCA... 
-----END CERTIFICATE----- 

Jedes Zertifikat muss in einer eigenen Datei zu setzen (dh gd1.crt und gd2.crt) und separat zu lesen.

https.createServer({ 
    key: fs.readFileSync('mysite.key'), 
    certificate: fs.readFileSync('mysite.crt'), 
    ca: [fs.readFileSync('gd1.crt'), fs.readFileSync('gd2.crt')] 
}); 
+0

Ja in diesem gd_bundle.crt gibt es, was scheint, zwei CA zu sein Ich dachte, dass das komisch war .... also sagst du, dass ich es bearbeiten muss und sie in zwei Dateien stecke und sie in das Array lade. Ich werde es versuchen, danke! – nwkeeley

+0

Bestätigen, dass jeder 'BEGIN CERTIFICATE' ...' END CERTIFICATE'-Block in eine separate Datei geschrieben wurde, und dann ein Array wie hier gezeigt, funktionierte für mich. Gelöste Site, die auf dem Desktop gut zu sein schien, aber auf Android nicht vertraut wurde, indem sie eine verkettete "Apache-Bundle-Datei" von comodo verwendete. – doug65536

3

Vor kurzem hatte ich ein ähnliches Problem mit SSL-Zertifikate von GoDaddy auf einem unserer node.js Servern. In meinem Fall war das Problem, dass einer unserer Server das SSL mit den Curl-Funktionen von PHP validierte.

Es stellt sich heraus, dass ich wählen musste SHA-1 Signatur Algorithmus beim Einreichen der CSR zu Godaddy. Ich denke, es ist kompatibler mit älteren Systemen.

+0

Verwandte: Mozillas [Phasing Out-Zertifikate mit SHA-1 basierten Signaturalgorithmen] (http://blog.mozilla.org/security/2014/09/23/phasing-out-certificates-with-sha-1-based-signature -Algorithmen /), Google [Ein Update auf SHA-1-Zertifikate in Chrome] (http://security.googleblog.com/2015/12/an-update-on-sha-1-certificates-in.html), Microsoft [SHA-1 Deprecation Update] (http://security.googleblog.com/2015/12/an-update-on-sha-1-certificates-in.html) usw. – jww

9

Stellen Sie GoDaddy für das SSL-Zertifikat in SHA-1 Signatur und brechen die Bundle-Datei in zwei Dateien, auf diese Weise ...

von Ihrem gd_bundle.crt

-----BEGIN CERTIFICATE----- 
MIIE3jCCA8agAwIBAgICAwEwDQYJKoZIhvcNAQEFBQAwYzELMAkGA1UEBhMCVVMx 
RE4+uXR21aITVSzGh6O1mawGhId/dQb8vxRMDsxuxN89txJx9OjxUUAiKEngHUuH 
qDTMBqLdElrRhjZkAzVvb3du6/KFUJheqwNTrZEjYx8WnM25sgVjOuH0aBsXBTWV 
-----END CERTIFICATE----- 
-----BEGIN CERTIFICATE----- 
56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VILs9RaRegAhJhldX 
RQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/bvZ8 
-----END CERTIFICATE----- 

TO gd_bundle_01.crt

-----BEGIN CERTIFICATE----- 
MIIE3jCCA8agAwIBAgICAwEwDQYJKoZIhvcNAQEFBQAwYzELMAkGA1UEBhMCVVMx 
RE4+uXR21aITVSzGh6O1mawGhId/dQb8vxRMDsxuxN89txJx9OjxUUAiKEngHUuH 
qDTMBqLdElrRhjZkAzVvb3du6/KFUJheqwNTrZEjYx8WnM25sgVjOuH0aBsXBTWV 
-----END CERTIFICATE----- 

UND gd_bundle_02.crt

-----BEGIN CERTIFICATE----- 
56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VILs9RaRegAhJhldX 
RQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/bvZ8 
-----END CERTIFICATE----- 

dann auf dem Server tun dies

var fs = require('fs'), 
    https = require('https'); 

var ssl = { 
    key: fs.readFileSync('./ssl/server.key', 'utf8'), 
    cert: fs.readFileSync('./ssl/server.crt', 'utf8'), 
    ca: [fs.readFileSync('./ssl/bundle_01.crt', 'utf8'), 
     fs.readFileSync('./ssl/bundle_02.crt', 'utf8')] 
}; 

https.createServer(ssl, function(req, res) { 
    //... your code here ... 
}).listen(443); 
+0

ich habe zwei Dateien von GoDaddy erhalten. Einer ist kleiner und enthält nur ein Zertifikat. Eine andere heißt gd_bundle-g2-g1.crt. Ich verstehe, dass ich es brechen muss ... aber wo ist meine Schlüsseldatei? –

+0

müssen Sie die CSR-Schlüsseldatei in Ihrem Server generieren, überprüfen GoDaddy Hilfe für diese hier http://support.godaddy.com/help/article/5276/generating-a-certificate-signing-request-csr-tomcat- 4-x5-x6-x – fuelusumar

+0

können Sie diesen Befehl verwenden ... '$ openssl genrsa -des3 -out www.yourdomain-example.com.key 2048' – fuelusumar

1

Einfachere

Warum nur so spezifisch sein für GoDaddys CA Bündel, wenn Sie den gleichen Ansatz für unterschiedliche Umgebungen halten kann?Ich brauche zum Beispiel nur zwei Dateien für dev env, aber die Produktion verwendet GoDaddy-Zertifikate und hat viele, was zu tun?

Für GoDaddy, ich nehme ihr Bündel und fügen Sie es in eine einzige Datei und benennen Sie die Erweiterung als PEM sowie die Schlüsseldatei, die eine ziemlich Standard-Ansatz für alle Arten von Zertifikaten gibt.

Dann Sie am Ende für alle Umgebungen gerade dies zu tun:

server = https.createServer({   
    key: fs.readFileSync(config.sslKey), 
    cert: fs.readFileSync(config.sslCert), 
},app).listen(config.sslPort); 

In Ihrer GoDaddy cert.pem Datei legen Sie einfach Ihr Zertifikat und Ihre Bundle-Dateien von 1 bis x (von oben nach unten), und Ihnen‘ Re getan wie folgt:

-----BEGIN CERTIFICATE----- 
site certificate goes here 
-----END CERTIFICATE----- 
-----BEGIN CERTIFICATE----- 
CA 1 goes here 
-----END CERTIFICATE----- 
-----BEGIN CERTIFICATE----- 
CA 2 goes here 
-----END CERTIFICATE----- 
-----BEGIN CERTIFICATE----- 
CA X goes here 
-----END CERTIFICATE----- 

Nicht unbedingt besser, aber ich bevorzuge es. Ich habe in Express 3.x nicht gesehen, dass ich die CA-Array-Route machen musste, aber ich könnte mich für die spezifische Version irren.

Verwandte Themen