0

我可以使用 jssip 连接到我的 freePbx 服务器。但是在 Asterisk Logs 中由于密码错误而注册失败。对于我的 PjSip 扩展,我可以使用相同的密码连接和注册无 WebRtc 和 WebSocket 客户端。

它在 .net 库 Ozeki 中具有相同的用户、通行证等,但在 nodejs 和 webRtc 中它不起作用。

星号日志:

ERROR[24788]: res_http_websocket.c:506 ws_safe_read: Error readng from webScoket: Connection rest by peer.
NOTICE[33279]: chan_sip.c28486 handle_request_register: Registeration from '<sip:170@192.168.0.210>' faild for 192.168.0.250:43751 - wrong password

jssip配置:

var socket = new JsSIP.WebSocketInterface('ws://192.168.0.210:8089/ws');

var configuration = {
    sockets           : [ socket ],
    authorization_user: '170',
    uri               : 'sip:170@192.168.0.210',
    ws_servers        : 'ws://192.168.0.210:8089/ws',
    password          : '856589',
    realm             : '192.168.0.210',
    display_name      : '170',
    contact_uri       : 'sip:170@192.168.0.210'
};

jssip日志:

olden@golden-client:~/LocalFiles/projects/jssip$ node ./index.js  JsSIP version 3.0.21 +0ms  jssip-node-websocket new() [url:"ws://192.168.0.210:8088/ws", options:undefined] +0ms
  JsSIP:UA new() [configuration:{ sockets: [ NodeWebSocket { _url: 'ws://192.168.0.210:8088/ws', _options: {}, _sipUri: 'sip:192.168.0.210:8088;transport=ws', _viaTransport: 'WS', _ws: null } ], authorization_user: '170', uri: 'sip:170@192.168.0.210:5060', ws_servers: 'ws://192.168.0.210:8088/ws', password: '170170', realm: '192.168.0.210', display_name: '170', contact_uri: 'sip...@192.168.0.210' }] +0ms
  JsSIP:Transport new() +0ms
  JsSIP:UA configuration parameters after validation: +15ms
  JsSIP:UA - authorization_user: "170" +0ms
  JsSIP:UA - password: NOT SHOWN +0ms
  JsSIP:UA - realm: "192.168.0.210" +0ms
  JsSIP:UA - ha1: NOT SHOWN +0ms
  JsSIP:UA - display_name: "170" +0ms
  JsSIP:UA - uri: sip:170@192.168.0.210:5060 +0ms
  JsSIP:UA - contact_uri: {"_parameters":{},"_headers":{},"_scheme":"sip","_user":"170","_host":"192.168.0.210"} +0ms
  JsSIP:UA - instance_id: "f3a58a94-b426-4a8d-8b15-9f7208a42f9b" +0ms
  JsSIP:UA - use_preloaded_route: false +0ms
  JsSIP:UA - session_timers: true +0ms
  JsSIP:UA - no_answer_timeout: 60000 +0ms
  JsSIP:UA - register: true +0ms
  JsSIP:UA - register_expires: 600 +0ms
  JsSIP:UA - registrar_server: sip:192.168.0.210:5060 +0ms
  JsSIP:UA - connection_recovery_max_interval: null +0ms
  JsSIP:UA - connection_recovery_min_interval: null +0ms
  JsSIP:UA - via_host: "192.168.0.210" +0ms
  JsSIP:UA start() +0ms
  JsSIP:Transport connect() +1ms
connecting
  jssip-node-websocket connect() +18ms
  jssip-node-websocket WebSocket connecting [url:"ws://192.168.0.210:8088/ws"] +0ms
  jssip-node-websocket WebSocket open [url:"ws://192.168.0.210:8088/ws"] +18ms
