【opensips】使用tls協(xié)議對(duì)接asterisk的sip trunk

對(duì)接組網(wǎng)圖

對(duì)接組網(wǎng)圖

SIP呼叫從asterisk到opensips,對(duì)于opensips來(lái)說(shuō),是“呼入”場(chǎng)景。

證書(shū)

申請(qǐng)

證書(shū)的申請(qǐng)不是本文討論的范圍
申請(qǐng)完證書(shū)一般會(huì)有證書(shū)文件xxx.cert或者xxx.pem,以及私鑰文件private.pem

部署

一般服務(wù)器持有證書(shū),所以需要證書(shū)放在opensips上。

具體的位置在opensips.cfg中指定
如下:

loadmodule "proto_tls.so"
loadmodule "tls_mgm.so"
modparam("tls_mgm", "certificate", "/etc/opensips/certs/cert.pem")
modparam("tls_mgm", "private_key", "/etc/opensips/certs/priv.pem")
modparam("tls_mgm", "tls_method", "tlsv1_2")
modparam("tls_mgm", "verify_cert", "0")
modparam("tls_mgm", "require_cert", "0")

注意,如果這兩個(gè)文件的位置存在錯(cuò)誤,opensips啟動(dòng)時(shí)會(huì)報(bào)錯(cuò)。

啟動(dòng)好opensips后,我們來(lái)首先做一下tls的握手測(cè)試。

測(cè)試tls服務(wù)

如果你本機(jī)安裝過(guò)openssl,可以使用openssl來(lái)測(cè)試服務(wù)器的tls是否可用。

命令如下:
connect后填寫(xiě)服務(wù)器域名和端口地址
servername為服務(wù)器域名,這個(gè)必須與證書(shū)一致。
CAfile是本地根證書(shū)文件,用于校驗(yàn)服務(wù)器證書(shū)的,如果不指定的話,會(huì)看到
unable to get local issuer certificate錯(cuò)誤提示

openssl s_client -crlf -connect example.mydomain.com:5061 -servername example.mydomain.com -CAfile cacert.pem

如果tls握手正常,正確的返回樣例如下,


verification

Asterrisk的tls配置

本文使用的asterisk版本 16.15.1,配置使用sip_chan

配置sip.conf

tlsenable=yes
;tlsbindaddr=0.0.0.0 ;作為客戶端時(shí),不需要綁定端口監(jiān)聽(tīng)
;tlscertfile=/etc/asterisk/cert.pem ;作為客戶端時(shí),不需要指定證書(shū)
tlsprivatekey=/etc/asterisk/private.pem ;私鑰時(shí)必須的!
tlsdontverifyserver=no  ; 作為客戶端時(shí),可以選擇yes不做驗(yàn)證
;tlsclientmethod=tlsv1  ; 作為客戶端時(shí),不用指定方法;不指定時(shí),客戶端是會(huì)和服務(wù)端會(huì)協(xié)商的,除非強(qiáng)制要求某一個(gè)版本的tls
 

[op-callin]
type=peer
context=from-sip
host=example.mydomain.com
port=5060
;encryption=yes

[op-callin-tls]
type=peer
context=from-sip
host=example.mydomain.com
port=5061
transport=tls
;encryption=yes

可能的錯(cuò)誤

Asterisk發(fā)起呼叫時(shí)報(bào)錯(cuò)

did not verify: unable to get local issuer certificate

這是因?yàn)閍sterisk作為客戶端與opensips通信時(shí),獲取到服務(wù)器證書(shū)后,無(wú)法找到本地簽發(fā)證書(shū)做驗(yàn)證。
一般有兩種方式:

  1. 去掉驗(yàn)證動(dòng)作
    tlsdontverifyserver=yes
  2. 增加本地查詢CA證書(shū)
    asterisk安裝完成后默認(rèn)時(shí)沒(méi)有這個(gè)證書(shū)的,不過(guò)可以生成一個(gè)
./ast_tls_cert -C pbx.mycompany.com -O "My Company" -d /etc/asterisk/keys
  • The "-C" option
    定義證書(shū)的域名
  • The "-O" option
    定義公司名稱
  • The "-d" option
    定義生成證書(shū)的路徑

生成后把這兩個(gè)配置更新一下,

tlscertfile=/etc/asterisk/keys/asterisk.pem
tlscafile=/etc/asterisk/keys/ca.crt

sip reload就好了

驗(yàn)證呼叫

配置路由

exten=>2,1,Log(NOTICE, Inbound calling  ${CALLERID(all)})
exten=>2,2,Dial(SIP/op-callin-tls/123456,20)

配置一條路由,使它能夠路由到opensips去

查看日志

asterisk日志里沒(méi)有錯(cuò)誤告警
opensips日志里有connection成功,樣例如下

INFO:core:probe_max_sock_buff: using snd buffer of 416 kb
INFO:core:init_sock_keepalive: TCP keepalive enabled on socket 69
INFO:proto_tls:tls_accept: New TLS connection from 1.2.3.4:5061 accepted
INFO:proto_tls:tls_accept: Client did not present a TLS certificate
INFO:proto_tls:tls_dump_cert_info: tls_accept: local TLS server certificate subject: /CN=xxxx, issuer: /C=US/O=Let's Encrypt/CN=R3
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 目錄 SIP SIP協(xié)議簡(jiǎn)介 基本概念介紹 SIP的功能和特點(diǎn) SIP消息 SIP工作原理簡(jiǎn)介 SIP支持的傳輸協(xié)...
    阿七筆記閱讀 3,180評(píng)論 0 2
  • 夜鶯2517閱讀 128,158評(píng)論 1 9
  • 版本:ios 1.2.1 亮點(diǎn): 1.app角標(biāo)可以實(shí)時(shí)更新天氣溫度或選擇空氣質(zhì)量,建議處女座就不要選了,不然老想...
    我就是沉沉閱讀 7,451評(píng)論 1 6
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月,有人笑有人哭,有人歡樂(lè)有人憂愁,有人驚喜有人失落,有的覺(jué)得收獲滿滿有...
    陌忘宇閱讀 8,839評(píng)論 28 54
  • 兔子雖然是枚小碩 但學(xué)校的碩士四人寢不夠 就被分到了博士樓里 兩人一間 在學(xué)校的最西邊 靠山 兔子的室友身體不好 ...
    待業(yè)的兔子閱讀 2,771評(píng)論 2 9

友情鏈接更多精彩內(nèi)容