Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

NodeJs + Socket.IO + SSL. Verbinding komt niet tot stand.

Pagina: 1
Acties:

  • cakemasher
  • Registratie: April 2011
  • Laatst online: 19-11 13:23
Een tijd geleden ben ik begonnen met het experimenteren met nodejs en socket.io. Tot zo ver, lukt dat allemaal prima, alleen wou ik nu graag een beveiligde socket.io verbinding open zetten tussen de socket.io server en de web client.

Ik heb een geldig certificaat tot mijn beschikking die op de server draait waar ook het domein van beveiligd is.

Nu kom ik op het probleem, dat zodra ik wil verbinden naar de server, ik de volgende foutmelding krijg in de console van google chrome:
code:
1
XMLHttpRequest cannot load https://domain.tld:12457/socket.io/1/?t=1403871407291. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://domain.tld' is therefore not allowed access.


Ik heb daarbij de header toegevoegd in de https server, op de volgende manier:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var https           = require ('https');
var fs              = require ('fs');
var options         = {
                    key: fs.readFileSync('./cert/private.key'),
                    cert: fs.readFileSync('./cert/certificate.crt'),    
                    ca: [ fs.readFileSync('./cert/ca.pem'), fs.readFileSync('./cert/sub.class1.server.ca.pem') ]
                };

var server          = https.createServer (options, function (req, res) {
res.setHeader("Access-Control-Allow-Origin", "https://domain.tld");
res.writeHead (200);
res.end ("Nothing to see here :o");
});

var socketio            = require ('socket.io').listen (server);

server.listen (12457);


Als ik de server start, en via socket.io probeer te verbinden krijg ik dus die foutmelding. Maar als ik de headers op haal van de HTTPS server, dan krijg ik het volgende;
code:
1
2
3
4
HTTP/1.1 200 OK => 
Access-Control-Allow-Origin => https://domain.tld
Date => Fri, 27 Jun 2014 12:18:45 GMT
Connection => close

Waarbij de headers wel gewoon zijn door gevoerd.

De client maakt verbinding d.m.v. de secured parameter + het gebruikt van https:// voor het domein naam.
code:
1
var socket  = io.connect ('https://domain.tld:12457', {secure: true});


De statische HTML pagina's en alle bij hoorende bestanden, zijn op het zelfde domein geplaatst (https://domain.tld).

Is er misschien iemand die me een schop in de goede richting kan geven?

Alvast bedankt!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 20-11 22:59

Janoz

Moderator Devschuur®

!litemod

Het gaat niet alleen om het domeinnaam, ook de poort is van belang. https://domain.tld:80 wordt als iets anders gezien als https://domain.tld:12457

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • cakemasher
  • Registratie: April 2011
  • Laatst online: 19-11 13:23
Maar kwa certificaat zou dit niet uit moeten maken volgens mij. Zou in de header dan de poort ook aangegeven moeten zijn? Ik zal het eens proberen.

edit:
Dit werkt helaas ook niet. De fout melding geeft veder ook niet aan dat het domein niet klopt, maar dat de header in z'n geheel niet aanwezig is (nu weet ik veder niet hoe uitgebreid deze foutmeldingen zijn). Je zou haast zeggen dat de server de header alleen voor de HTTPS server insteld, maar niet voor de socket.io server.
Ik heb even op internet gezocht, maar het enige wat ik kan vinden hoe mensen de header setten, is d.m.v. de manier die ik op het moment gebruik.

[ Voor 62% gewijzigd door cakemasher op 30-06-2014 20:43 ]


  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
Gebruik fiddler of wireshark om te kijken of de header ook daadwerkelijk geset is, dan weet je teminste in welke hoek je het moet zoeken.

  • Garlic
  • Registratie: December 2009
  • Laatst online: 02-11 11:44
Je zou ipv.

res.setHeader("Access-Control-Allow-Origin", "https://domain.tld");

res.setHeader("Access-Control-Allow-Origin", "*");

kunnen proberen. Weet je in elk geval of het probleem in de acao header zit.

Controleren of de header wordt gezet doe ik over het algemeen gewoon met chrome+F12=>network-> tabje headers. Dat is wat makkelijker dan wireshark gezien de ssl laag.

[ Voor 0% gewijzigd door Garlic op 05-07-2014 17:18 . Reden: 12->F12 ]