2016-05-10 98 views
6

Ich war mit iojs und koa in meiner Anwendung und vor kurzem habe ich beschlossen, iojs zu nodejs v4.4.4 zu aktualisieren. Das Update war sehr reibungslos und meine Anwendung lief in kürzester Zeit. Das Problem ist, dass ich auf meiner Entwicklung Maschine ein selbst signierten SSL-Zertifikat verwenden, und nachdem ich aktualisierte NodeJS ich die folgende Meldung angezeigt, wenn ich versuche, die Website zugreifen:Self signed SSL funktioniert nicht nach dem Upgrade von iojs zu nodejs v4.4.4

This site can’t provide a secure connection

localhost uses an unsupported protocol.

ERR_SSL_VERSION_OR_CIPHER_MISMATCH

The client and server don't support a common SSL protocol version or cipher suite. This is likely to be caused when the server needs RC4, which is no longer considered secure.

ich nvm bin mit so habe ich versucht, Wechseln zu Iojs und die Website funktionierte wieder.

Nach einiger Lesung fand ich heraus, dass ich die openssl auf Version 1.0.2g anstelle der 1.0.1g, dass ich die .key und .crt Dateien zu erzeugen, zu aktualisieren. So aktualisiert ich openssl und erzeugt neue Schlüssel- und Zertifikatsdateien wie folgt aus:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt

Leider dies nicht das Problem beheben.

Dies ist der Code, den ich die https auf dem Server-Setup verwenden:

let sslOptions = { 
      key: fs.readFileSync('/etc/apache2/ssl/apache.key'), 
      cert: fs.readFileSync('/etc/apache2/ssl/apache.crt') 
       }; 

let server = require('https').createServer(sslOptions, app.callback()) 

Bin ich etwas falsch? Warum funktioniert es mit iojs und funktioniert nicht mit nodejs?

+0

die Fehlermeldung wird in den Browser angezeigt, oder? Welcher ? –

+0

Es wird in Chrome angezeigt, aber ich erhalte eine Fehlermeldung in Firefox. In Firefox ist es 'Fehlercode: SSL_ERROR_INAPPROPRIATE_FALLBACK_ALERT' –

+0

Wenn es nur für dev-Zweck ist, würde ich vorschlagen, eine Ausnahme hinzuzufügen. Siehe Kommentare hier http://gaboesquivel.com/blog/2014/nodejs-https-and-ssl-certificate-for-development/ für Chrome. Wenn es ein Nein ist, hast du darüber nachgedacht, ob wir verschlüsseln können? Oder noch brutaler [das] (https://github.com/coolaj86/node-ssl-root-cas/wiki/Painless-Self-Signed-Certificates-in-node.js) –

Antwort

0

Vielen Dank für die Antworten!

Wie ich vermutete, lag das Problem bei etwas, das nichts mit openssl zu tun hatte.

In meiner Anwendung habe ich eine config.js Datei mit der App-Konfiguration. Darin lese ich die Zertifikatsdateien und füge sie einem JavaScript-Objekt hinzu.

Das Problem war, dass ich das Modul lodash verwende, um 2 Javascript-Objekte (von denen eines die Zertifikatsdateien enthielt) zusammenzuführen.

Ich verwendete eine ältere Version des Moduls lodash und es scheint, dass es eine Buffer verwendet, um die Dateien zusammenzuführen. Die Buffer Implementierung in dieser Version stimmte nicht mit der Buffer Implementierung in der neuen Node.js Version überein. Dies führte zu einer falschen Zusammenführung der Zertifikatsdateien und führte zur Fehlermeldung ERR_SSL_VERSION_OR_CIPHER_MISMATCH.

Lange Geschichte kurz, nach der Aktualisierung der lodash-Modul auf die neueste Version, begann das Zertifikat wie vorgesehen zu arbeiten.

3

Es wird eine Truststore-Datei (Keystore) geben, in der alle vertrauenswürdigen Zertifikate registriert werden müssen. Sie müssen dieses neu erstellte Zertifikat dort registrieren. Der Client verwendet diese Truststore-Datei, um zu prüfen, ob ein Zertifikat vertrauenswürdig ist oder nicht.

Für weitere Informationen können Sie anhand von Link unten nehmen: -

Creating Self Signed Certificates (openssl & keytool)

Ich hoffe, es hilft.

+0

Dies funktioniert möglicherweise in Java, aber ich glaube nicht, dass es eine Möglichkeit gibt, Keystores in Node.js zu verwenden, um einen HTTPS-Server zu erstellen. Auch konnte ich die 'openssl.cfg' nicht finden (wie im Blogbeitrag beschrieben). Ich habe openssl als apt-get Paket installiert, vielleicht ist das das Problem. –

+0

Überspringen Sie diesen Link, um vertrauenswürdige CAs zum Knoten js .. hinzuzufügen. Http://stackoverflow.com/questions/21004645/where-is-nodes-certificate-store Dieser Beitrag war, Konzept klar zu machen. –

+0

ausführen folgenden Befehl in openssl home dir: - finden. -name "openssl.cfg" –

3

Gemessen an der Fehlermeldung gibt es nichts falsch mit dem selbst signierten Zertifikat. Aber der 'Server', der die SSL-Verbindung anbietet, unterstützt keine geeignete Kombination von Protokollversion und Verschlüsselungssuite.

openssl s_client -connect localhost:443 

oder ausführlichere

openssl s_client -connect localhost:443 -debug 

könnte Ihnen sagen, was während des SSL-Handshake falsch läuft.

Sie können auch herausfinden, welche Kombinationen mit einem Werkzeug sslscan

apt-get install sslscan 
sslscan localhost:443 
sslscan localhost:443 | grep Accepted 

Am Ende genannt vorgesehen sind Sie das ciphersuites Ihres https-Server bietet mehr SSLOptions Bereitstellung konfigurieren mögen.

Siehe hier https://certsimple.com/blog/a-plus-node-js-ssl

+1

Ich habe versucht, den 'openssl s_client' und ich bekomme die folgenden Meldungen' CONNECTED (00000003) '' 139962603136672: Fehler: 14077410: SSL-Routinen: SSL23_GET_SERVER_HELLO: sslv3 Alarm Handshake Fehler: s23_clnt.c: 769: '' no Peer-Zertifikat available' 'Keine Client-Zertifikat CA Namen sent'' Neu, (NONE), Cipher ist (NONE) Sichere Renegotiation Kompression nicht unterstützt wird: KEINE Expansion: NONE No ALPN ausgehandelt SSL-Session: Protokoll: TLSv1.2 Cipher: 0000 Key-Arg: Keine PSK Identität: Keine PSK Identität Hinweis: Keine SRP Benutzername: Keine Überprüfen Rückgabecode: 0 (ok) ' –

+0

Ich bin nicht sehr gut informiert in SSL, haben Sie einen Einblick, was das Problem ist? –

+0

Das Tool 'sslscan' hat keine 'Accepted'-Chiffren zurückgegeben –

0

Ich bin kein NodeJS Experte. Aber anscheinend müssen Sie RC4 auf Ihrem Knotenserver deaktivieren. Ich denke, das ist das Problem.

Verwandte Themen