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

Asterisk+GNS3环境SRTP加密失效求助:TLS正常媒体未加密

排查Asterisk SRTP强制加密不生效的问题

结合你描述的现象(TLS信令正常,但SRTP媒体加密未生效,仍能发起UDP未加密通话),我整理了几个关键的排查方向和解决步骤:

1. 先确认软电话的核心配置是否正确

你提到软电话配置了加密,但很可能是以下两个点没设置到位:

  • 传输方式与端口:确保Blink账号的传输类型选的是TLS,端口设置为Asterisk的TLS端口(默认5061),而不是UDP 5060。如果软电话用UDP连接信令,即使你在endpoint里配置了SRTP,媒体也会默认走UDP未加密。
  • 媒体加密强制开关:在Blink的媒体设置里,把SRTP加密从“自动”或“可选”改成**“强制启用”**。很多软电话默认是协商模式,如果加密协商失败会 fallback 到未加密,这就会出现你遇到的情况。

2. 验证Asterisk的Transport配置

你的endpoint指定了transport=0.0.0.0-tls,但要确认这个Transport的配置是否正确(位于pjsip.transports.conf):

[0.0.0.0-tls]
type=transport
protocol=tls
bind=0.0.0.0:5061
cert_file=/path/to/your/certificate.pem
priv_key_file=/path/to/your/privatekey.pem
ca_list_file=/path/to/your/ca.pem

重点检查:

  • protocol必须是tls,不能是udp或tcp
  • 绑定端口是5061(Asterisk默认TLS端口)
  • 证书文件路径正确且权限正常

另外,确保这个endpoint只关联了这个TLS Transport,没有同时关联UDP Transport(否则软电话可能会优先选择UDP连接)。

3. 检查拨号计划是否有配置覆盖

打开extensions.conf,查看from-internal上下文的拨号规则,有没有设置PJSIP_MEDIA_ENCRYPTION变量强制关闭加密:

exten => _XXX,1,Set(PJSIP_MEDIA_ENCRYPTION=none)

如果有这条配置,会直接覆盖你在endpoint里设置的media_encryption=sdes,导致媒体不加密。

4. 启用PJSIP日志排查SDP协商过程

这是最直接的排查方法,能看到加密协商的细节:

  1. 登录Asterisk命令行,执行:
    asterisk -rx "pjsip set logger on"
    
  2. 用软电话发起通话,然后查看日志(可以导出到文件:asterisk -rx "pjsip set logger on" > /tmp/sip_log.txt)
  3. 重点看INVITE和200 OK消息里的SDP部分:
    • 正常的SRTP协商会包含a=crypto:字段,比如:
      a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:abcdef1234567890abcdef1234567890|2^20|1:32
      
    • 如果软电话没发送这个字段,说明软电话的加密配置没开;如果Asterisk没回复这个字段,说明SRTP模块没正常工作或者endpoint配置有误。

5. 确认SRTP模块的实际使用状态

你已经确认模块已加载,但可以进一步检查是否有通话在使用它:

asterisk -rx "module show like srtp"

输出里的Use Count如果是0,说明当前没有通话使用SRTP,大概率是协商失败导致的。

最可能的根因总结

结合你的情况,软电话未强制使用TLS信令+媒体加密可选是最常见的原因。先把软电话的传输改成TLS并强制SRTP,再用日志验证协商过程,应该就能解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:32:07