Kamilio и JS SIP Websocket Secure

Я пытаюсь настроить Kamailio с WebSocket Secure (wss), используя JSSIP на стороне клиента. Я сделал настройки на kamailio.cfg и tls.cfg, помимо разрешенных портов и перенаправления. На консоли браузера я вижу, что: jssip-3.0.13.js:21334 WebSocket connection to 'wss://mydomain.com:4443/' failed: WebSocket opening handshake was canceled

Но если я использую ws ('ws://mydomain.com:8080/') оно работает.

Кто-нибудь знает, как решить эту проблему?

Я сгенерировал сертификаты, но проблема сохраняется. Я использую nodeJS в качестве сервера.

Файл kamailio.cfg:

/ * добавить псевдонимы локальных доменов */

псевдоним = "mydomain.com"

listen = udp: private_ip: 5060 рекламировать public_ip: 5060

listen = tcp: private_ip: 5060 рекламировать public_ip: 5060

listen = tcp: private_ip: 5061 реклама public_ip:5061

прослушать =MY_WS_ADDR рекламировать public_ip: 8080

listen = tls: private_ip: 4443 реклама public_ip:5061

"#! ifdef WITH_TLS

прослушать =MY_WSS_ADDR рекламировать public_ip: 4443

"#! ENDIF

tcp_connection_lifetime = 3604

tcp_accept_no_cl = да

tcp_rd_buf_size = 16384

/ * порт для прослушивания (по умолчанию 5060 для udp, tcp, scrtp или 5061 для tls) */

"# port = 5060

[...]

"#! определить WITH_NAT"

"#! define WITH_MYSQL"

"#! определить WITH_AUTH

"#! определить WITH_USRLOCDB"

"#! определить WITH_TLS"

"#! определить WITH_DEBUG"

"#! substdef"! MY_IP_ADDR! my_private_ip! g "

"#! substdef"! MY_DOMAIN! my_public_ip! g "

"#! substdef"! MY_WS_PORT! 8080! g "

"#! substdef"! MY_WSS_PORT! 4443! g "

"#! substdef"! MY_WS_ADDR! tcp: MY_IP_ADDR: MY_WS_PORT! g "

"#! substdef"! MY_WSS_ADDR! tls: MY_IP_ADDR: MY_WSS_PORT! g "

Дополнительная информация Event_route[xhttp:request] равен Kamailio 5.0 docs: https://kamailio.org/docs/modules/5.0.x/modules/websocket.html[...]

Файл tls.cfg:

[...]

[Сервер: по умолчанию]

method = TLSv1

verify_certificate = нет

require_certificate = да

private_key = /etc/certs/mydomain.com/key.pem

сертификат = /etc/certs/mydomain.com/cert.pem

[...]

[...]

[Клиент: по умолчанию]

verify_certificate = да

require_certificate = да

[...]

Javascript:

var socket = new JsSIP.WebSocketInterface('wss://mydomain.com:4443');
    var configuration = {
      sockets  : [ socket ],
      uri      : 'sip:client@mydomain.com',
      password : '******',
    };

NodeJS:


    'use strict';

    var os = require('os');
    var path = require('path');
    const https = require('https');
    var url = require('url');
    const fs = require('fs');

    const options = {
        key:    fs.readFileSync('demoCA/key.pem'),
        passphrase: '*********',
        cert: fs.readFileSync('demoCA/cert.pem')
    };

    var app = https.createServer(options, function(req, resp) {
    var url_parts = url.parse(req.url);
    var path = url_parts.pathname;
    console.log(path)
    fs.readFile(__dirname + path, function(err, data) {
    if(err) {
        resp.writeHead(404, {'Content-Type': 'text/html'});
        resp.write('Not found');
    } else {
       resp.writeHead(200, {'Content-Type': 'text/html'});
       resp.write(data);
    }
    resp.end();
    });
});

   app.listen(443);

AWS

Слушая

udp: private_ip:5060 advertise public_ip:5060

tcp: private_ip:5060 advertise public_ip:5060

tcp: private_ip:5061 advertise public_ip:5061

tcp: private_ip:8080 advertise public_ip:8080

tls: private_ip:4443 advertise public_ip:4443

Псевдонимы:

tls: ip-private_ip.us-west-2.compute.internal:4443

tcp: ip-private_ip.us-west-2.compute.internal:8080

tcp: ip-private_ip.us-west-2.compute.internal:5061

tcp: ip-private_ip.us-west-2.compute.internal:5060

udp: ip-private_ip.us-west-2.compute.internal:5060

Если вам нужно больше деталей, спросите меня, чтобы я отредактировал свой вопрос.

1 ответ

Решение

Я решил свою проблему. Мне не хватало загрузки некоторых модулей и роутеров.

Я видел этот файл в качестве примера: https://gist.github.com/jesusprubio/4066845 но важно знать, что каждый модуль начинается с "mi", который они не поддерживают в Kamailio 5.0. Вам потребуется заменить модуль относительно версии 5.0.

Я использовал этот сайт для генерации сертификатов: certbot.eff.org/#ubuntuxenial-nginx

Надеюсь, это кому-нибудь пригодится.

Другие вопросы по тегам