You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:SIP.js用WSS连接FreeSWITCH失败(WS正常,已换自签证书)

问题描述

使用SIP.js向FreeSWITCH服务器注册时,WS(WebSocket)协议可正常运行,但切换为WSS(WebSocket Secure)协议后出现连接错误,已将原有证书替换为自签名证书wss.pem。

FreeSWITCH错误日志

tport.c:2777 tport_wakeup_pri() tport_wakeup_pri(0x7fe5c800be90): events IN
tport.c:867 tport_alloc_secondary() tport_alloc_secondary(0x7fe5c800be90): new secondary tport 0x7fe5c8018990
tport.c:2103 tport_close() tport_close(0x7fe5c8018990): (null)/(null):(null)
tport_type_ws.c:641 tport_ws_next_timer() tport_ws_next_timer(0x7fe5c8018990): Error establishing SSL to (null)/(null):(null)
tport.c:2278 tport_set_secondary_timer() tport(0x7fe5c8018990): set timer at 0 ms because zap
tport.c:2103 tport_close() tport_close(0x7fe5c8018990): (null)/(null):(null)
tport_type_ws.c:535 tport_ws_deinit_secondary() 0x7fe5c8018990 destroy wss transport 0x7fe5c8018b80.

SIP.js 相关代码

const transportOptions = {
        server: "wss://10.16.127.26:7443"//fs
      }; 
      //ua
    // const userAgent = new UserAgent({transportOptions});
    // userAgent.start();
    const fake_uri='sip:'+extName+'@10.16.127.26'
    const uri = UserAgent.makeURI(fake_uri);
    const targeturi=UserAgent.makeURI(target);
    if (!uri) {
        throw new Error("Failed to create URi");
      }
        const userAgentOptions = {
        authorizationPassword: '1234',
        authorizationUsername: '1001',
        transportOptions,
        // hackWssInTransport: true,
        uri,
      };
    const userAgent = new UserAgent(userAgentOptions);
    connect.addEventListener('click',e=>{
            // console.log('ok');
        const registerer = new Registerer(userAgent);
        userAgent.start().then(() => {
          registerer.register()
          console.log('11');
        });
        // console.log( registerer.register());
        })

解决方案

1. 检查FreeSWITCH证书配置

确保FreeSWITCH正确加载自签名证书,在vars.xml中确认以下配置:

<X-PRE-PROCESS cmd="set" data="wss-cert-path=/path/to/wss.pem"/>
<X-PRE-PROCESS cmd="set" data="wss-key-path=/path/to/wss.key"/>

注意:证书文件权限需设置为600,避免FreeSWITCH无法读取;若证书包含链文件,需合并到wss.pem中。

2. 验证证书有效性

在FreeSWITCH服务器上执行命令检查证书:

openssl x509 -in /path/to/wss.pem -text -noout

确认证书的Subject Alternative Name(SAN)包含服务器IP10.16.127.26,否则会因域名不匹配被拒绝。缺失SAN需重新生成证书:

openssl req -x509 -newkey rsa:4096 -keyout wss.key -out wss.pem -days 365 -addext "subjectAltName=IP:10.16.127.26" -nodes

3. 配置SIP.js忽略自签名证书(测试环境)

自签名证书不受浏览器信任,需在transportOptions中添加TLS配置关闭验证:

const transportOptions = {
  server: "wss://10.16.127.26:7443",
  tlsOptions: {
    rejectUnauthorized: false
  }
};

生产环境请使用CA颁发的合法证书,禁止此配置。

4. 确认WSS端口监听

检查FreeSWITCH配置文件(如sip_profiles/external.xml)是否开启WSS监听:

<param name="wss-binding" value="0.0.0.0:7443"/>

重启FreeSWITCH后,用netstat -tulpn | grep 7443确认端口处于监听状态。

5. 排查网络连通性

确认客户端到FreeSWITCH的7443端口未被防火墙拦截,可通过telnet 10.16.127.26 7443测试连通性。

内容的提问来源于stack exchange,提问作者cqupt_zz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 01:14:54