Ошибка подключения к Kurento - WebSocket

Я пытаюсь запустить пример записи Javascript для Kurento WebRTC, как показано в:

http://doc-kurento.readthedocs.org/en/stable/tutorials/js/tutorial-recorder.html

У меня есть настройка Kurento на машине Ubuntu, и она работает нормально. Служба также началась. Кроме того, я тестировал Java-пример и работал без каких-либо проблем.

Ошибка записи js со следующей ошибкой:

Смешанный контент: страница с надписью https://ABCDEF 'была загружена через HTTPS, но попытался подключиться к небезопасной конечной точке WebSocket 'WS://XYZ: 8433/. Этот запрос заблокирован; эта конечная точка должна быть доступный через WSS

Я изменил переменную ws_uri, чтобы указать на защищенный веб-сокет:

ws_uri: 'wss://XYZ:8433',

Однако теперь я получаю следующую ошибку:

WebSocket connection to 'wss://XYZ:8433/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED

Сервер kurento защищен для работы через HTTPS с использованием letencrypt. Я использовал следующие инструкции для защиты сервера:

https://doc-kurento.readthedocs.org/en/latest/mastering/securing-kurento-applications.html

Однако в приведенном выше примере он запрашивает объединение следующих файлов crt:

cat signing-ca.crt subordinate-ca.crt server.crt > server.pem

Я здесь смущен, так как я не мог найти вышеуказанные файлы. Letsencrypt генерирует для меня следующие файлы .pem:

cert.pem, chain.pem, fullchain.pem, privkey.pem

Должен ли один из указанных файлов использоваться в файле kurento.json.conf?

Ответ 1

Вы должны использовать один из указанных вами файлов .pem - Вам не нужно конкатенировать любые файлы .crt, так как вы используете letsencrypt в качестве центра сертификации. У вас уже есть файлы цепочки сертификатов, и в документации упоминается:

Если этот сертификат PEM является подписанным сертификатом (с помощью центра сертификации, такого как Verisign), значит, вы сделали.

(Отказ от ответственности: я никогда не использовал "letencrypt" сервисы, поэтому я говорю вообще)

Файлы, созданные с помощью letencrypt, не являются показательными (как сообщается в этой проблемах на GitHub), но кажется, что fullchain.pem файл, который вам нужен.

Настроить Kurento на использование fullchain.pem в качестве certificate:

"secure": {
  "port": 8433,
  "certificate": "fullchain.pem",
  "password": ""
}

Для записи, если бы вы подписали свой собственный сертификат, вы бы использовали cat, чтобы создать цепочку сертификатов следующим образом:

root-ca == > подпись-ca == > subordinate-ca == > сервер

Ответ 2

Ваш файл kurento.json.conf, вероятно, прекрасен.

Я столкнулся с этим вопросом некоторое время назад. Проблема в том, что java блокирует туннелирование websocket для целей безопасности. Вы должны добавить setAllowedOrigins (*) в метод registerWebSocketHandlers. Примечание: это не безопасно и не должно использоваться в рабочей среде.

@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
 registry.addHandler(handler(), "/helloworld").setAllowedOrigins("*");
}

Здесь ответ команды Kurento о том, почему она закодирована таким образом... https://groups.google.com/d/msg/kurento/Q5ODV7hkuOc/RnsZKBaXDQAJ