Uncaught SecurityError: не удалось создать "WebSocket": небезопасное соединение WebSocket не может быть инициировано со страницы, загруженной через HTTPS

Я использую GlassFish Server 4.1 / Java EE 7. В моем web.xml-файл, я упомянул следующие ограничения безопасности.

<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>

и то же самое для других органов.

С transport-guarantee установлено значение CONFIDENTIAL, веб-страницы, соответствующие указанному шаблону URL /admin_side/* запуск по защищенному каналу (HTTPS).

при использовании WebSockets следующим образом (JavaScript),

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

он не может установить начальное рукопожатие. Браузер показывает следующее предупреждение на консоли браузера.

[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.

когда из интернета.xml удаляется полностью, веб-страницы работают на HTTP. После этого, меняясь,

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

to

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

работает нормально.

что можно сделать, чтобы заставить WebSockets работать по защищенному каналу?

1 ответов


попробовать wss://, Это означает, что вы хотите безопасное соединение websocket. Браузер не позволит вам создавать незащищенные соединения с защищенных страниц, поскольку он понимает, что, поскольку вы запросили страницу с https://, существует требование безопасности транспорта.

Если у вас есть сервер WebSocket, работающий с веб-сервером yout, он, вероятно, будет использовать тот же сертификат безопасности, и вам ничего не нужно делать. Если это не работает, проверьте свой WebSocket документация сервера о добавлении сертификатов и включении wss://.