connected
  JsSIP:Transport send() +22ms
  JsSIP:Transport sending message:
  JsSIP:Transport
  JsSIP:Transport REGISTER sip:192.168.0.210:5060 SIP/2.0
  JsSIP:Transport Via: SIP/2.0/WS 192.168.0.210;branch=z9hG4bK160956
  JsSIP:Transport Max-Forwards: 69
  JsSIP:Transport To: <sip:170@192.168.0.210:5060>
  JsSIP:Transport From: "170" <sip:170@192.168.0.210:5060>;tag=s9bkng5emf
  JsSIP:Transport Call-ID: 6ra4f68tegdmqllfoa7kja
  JsSIP:Transport CSeq: 1 REGISTER
  JsSIP:Transport Contact: <sip...@192.168.0.210>;+sip.ice;reg-id=1;+sip.instance="<urn:uuid:f3a58a94-b426-4a8d-8b15-9f7208a42f9b>";expires=600
  JsSIP:Transport Expires: 600
  JsSIP:Transport Allow: INVITE,ACK,CANCEL,BYE,UPDATE,MESSAGE,OPTIONS,REFER,INFO
  JsSIP:Transport Supported: path,gruu,outbound
  JsSIP:Transport User-Agent: JsSIP 3.0.21
  JsSIP:Transport Content-Length: 0
  JsSIP:Transport
  JsSIP:Transport
  JsSIP:Transport  +0ms
  jssip-node-websocket send() +3ms
  jssip-node-websocket WebSocket message received +3ms
  JsSIP:Transport received text message:
  JsSIP:Transport
  JsSIP:Transport SIP/2.0 401 Unauthorized
  JsSIP:Transport Via: SIP/2.0/WS 192.168.0.210;branch=z9hG4bK160956;received=192.168.0.3;rport=35832
  JsSIP:Transport From: "170" <sip:170@192.168.0.210:5060>;tag=s9bkng5emf
  JsSIP:Transport To: <sip:170@192.168.0.210:5060>;tag=as0f727a9b
  JsSIP:Transport Call-ID: 6ra4f68tegdmqllfoa7kja
  JsSIP:Transport CSeq: 1 REGISTER
  JsSIP:Transport Server: FPBX-13.0.192.19(13.12.1)
  JsSIP:Transport Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH, MESSAGE
  JsSIP:Transport Supported: replaces, timer
  JsSIP:Transport WWW-Authenticate: Digest algorithm=MD5, realm="asterisk", nonce="078cc3e4"
  JsSIP:Transport Content-Length: 0
  JsSIP:Transport
  JsSIP:Transport
  JsSIP:Transport  +3ms
  JsSIP:DigestAuthentication authenticate() | response generated +0ms
  JsSIP:Transport send() +10ms
  JsSIP:Transport sending message:
  JsSIP:Transport
  JsSIP:Transport REGISTER sip:192.168.0.210:5060 SIP/2.0
  JsSIP:Transport Via: SIP/2.0/WS 192.168.0.210;branch=z9hG4bK4224730
  JsSIP:Transport Max-Forwards: 69
  JsSIP:Transport To: <sip:170@192.168.0.210:5060>
  JsSIP:Transport From: "170" <sip:170@192.168.0.210:5060>;tag=s9bkng5emf
  JsSIP:Transport Call-ID: 6ra4f68tegdmqllfoa7kja
  JsSIP:Transport CSeq: 2 REGISTER
  JsSIP:Transport Authorization: Digest algorithm=MD5, username="170", realm="asterisk", nonce="078cc3e4", uri="sip:192.168.0.210:5060", response="26576b92bf68c3d315d480b02d53783c"
  JsSIP:Transport Contact: <sip...@192.168.0.210>;+sip.ice;reg-id=1;+sip.instance="<urn:uuid:f3a58a94-b426-4a8d-8b15-9f7208a42f9b>";expires=600
  JsSIP:Transport Expires: 600
  JsSIP:Transport Allow: INVITE,ACK,CANCEL,BYE,UPDATE,MESSAGE,OPTIONS,REFER,INFO
  JsSIP:Transport Supported: path,gruu,outbound
  JsSIP:Transport User-Agent: JsSIP 3.0.21
  JsSIP:Transport Content-Length: 0
  JsSIP:Transport
  JsSIP:Transport
  JsSIP:Transport  +0ms
  jssip-node-websocket send() +11ms
  jssip-node-websocket WebSocket message received +1ms
  JsSIP:Transport received text message:
  JsSIP:Transport
  JsSIP:Transport SIP/2.0 403 Forbidden
  JsSIP:Transport Via: SIP/2.0/WS 192.168.0.210;branch=z9hG4bK4224730;received=192.168.0.3;rport=35832
  JsSIP:Transport From: "170" <sip:170@192.168.0.210:5060>;tag=s9bkng5emf
  JsSIP:Transport To: <sip:170@192.168.0.210:5060>;tag=as0f727a9b
  JsSIP:Transport Call-ID: 6ra4f68tegdmqllfoa7kja
  JsSIP:Transport CSeq: 2 REGISTER
  JsSIP:Transport Server: FPBX-13.0.192.19(13.12.1)
  JsSIP:Transport Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH, MESSAGE
  JsSIP:Transport Supported: replaces, timer
  JsSIP:Transport Content-Length: 0
  JsSIP:Transport
  JsSIP:Transport
  JsSIP:Transport  +3ms

