• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

PeerJS Insecure Content

SykesXable

New member
Moin,
ich arbeite mit der Libairy PeerJS für P2P-Connections. Das UserScript wird auf einer https-Verschlüsselten Seite aufgeführt und wirft jedesmal Errors bzw. stoppt sogar das Script . Da ich für JS nichts anderes für P2P-Verbindungen finde wollte ich fragen ob einer von euch weiß wie ich das lösen kann...

Das sind die Fehlermeldungen:
Code:
The page at 'https://www.optionyard.com/traderoom/' was loaded over HTTPS, but displayed insecure content from 'http://0.peerjs.com:9000/enotiqsoyx4dkj4i/copytradeserver/n4b55u0jduqh0k9/id?i=0': this content should also be loaded over HTTPS.
 VM1245:2608
The page at 'https://www.optionyard.com/traderoom/' was loaded over HTTPS, but ran insecure content from 'ws://0.peerjs.com:9000/peerjs?key=enotiqsoyx4dkj4i&id=copytradeserver&token=n4b55u0jduqh0k9': this content should also be loaded over HTTPS.
 VM1245:2554
Connecting to a non-secure WebSocket server from a secure origin is deprecated. VM1245:2554
Peer {_events: Object, options: Object, destroyed: false, disconnected: false, open: false…}

Browser ist Google Chrome, beide Rechner der Verbindung nutzten ein UserScript (d.h. es läuft kein richtiger Server mit Website o.ä.)

MfG
 
Zuletzt bearbeitet von einem Moderator:
Nun ja, die Fehlermeldungen besagen doch ganz klar, dass unverschlüsselter Inhalt von einem HTTP-/WS-Server geladen werden...
html5 Websocket with SSL - Stack Overflow
Um mehr sagen zu können, müssten wir natürlich das Skript sehen...
PS: Bitte die Fehlermeldungen entweder in
Code:
- oder [QUOTE]-Tags setzen!
Die Seite liefert übrigens ohnehin einen 404 Not Found...

