Создание TLS соединения на Asterisk

SIP

/etc/asterisk/sip.conf:

[general]
transport=tls
encryption=yes
tlsenable=yes
externip=1.1.1.1
tlsbindaddr=0.0.0.0:5061
tlscertfile=/path/certificate.pem
tlscafile=/path/cabundle.pem
tlsprivatekey=/path/private.pem
tlscipher=ALL
tlsclientmethod=tlsv1
tlsdontverifyserver=yes
nat=yes

/etc/asterisk/users.conf:

[tmp-tls](!)
cid_number= 
vmsecret=no
nat=yes
dtmfmode=rfc2833
callgroup=
pickupgroup=1
callwaiting=no
hasmanager=yes
hasvoicemail=no
hasagent=no
mailbox=no
hassip=yes
registersip=no
transfer=yes
host=dynamic
threewaycalling=yes
insecure=port
call-limit=100
compensate=yes
srtpcapable=no
qualify=yes
remoteregister=yes
transport=tls
encryption=yes

[200](tmp-tls)
username=200
secret=123456
context=from-internal

Открыть порт:

# firewall-cmd --zone=public --add-port=5061/tcp --permanent
# firewall-cmd --zone=public --add-port=10000-20000/tcp --permanent
# firewall-cmd --zone=public --add-port=10000-20000/udp --permanent
# firewall-cmd --reload

Перезапустить Asterisk:

# systemctl restart asterisk

Проверить сертификат на порту:

# openssl s_client -connect 127.0.0.1:5061

Файлы с конфигурацией

extensions.conf

[general]
static = yes
writeprotect = no
autofallthrough = yes
clearglobalvars = yes
priorityjumping = no
extenpatternmatchnew = no

[from-internal]
exten => _2XX,1,NoOp(from-internal)
	same => n,Dial(SIP/${EXTEN}, 60)
	same => n,Hangup()
exten => _[78]9XXXXXXXXX,1,NoOp(from-internal)
	same => n,Dial(SIP/trunk-9123456789/${EXTEN}, 90,tT)
	same => n,Hangup()

[from-external-9123456789]
exten => _.,1,NoOp(from-external-9123456789)
	same => n,Dial(SIP/200, 60)
	same => n,Hangup()

sip.conf

[general]
useragent=TestAts
transport=tls
encryption=yes
tlsenable=yes
externip=1.2.3.4
tlsbindaddr=0.0.0.0:5061
tlscertfile=/path/certificate.pem
tlscafile=/path/cabundle.pem
tlsprivatekey=/path/private.pem
tlscipher=ALL
tlsclientmethod=tlsv1
tlsdontverifyserver=yes
localnet=192.168.0.0/24
language=ru
allowguest=no
match_auth_username=yes
maxexpiry=3600
dtmfmode=rfc2833
minexpiry=60
defaultexpiry=120
registerattempts=0
registertimeout=20
videosupport=no
disallow=all
allow=ulaw,alaw,gsm,h261,h263,h263p,h264
notifyringing=yes
notifyhold=yes
tos=0x68
permit = 0.0.0.0/0.0.0.0
allowoverlap=yes
allowsubscribe=yes
allowtransfers=yes
alwaysauthreject=yes
subscribecontext=default
autodomain=no
callevents=yes
compactheaders=no
dumphistory=yes
g726nonstandard=no
ignoreregexpire=no
pedantic=no
promiscredir=no
recordhistory=no
relaxdtmf=no
rtcachefriends=no
rtptimeout=1800
rtsavesysname=no
rtupdate=no
sendrpid=no
sipdebug=no
srvlookup=no
trustrpid=no
usereqphone=no
progressinband=no
maxcallbitrate=384
tos_sip=cs3
tos_audio=ef
tos_video=af41
cos_sip=3
cos_audio=5
cos_video=4
constantssrc=yes
nat=yes
session-timers=accept
session-expires=1800
session-minse=90
session-refresher=uas

register => 9123456789:password@ip.beeline.ru/trunk-9123456789

users.conf

ЧТО БЫЛО ПОСЛЕ УСТАНОВКИ
...

[tmp-tls](!)
cid_number= 
vmsecret=no
nat=yes
dtmfmode=rfc2833
callgroup=
pickupgroup=1
callwaiting=no
hasmanager=yes
hasvoicemail=no
hasagent=no
mailbox=no
hassip=yes
registersip=no
transfer=yes
host=dynamic
threewaycalling=yes
insecure=port
call-limit=100
compensate=yes
srtpcapable=no
qualify=yes
remoteregister=yes
transport=tls
encryption=yes

[200](tmp-tls)
username=200
secret=123456
context=from-internal

[201](tmp-tls)
username=201
secret=123456
context=from-internal

[202](tmp-tls)
username=202
secret=123456
context=from-internal

[203](tmp-tls)
username=203
secret=123456
context=from-internal

[204](tmp-tls)
username=204
secret=123456
context=from-internal

[205](tmp-tls)
username=205
secret=123456
context=from-internal

[trunk-external](!)
type = peer
displayhost = ip.beeline.ru
port = 5060
fromdomain = ip.beeline.ru
enableserver = no
host = ip.beeline.ru
disallow = all
allow = alaw,ulaw,gsm
hasiax = no
registeriax = no
hassip = yes
registersip = no
hasexten = no
call-limit = 256
trunkstyle = voip
srtpcapable = no
remoteregister = yes
insecure = port,invite
transport = udp
dtmfmode = rfc2833
qualify = yes
nat = force_rport,comedia

[trunk-9123456789](trunk-external)
username=9123456789
secret=password
context=from-external-9123456789
fullname = 9123456789
trunkname = 9123456789
authuser = 9123456789@ip.beeline.ru
ysauth = 9123456789
contact = 9123456789
callerid=trunk-9123456789

 

PJSIP

Скрипт создание сертификатов находится в пакете установки к примеру:

# cd asterisk-16.16.0/contrib/scripts

Создание директории для сертификатов:

# mkdir /etc/asterisk/keys

Создание само-подписанных сертификатов и ключей шифрования:

# ./ast_tls_cert -C pbx.company.ru -O "My Company" -d /etc/asterisk/keys

C — имя хоста (dns имя) или ip адрес
O — имя нашей организации
d — директория генерация сертификатов

 

Генерация клиентского сертификата:

# ./ast_tls_cert -m client -c /etc/asterisk/keys/ca.crt -k /etc/asterisk/keys/ca.key -C phone1.company.ru -O "My Company" -d /etc/asterisk/keys -o 100

m client — опция которая указывает на создание клиентского сертификата, не серверного
с — путь к сертификату CA
k — путь к ключу CA
С — DNS-имя или ipадрес подключаемого клиента
O — имя организации
d — путь для генерации ключей
o — имя генерируемых ключей (должно совпадать с номером пира)

 

/etc/asterisk/pjsip.conf добавить:

[transport-tls]
type=transport
protocol=tls
bind=0.0.0.0:5061
cert_file=/etc/asterisk/keys/asterisk.crt
priv_key_file=/etc/asterisk/keys/asterisk.key
method=sslv23

 

/etc/asterisk/sip.conf:

[general]
tlsenable=yes
tlsbindaddr=0.0.0.0:5061
tlscertfile=/etc/asterisk/keys/asterisk.pem
tlscafile=/etc/asterisk/keys/ca.crt
tlscipher=ALL
tlsclientmethod=tlsv1
tlsdontverifyserver=yes

 

Перезапустить Asterisk:

# systemctl restart asterisk

 

Проверить сертификат на порту:

# openssl s_client -connect 127.0.0.1:5061