Почему я должен сделать запрос https на сайт, прежде чем Chrome правильно установит безопасное соединение WebSocket? - PullRequest
0 голосов
/ 01 мая 2019

Я пытаюсь установить безопасное соединение WebSocket с сайтом, отличным от сайта, на котором выполняется мой код клиента WebSocket (т. Е. Пытаюсь подключиться к wss: //a.site.com: 15673 / ws fromhttp://another.site.com/my_page.html)

Сайт, к которому я подключаюсь, НЕ использует самозаверяющий сертификат, это сертификат, выданный органом с доверенным корнем, мой браузер отправляет запросы https для защиты сайтов с сертификатом без предупрежденийили ошибки.

Тем не менее, когда я пытаюсь установить соединение с веб-сокетом в Chrome, я получаю

WebSocket connection to 'wss://a.site.com:15673/ws' failed: WebSocket opening handshake was canceled

Выход Chrome net-internals:

301565: SSL_CONNECT_JOB
ssl/a.site.com:15673
Start Time: 2019-05-01 15:17:42.568

t=8370 [st=  0] +SOCKET_POOL_CONNECT_JOB  [dt=371]
                 --> group_name = "ssl/a.site.com:15673"
t=8370 [st=  0]   +SOCKET_POOL_CONNECT_JOB_CONNECT  [dt=371]
t=8370 [st=  0]      TCP_CLIENT_SOCKET_POOL_REQUESTED_SOCKET
                     --> host_and_port = "a.site.com:15673"
t=8370 [st=  0]     +SOCKET_POOL  [dt=191]
t=8378 [st=  8]        SOCKET_POOL_BOUND_TO_CONNECT_JOB
                       --> source_dependency = 301566 (WEB_SOCKET_TRANSPORT_CONNECT_JOB)
t=8561 [st=191]        SOCKET_POOL_BOUND_TO_SOCKET
                       --> source_dependency = 301569 (SOCKET)
t=8561 [st=191]     -SOCKET_POOL
t=8741 [st=371]   -SOCKET_POOL_CONNECT_JOB_CONNECT
                   --> net_error = -110 (ERR_SSL_CLIENT_AUTH_CERT_NEEDED)
t=8741 [st=371] -SOCKET_POOL_CONNECT_JOB

Интересно, если япосетите сайт / порт, к которому я пытаюсь подключиться через https (т. е. https://a.site.com:15673) Я получаю 404, потому что там нет службы HTTP, но после этого срабатывают последующие попытки подключиться через защищенную сетевую розетку!

Я даже могу «обойти» обходной путь, сделав фиктивный запрос AJAX в своем скрипте перед подключением, но это будет ужасно.

Этонапример, в Chrome есть какой-то кэш SSL, который после заполнения может использовать код веб-сокета, но он не может заполнить сам кэш?

Firefox не ведет себя таким образом, сначала он подключается, как ожидаетсявремя без каких-либо обходных путей.Opera работает так же, как Chrome, так что, похоже, поведение Webkit возможно?

Такое же поведение возникает, когда я просто вызываю

new WebSocket("wss://a.site.com:15673/ws", ["mqtt"])

, поэтому я не думаю, что это проблема свызывающий скрипт

Может ли кто-нибудь помочь мне с правильным способом установить безопасную веб-розетку из Chrome / Webkit в этом сценарии, не прибегая к ошибочным взломам?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...