[LIST]
[*][URL=http://blog.kaazing.com/2012/02/28/html5-websocket-security-is-strong/]HTML5 WebSocket Security is Strong | The Zinger[/URL]
[*][URL=http://msdn.microsoft.com/de-de/library/windows/apps/hh761446.aspx]So wird’s gemacht: Schützen von WebSocket-Verbindungen mit TLS/SSL (HTML) - Windows app development[/URL]
[*][URL=http://www.ceilers-news.de/serendipity/298-HTML5-Security-Gefaehrliche-WebSockets.html]HTML5 Security - Gefährliche WebSockets - Dipl.-Inform. Carsten Eilers[/URL]
[/LIST]
 
Da das Skript für die p2p-verbindung relativ lang ist poste ich mal nur die Betroffenen Zeilen

Und was die Fehler besagen versteh ich schon.. das unsicherer bzw nicht verschlüsselter Inhalt über eine Verschlüsselte Seite 'verarbeitet' wird...
die Frage ist ja: Wie mach ich die Sicher so das die Fehlermeldungen verschwinden. Das Hauptproblm liegt darin das Chrome das Skript nicht ausführt oder man jedesmal das Zulassen muss was auch blöd ist. Die Möglichkeit per Verknüpfungsparametern ist auch ungünstig da dann auf allen Seiten unsicherer Inhalt geladen werden kann.

Code:
/** Start up websocket communications. */
Socket.prototype._startWebSocket = function(id) {
  var self = this;

  if (this._socket) {
    return;
  }

  this._socket = new WebSocket(this._wsUrl);    <----- Hier kommt ein Error (ran insecure content)

  this._socket.onmessage = function(event) {
    try {
      var data = JSON.parse(event.data);
      self.emit('message', data);
    } catch(e) {
      util.log('Invalid server message', event.data);
      return;
    }
  };

  this._socket.onclose = function(event) {
    util.log('Socket closed.');
    self.disconnected = true;
    self.emit('disconnected');
  };

  // Take care of the queue of connections if necessary and make sure Peer knows
  // socket is open.
  this._socket.onopen = function() {
    if (self._timeout) {
      clearTimeout(self._timeout);
      setTimeout(function(){
        self._http.abort();
        self._http = null;
      }, 5000);
    }
    self._sendQueuedMessages();
    util.log('Socket open');
  };
}

/** Start XHR streaming. */
Socket.prototype._startXhrStream = function(n) {
  try {
    var self = this;
    this._http = new XMLHttpRequest();
    this._http._index = 1;
    this._http._streamIndex = n || 0;
    this._http.open('post', this._httpUrl + '/id?i=' + this._http._streamIndex, true);
    this._http.onreadystatechange = function() {
      if (this.readyState == 2 && this.old) {
        this.old.abort();
        delete this.old;
      } else if (this.readyState > 2 && this.status === 200 && this.responseText) {
        self._handleStream(this);
      } else if (this.status !== 200) {
        // If we get a different status code, likely something went wrong.
        // Stop streaming.
        clearTimeout(self._timeout);
        self.emit('disconnected');
      }
    };
    this._http.send(null);     <----- Hier kommt ein Error bzw. Hinweis  (Displayed insecure Content)
    this._setHTTPTimeout();
  } catch(e) {
    util.log('XMLHttpRequest not available; defaulting to WebSockets');
  }
}
 
Zuletzt bearbeitet:
Ich hab im Code noch folgendes gefunden:

Code:
 var httpProtocol = secure ? 'https://' : 'http://';
  var wsProtocol = secure ? 'wss://' : 'ws://';
  this._httpUrl = httpProtocol + host + ':' + port + path + key;
  this._wsUrl = wsProtocol + host + ':' + port + path + 'peerjs?key=' + key;

Kannst du mir sagen was das 'secure ?' bedeutet bzw er nicht das wss verwendet?

Und dann wär da noch das mit this._http.send(null);
 
Es handelt sich hier um eine if-Abfrage der Variable secure, wenn diese gesetzt (true) ist, wird die verschlüsselte Verbindung gewählt. Du musst also entweder var secure = true; setzen, oder (da in deinem Fall feststeht, dass die verschlüsselte Version (https auf dwe Webseite) verwendet wird) die if-Abfrage entfernen:
Code:
var httpProtocol = 'https://';
var wsProtocol = 'wss://';
  this._httpUrl = httpProtocol + host + ':' + port + path + key;
  this._wsUrl = wsProtocol + host + ':' + port + path + 'peerjs?key=' + key;
 
Alles klar das hab ich jetzt gemacht. Nun kommt da wo vorher nur der 'Hinweis' kam ein richtiger Error

Code:
/** Start XHR streaming. */
Socket.prototype._startXhrStream = function(n) {
  try {
    var self = this;
    this._http = new XMLHttpRequest();
    this._http._index = 1;
    this._http._streamIndex = n || 0;
    this._http.open('post', this._httpUrl + '/id?i=' + this._http._streamIndex, true);
    this._http.onreadystatechange = function() {
      if (this.readyState == 2 && this.old) {
        this.old.abort();
        delete this.old;
      } else if (this.readyState > 2 && this.status === 200 && this.responseText) {
        self._handleStream(this);
      } else if (this.status !== 200) {
        // If we get a different status code, likely something went wrong.
        // Stop streaming.
        clearTimeout(self._timeout);
        self.emit('disconnected');
      }
    };
    this._http.send(null);     <----- Hier kommt ein jetzt der Error ***
    this._setHTTPTimeout();
  } catch(e) {
    util.log('XMLHttpRequest not available; defaulting to WebSockets');
  }
}


***POST https://0.peerjs.com:9000/enotiqsoyx4dkj4i/copytradeserver/hdkslt5padobt9/id?i=0 net::ERR_SSL_PROTOCOL_ERROR
 
POST https://0.peerjs.com:9000/enotiqsoyx4dkj4i/copytradeserver/hdkslt5padobt9/id?i=0 net::ERR_SSL_PROTOCOL_ERROR
Also irgendwie scheint da dennoch was mit der SSL-Verbindung nicht zu stimmen...
Würde es gehen, dass du nochmal das gesamte Skript zeigst mit dem neuen Teil von oben?
 
Da der Code viel zu lang ist hier mal der Link für die Source: http://cdn.peerjs.com/0.3.9/peer.js
Nur die Änderung von dir fehlt da halt noch. Die Stelle ist ziemlich am Ende des Skiptes.

Dazu kommt dann noch da was ich dazu geschrieben habe :

Code:
var peer = new Peer('copytradeserver',{key: 'enotiqsoyx4dkj4i'});
[...]
peer.on('open', function(id) {
  console.log('My peer ID is: ' + id);
});
[...]
 
Hi SykesXable,
bist Du dir sicher das PeerJs eine reine Browser zu Browser Verbindung ist?
Laut dem was ich bis jetzt gelesen habe bist Du der Annahme, dass es so sei.

Denn in der Dokumentation steht:
PeerServer cloud runs on port 9000. Please ensure it is not blocked or consider running your own PeerServer instead.

Es handelt sich hier um eine if-Abfrage der Variable secure, wenn diese gesetzt (true) ist, wird die verschlüsselte Verbindung gewählt.

Zu der secure variable steht in der Dokumnetation geschriben:
Note that our cloud-hosted server and assets may not support SSL.

Sprich, wenn die variable true ist, ist SSL an, aber der Clouserver unterstütz das nicht. Man brauch für ssl einen eigenen.

Mein Browser sagt:
The cloud server currently does not support HTTPS. Please run your own PeerServer to use HTTPS.
peer.png
Auch wenn peer.js lokal auf meinem Rechner vorliegt.

Der WebRTC teil ist ja nur für das media straming zuständig. Zuvor muss aber eine Verbindung von Browser zu Browser hergestellt werden und das geht über einen Server.

Eventuell könntet du mal den Teil posten der den constructor enthält.

SykesXable schrieb:
Das ist der Quelltext von Peejs, der wird ja fehlerfrei sein.

Was willst Du denn mit Peejs erreichen, einen Media stream oder chat?

MfG Xorg1990
 
xorg1990 schrieb:
Eventuell könntet du mal den Teil posten der den constructor enthält.

SykesXable schrieb:
Dazu kommt dann noch da was ich dazu geschrieben habe :

var peer = new Peer('copytradeserver',{key: 'enotiqsoyx4dkj4i'});
[...]
peer.on('open', function(id) {
console.log('My peer ID is: ' + id);
});
[...]
OH das habe ich gestern Abend überlesen.

Woher hast Du denn das copytradeserver?
In der API gibt es keine solchen Befehl für den cunstructor
Oder ich bin blind.


Probiers mal so:
Code:
var peer = new Peer({key: 'enotiqsoyx4dkj4i', secure: true, debug: 3});
 
@Hesst,
wird bei dir eine andere Dokumentation angezeigt als bei mir?

peerdoc.png
Mein Browser findet den begriff nicht.
 
Peerconstructorvar peer = new Peer([id], [options]);

A peer can connect to other peers and listen for connections.
[id]string

Other peers can connect to this peer using the provided ID. If no ID is given, one will be generated by the brokering server.
10 zeichen
 
Asso, natürlich das ist die id.:beaten::black_eyed:

Aber dennoch benötigt peerjs ein Server und für ssl muss man einen eigenen mit nodejs aufsetzten.
 
Zurück
Oben