{ response:
   IncomingResponse {
     data: 'SIP/2.0 403 Forbidden\r\nVia: SIP/2.0/WS 192.168.0.210;branch=z9hG4bK4224730;received=192.168.0.3;rport=35832\r\nFrom: "170" <sip:170@192.168.0.210:5060>;tag=s9bkng5emf\r\nTo: <sip:170@192.168.0.210:5060>;tag=as0f727a9b\r\nCall-ID: 6ra4f68tegdmqllfoa7kja\r\nCSeq: 2 REGISTER\r\nServer: FPBX-13.0.192.19(13.12.1)\r\nAllow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH, MESSAGE\r\nSupported:replaces, timer\r\nContent-Length: 0\r\n\r\n',
     headers:
      { Via: [Array],
        From: [Array],
        To: [Array],
        'Call-ID': [Array],
        CSeq: [Array],
        Server: [Array],
        Allow: [Array],
        Supported: [Array],
        'Content-Length': [Array] },
     method: 'REGISTER',
     via:
      { protocol: 'SIP',
        transport: 'WS',
        host_type: 'IPv4',
        host: '192.168.0.210',
        branch: 'z9hG4bK4224730',
        received: '192.168.0.3' },
     via_branch: 'z9hG4bK4224730',
     call_id: '6ra4f68tegdmqllfoa7kja',
     cseq: 2,
     from: NameAddrHeader { _uri: [Object], _parameters: [Object], _display_name: '170' },
     from_tag: 's9bkng5emf',
     to:
      NameAddrHeader {
        _uri: [Object],
        _parameters: [Object],
        _display_name: undefined },
     to_tag: 'as0f727a9b',
     body: '',
     sdp: null,
     status_code: 403,
     reason_phrase: 'Forbidden' },
  cause: 'Rejected' }
4

2 回答 2

2

正如预期的那样,注册过程遵循RFC3261中指定的过程,也就是说,第一个 REGISTER 由一个 401 错误响应来回答,该响应导致第二个 REGISTER 带有授权信息。在这种情况下,服务器会拒绝这些数据。

170 (REGISTER) ---------------------> Asterisk
170 <----------(401 - Not authorized) Asterisk
170 (REGISTER with Auth info) ------> Asterisk
170 <----------------(407 - Rejected) Asterisk

因此,星号拒绝注册,因为它不喜欢第二条 REGISTER 消息。

Authorization: Digest algorithm=MD5, username="170", realm="asterisk", nonce="078cc3e4", uri="sip:192.168.0.210:5060", response="26576b92bf68c3d315d480b02d53783c"

好吧,领域“星号”与 jssip 中配置的不同,它不遵循 RFC 中指定的内容:

将对接收到的请求进行身份验证的用户代理或代理服务器的操作员必须遵守以下准则来为其服务器创建领域字符串:

  • 领域字符串必须是全局唯一的。建议领域字符串包含主机名或域名,遵循 RFC 2617 [17] 第 3.2.1 节中的建议。

  • 领域字符串应该呈现一个人类可读的标识符,可以呈现给用户。

因此,您应该配置 sip.conf 以在星号中定义领域字符串以遵循上述规则。无论如何,请注意,即使 jssip 配置了不同的“领域”,在第二个 REGISTER 中,它也会使用第一个响应中的字段。所以,我不认为这是问题所在。

另一件事是第二个 REGISTER 中的 uri="sip:192.168.0.210:5060" 不包括用户名。如果它遵循下一个示例,取自“sip:170:192.168.0.210:5060”

Authorization: Digest username="bob",..., uri="sip:bob@biloxi.com",..."

我不清楚为什么 uri 不包含 jssip.conf 中指定的用户名。我会从配置中删除“authorization_user”,因为它是一个可选参数和测试。

于 2017-11-18T11:19:50.530 回答
0

禁用 chan_sip(设置 > 高级设置 - 拨号计划和操作 - SIP 通道驱动程序=pjsip)。然后它起作用了!

于 2020-08-17T22:22:54.827 回答