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
Надеюсь, это кому-нибудь пригодится.