クライアント側で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
KamilioとJS SIP Websocket Secure
しかし、私はws('ws://mydomain.com:8080/'
)を使用する場合。
誰かがこの問題を解決する方法を知っていますか?
証明書を生成しましたが、問題は解決しません。私はnodeJSをサーバーとして使用しています。
kamailio.cfgファイル:
/*ローカルドメインエイリアスを追加*/
別名= "mydomain.com"
は= UDPを聞く:private_ip:5060 public_ipを宣伝:5060
listen = tcp:private_ip:5060 Advertise public_ip:5060
listen = tcp:private_ip:5061 advert ISEのpublic_ip:8080
は= TLSを聞く:private_ip:4443 public_ipを宣伝:5061
「#WITH_TLS
は= MY_WSS_ADDRがpublic_ip宣伝聞いIFDEF:4443を5061
は= MY_WS_ADDRがpublic_ipを宣伝聞きます
tcp_connection_lifetime = 3604
endifの「#!
tcp_accept_no_cl = yesの
tcp_rd_buf_size = 16384
/*ポート= 5060
*/「#ポート(TLSのUDP、TCP、scrtp、または5061のデフォルト5060)に耳を傾けます
[...]
を "#!WITH_NATを定義する""#!WITH_MYSQLを定義します"
"
を "WITH_DEBUGを定義する#!#!WITH_USRLOCDBを定義する "
"#!WITH_TLSを定義する"
"" #!WITH_AUTH
を定義" #!substdef「!MY_IP_ADDR !my_private_ip!グラム "
" #!substdef "!MY_DOMAIN!my_public_ip!グラム"
"#!substdef"!MY_WS_PORT!8080!! "!!!MY_WSS_PORT 4443グラム"!!G "
" #substdef
"!#substdef "MY_WS_ADDR TCP:MY_IP_ADDR:!!!MY_WS_PORTグラム"
" #substdef」MY_WSS_ADDR! TLS:MY_IP_ADDR:!MY_WSS_PORTグラム」
追加情報 event_route [xhttp:要求]が等しいKamailio 5.0のドキュメントです:https://kamailio.org/docs/modules/5.0.x/modules/websocket.html [...]
tls.cfgファイル:
[...]
[サーバー:デフォルト]
方法= TLSv1の
verify_certificate =なし
require_certificate = yesの
private_key = /etc/certs/mydomain.com/key.pem
証明書= /etc/certs/mydomain.com/cert.pem
[...]
[...]
[クライアント:デフォルト]
verify_certificate =はい
require_certificate = yesの
[...]
Javascriptを:
var socket = new JsSIP.WebSocketInterface('wss://mydomain.com:4443');
var configuration = {
sockets : [ socket ],
uri : 'sip:[email protected]',
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
012に聞きます別名:あなたはより多くの詳細が必要な場合は
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
、私に尋ねるので、私は私の質問を編集します。
wssで使用される自己署名証明書は、現在ブラウザでは直接使用できません。ブラウザーで 'https://yourdomain.com:4443 /'を直接開くとどうなりますか? –
証明書は問題ありません。私はこのサイトを利用して生成しました:https://certbot.eff.org/#ubuntuxenial-nginx 私はこの問題を解決しました。私が行ったことを投稿します。 ありがとうございます。 –