Kamailio 和 JSSIP Websocket 安全
Kamilio and JS SIP Websocket Secure
我正在尝试在客户端使用 JSSIP 使用 WebSocket Secure (wss) 配置 Kamailio。除了允许的端口和重定向之外,我还对 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
/* 要监听的端口(udp、tcp、scrtp 默认为 5060,tls 默认为 5061)*/
"#端口=5060
[...]
"#!define WITH_NAT"
"#!define WITH_MYSQL"
"#!define WITH_AUTH
"#!define WITH_USRLOCDB"
"#!define WITH_TLS"
"#!define 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 文档:https://kamailio.org/docs/modules/5.0.x/modules/websocket.html
[...]
tls.cfg 文件:
[...]
[服务器:默认]
方法 = 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
如果您需要更多详细信息,请问我,我会编辑我的问题。
我解决了我的问题。我缺少加载一些模块和路由器。
我以这个文件为例:
https://gist.github.com/jesusprubio/4066845 但了解这一点很重要
Kamailio 5.0 不支持每个模块 "mi"。
您需要更换 5.0 版相关模块。
我用这个网站生成了证书:certbot.eff.org/#ubuntuxenial-nginx
希望对大家有所帮助。
我正在尝试在客户端使用 JSSIP 使用 WebSocket Secure (wss) 配置 Kamailio。除了允许的端口和重定向之外,我还对 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
/* 要监听的端口(udp、tcp、scrtp 默认为 5060,tls 默认为 5061)*/
"#端口=5060
[...]
"#!define WITH_NAT"
"#!define WITH_MYSQL"
"#!define WITH_AUTH
"#!define WITH_USRLOCDB"
"#!define WITH_TLS"
"#!define 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 文档:https://kamailio.org/docs/modules/5.0.x/modules/websocket.html [...]
tls.cfg 文件:
[...]
[服务器:默认]
方法 = 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
如果您需要更多详细信息,请问我,我会编辑我的问题。
我解决了我的问题。我缺少加载一些模块和路由器。
我以这个文件为例: https://gist.github.com/jesusprubio/4066845 但了解这一点很重要 Kamailio 5.0 不支持每个模块 "mi"。 您需要更换 5.0 版相关模块。
我用这个网站生成了证书:certbot.eff.org/#ubuntuxenial-nginx
希望对大家有所帮助。