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://
.