socket-io und http(s) basics...

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • socket-io und http(s) basics...

    Hallo Forum,

    da sich meine Server-Entwicklung langsam dem Ende neigt, bin ich gerade dabei die Grundstruktur etwas anzupassen, da es diverse Schwierigkeiten mit SSL gibt =(
    Nun hätte ich ein paar Fragen und hoffe ihr helft mir weiter.

    #1 den reinen socket-io Server kann ich sowohl ohne als auch mit dem http-Modul starten, warum und wieso? Und was bringt mir das http-Modul wenn socket-io auch ohne läuft?

    JavaScript-Quellcode

    1. // ohne http
    2. var app = require('socket.io')(settings.port);
    3. app.of(settings.lobby.nsp).on('connection', function(client){
    4. /* server... */
    5. });
    6. // mit http
    7. var http = require('http').createServer().listen(settings.port);
    8. var app = require('socket.io')(http);
    9. app.of(settings.lobby.nsp).on('connection', function(client){
    10. /* server... */
    11. });
    Alles anzeigen



    #2 Zum Thema SSL, hatte ich den Server 1 mal erfolgreich mit einem selbst signierten Zertifikat online, dann wollte ich es mit dem richtigen Zertifikat ausprobieren, was nicht klappte nun läuft der Server nicht mal mehr mit einem selbst signiertem Zertifikat, es kommt die Meldung:

    Quellcode

    1. _tls_common.js:88
    2. c.context.setCert(options.cert);
    3. ^
    4. Error: error:0906D06C:PEM routines:PEM_read_bio:no start line
    5. at Object.createSecureContext (_tls_common.js:88:17)
    6. at Server (_tls_wrap.js:803:25)
    7. at new Server (https.js:54:14)
    8. at Object.createServer (https.js:76:10)
    9. at Object.<anonymous> (/srv/mm/node_modules/socket.io/lib/app.js:33:34)
    10. at Module._compile (module.js:635:30)
    11. at Object.Module._extensions..js (module.js:646:10)
    12. at Module.load (module.js:554:32)
    13. at tryModuleLoad (module.js:497:12)
    14. at Function.Module._load (module.js:489:3)
    Alles anzeigen


    JavaScript-Quellcode: app.js

    1. // eine server.crt ist im selben Ordner natürlich vorhanden und wurde
    2. // angepasst (selbstsigniert/richtiges Zertifikat)
    3. var httpsOption = {
    4. key: fs.readFileSync(serverPath+'server.key', 'utf8'),
    5. cert: fs.readFileSync(serverPath+'server.csr', 'utf8'),
    6. agent: false
    7. };
    8. var https = require('https').createServer(httpsOption).listen(settings.port);
    9. var app = require('socket.io')(https, {log: false, wsEngine: 'wss'});
    10. app.of(settings.lobby.nsp).on('connection', function(client){
    11. /* server ... */
    12. });
    Alles anzeigen

    Nun wäre es schön erst mal den Fehler beheben zu können danach wäre schön zu wissen warum das richtige Zertifikat nicht funktionierte (der Key würde angeblich nicht übereinstimmen, die Webseite die das gleiche Zertifikat nutzt läuft aber in https).


    MfG: Paykoman
    PS: Hilfe wäre echt toll!
  • Zu #1:
    Die Möglichkeit SocketIO auf einen vorhandenen Server aufzuhängen, erlaubt es das ganze in Kombination mit einem Webserver zu verwenden. Auf die Art kann ein und derselbe Port sowohl für den Webserver (http/https Protokoll) wie auch für den Socket (ws/wss Protokoll) verwendet werden.

    Zu #2:
    Scheint an deinen Dateien zu liegen. Du schreibst, du hättest die server.csr ausgetauscht. Hast du auch an die server.key gedacht?
  • Hallo Lichtjaeger,

    danke für die Antworten, also zu eins, das meinte ich ja eigentlich damit. Die Webseite kann mit dem socket-io server kommunizieren auch wenn er ohne http läuft =)

    Zu #2: ja natürlich habe ich beim Zertifikatswechsel alle 3 Dateien aktualisiert, bzw. die ersten habe ich umbenannt und für das richtige SSL-Zertifikat neue Dateien hinzugefügt, so das ich durch umbenennen hin und her wechseln kann. Der Server hatte ja beim ersten versuch wegen dem Key gemeckert das er nicht übereinstimmt, jetzt kommt immer oben genannte Fehlermeldung die so absolut nicht weiter hilft und nichts mit der Zertifizierung zu tun hat =(
  • Mach deine server.csr doch einfach mal mit einem Texteditor auf.

    Meine sieht beispielsweise so aus:

    Quellcode

    1. -----BEGIN CERTIFICATE-----
    2. MIIFezCCBGOgAwIBAgIKV7EgdwABAAAAIzANBgkqhkiG9w0BAQ0FADBEMRUwEwYK
    3. <--*noch 29 Zeilen je 65 Zeichen hash*-->
    4. Xs31bdvyRYIkb7FLcz73
    5. -----END CERTIFICATE-----

    Die Fehlermeldung sagt ja aus, dass das die 1. Zeile (-----BEGIN CERTIFICATE-----) fehlt.

    Die Dateierweiterung .csr lässt außerdem darauf schließen, dass es sich bei der Datei nur um eine Zertifikatsanfrage und nicht um das Zertifikat selbst handelt.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Lichtjaeger ()

  • Der quick'n'dirty Test wäre wohl so was wie:

    JavaScript-Quellcode: app.js

    1. var key = fs.readFileSync(serverPath+'server.key', 'utf8')
    2. var cert = fs.readFileSync(serverPath+'server.csr', 'utf8')
    3. console.log('key ('+ serverPath + 'server.key' + '):\n' + key)
    4. console.log('cert ('+ serverPath + 'server.csr' + '):\n' + cert)
    5. var httpsOption = {
    6. key: key,
    7. cert: cert,
    8. agent: false
    9. };
    10. var https = require('https').createServer(httpsOption).listen(settings.port);
    11. var app = require('socket.io')(https, {log: false, wsEngine: 'wss'});
    12. app.of(settings.lobby.nsp).on('connection', function(client){
    13. /* server ... */
    14. });
    Alles anzeigen
  • Naja klar auf die Idee kam ich auch schon =)

    Aber ich hatte ein paar Missverständnisse mit der Anzahl der Dateien bzw. wie das so Funktioniert (da manchmal 3 Dateien gefordert werden etc.).
    Zusätzlich kam ein bissl Verwirrung durch Plesk zwischen csr und crt nun habe ich es aber Einheitlich, das ich eine server.crt habe die entspricht dann dem crt aus Plesk und eben eine server.key wo der Key rein kommt. Funktioniert jetzt!

    Ich hatte jetzt zu letzt dasProblem das ich über mein Programm 2 neue Dateien anlegte (mit eben genannte Namen) und es nicht funktionierte, es kam wieder die no start line Fehlermeldung...
    Ich hatte die beiden vorherigen Dateien mit den der Server lief umbenannt und ein _ ans Ende gepackt bevor ich die neuen Dateien erstellte.
    Diese beiden habe ich runter geladen und die anderen Zertifikat-Daten eingetragen, erst dann hat es wieder funktioniert!

    Gibt es da Unterschiede zwischen manuell erstellte Dateien und die Dateien die über den SSH-Befehl erstellt wurden ? Es scheint nämlich das nur diese funktionieren, was die Sache echt leichter gemacht hätte :D