2015-02-20 3 views
6

Ich verwende GlassFish Server 4.1/Java EE 7. In meiner web.xml-Datei erwähnte ich die folgende Sicherheit Einschränkungen.Uncaught SecurityError: Fehler beim Erstellen von 'WebSocket': Eine nicht sichere WebSocket-Verbindung kann nicht über eine HTTPS-Seite initiiert werden

<security-constraint> 
    <display-name>UserConstraint</display-name> 
    <web-resource-collection> 
     <web-resource-name>Provide a Name</web-resource-name> 
     <description/> 
     <url-pattern>/admin_side/*</url-pattern> 
     <http-method>GET</http-method> 
     <http-method>POST</http-method> 
    </web-resource-collection> 
    <auth-constraint> 
     <description/> 
     <role-name>ROLE_ADMIN</role-name> 
    </auth-constraint> 
    <user-data-constraint> 
     <description/> 
     <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
    </user-data-constraint> 
</security-constraint> 

Und das gleiche für andere Behörden.

Da transport-guarantee wird auf CONFIDENTIAL, Web-Seiten, die die angegebene URL Muster /admin_side/* Lauf über einen sicheren Kanal (HTTPS) entsprechen.

Bei der Verwendung von WebSockets wie folgt (JavaScript),

var ws = new WebSocket("ws://localhost:8181/Context/Push"); 

es scheitert eine anfängliche Handshake herzustellen. Der Browser zeigt die folgende Warnung in der Browserkonsole an.

[blocked] The page at 'https://localhost:8181/Context/admin_side/Category' was loaded over HTTPS, but ran insecure content from 'ws://localhost:8080/Context/Push': this content should also be loaded over HTTPS. 

Uncaught SecurityError: Failed to construct 'WebSocket': An insecure WebSocket connection may not be initiated from a page loaded over HTTPS. 

Wenn der <user-data-constraint> Abschnitt von web.xml in seiner vollständig entfernt wird, Webseiten auf HTTP laufen. Danach, Ändern

var ws = new WebSocket("ws://localhost:8181/Context/Push"); 

zu

var ws = new WebSocket("ws://localhost:8080/Context/Push"); 

funktioniert gut.

Was könnte getan werden, um WebSockets über einen sicheren Kanal arbeiten zu lassen?

+1

Ja! Es funktionierte. Ich habe 'wss: //' vorher noch nie gesehen. Kann es bitte als Antwort hinzufügen. Vielen Dank. – Tiny

+0

Danke! Ich fügte auch einige zusätzliche Informationen für zukünftige Referenz hinzu. – vtortola

Antwort

11

Versuchen Sie mit wss://, dass Sie eine sichere Websocket-Verbindung möchten. Der Browser verhindert, dass Sie unsichere Verbindungen von sicheren Seiten erstellen, da er versteht, dass seit Sie die Seite mit https:// angefordert haben, eine Transportsicherheitsanforderung besteht.

Wenn Ihr WebSocket-Server mit dem yout-Webserver ausgeführt wird, wird wahrscheinlich dasselbe Sicherheitszertifikat verwendet, und Sie müssen nichts tun. Wenn dies nicht funktioniert, überprüfen Sie bitte in Ihrer WebSocket-Serverdokumentation, wie Sie Zertifikate hinzufügen und wss:// aktivieren können.

Verwandte Themen