Главная
Главная Руководства Asterisk › FreeBSD. Шифрование SIP трафика в Asterisk.



Автор:

Статья опубликована: 2018-03-18 18:28:25
Последние правки: 2018-05-08 21:06:02

FreeBSD. Включаем шифрование траффика в Asterisk.

  • Исходные данные
    # uname -sr
    FreeBSD 11.1-RELEASE-p8
    # pkg info | grep asterisk
    asterisk13-13.20.0             Open Source PBX and telephony toolkit
    

  • Конфигурация порта
    Опция, которая должна быть установлена при компиляции порта:
    # cd /usr/ports/net/asterisk13
    # make config
    ...
    [x] SRTP              SecureRTP support
    ...
    
    Если asterisk был собран без этой опции, то его необходимо пересобрать.
    # cd /usr/ports/net/asterisk13
    # make install
    
    Если пересборка не нужна, то нам в любом случае понадобятся исходные файлы, поэтому выполняем:
    # cd /usr/ports/net/asterisk13
    # make
    

  • Создаем сертификаты
    Самоподписной сертификат для сервера. Редактируем файл /usr/ports/net/asterisk13/work/asterisk-13.20.0/contrib/scripts/ast_tls_cert. Меняем везде 365 дней на 3650 (10 лет).
    # cd /usr/ports/net/asterisk13/work/asterisk-13.20.0/contrib/scripts
    # ./ast_tls_cert -C pbx.company.ru -O "My Company" -d /usr/local/etc/asterisk/keys
    
    -C - имя хоста или ip адрес, нужно прописать в /etc/hosts
    -O - имя организации
    -d - директория, куда запишутся сертификаты (будет создана при генерации)
    В процессе установки необходимо придумать (один раз) и ввести несколько раз пароль


  • Настройка asterisk
    Файл /usr/local/etc/asterisk/sip.conf.
    Добавляем (или меняем) в блоке [general]
    tlsenable = yes
    tlsbindaddr = 0.0.0.0:5061
    tlscertfile = /usr/local/etc/asterisk/keys/asterisk.pem
    tlscafile = /usr/local/etc/asterisk/keys/ca.crt
    tlscipher = ALL
    tlsclientmethod = tlsv1
    tlsdontverifyserver = yes
    
    Перезагружаем и проверяем:
    *CLI> sip reload
    
    openssl s_client -connect localhost:5061
    CONNECTED(00000003)
    depth=1 CN = Asterisk Private CA, O = Home Inc.
    verify error:num=19:self signed certificate in certificate chain
    ---
    Certificate chain
     0 s:/CN=localhost/O=My Company
       i:/CN=Asterisk Private CA/O=My Company
     1 s:/CN=Asterisk Private CA/O=My Company
       i:/CN=Asterisk Private CA/O=My Company
    ---
    Server certificate
    -----BEGIN CERTIFICATE-----
    MIIDUzCCATsCAQEwDQYJKoZIhvcNAQELBQAwMjEcMBoGA1UEAwwTQXN0ZXJpc2sg
    UHJpdmF0ZSBDQTESMBAGA1UECgwJSG9tZSBJbmMuMB4XDTE4MDMxODE2MDcwMVoX
    DTI4MDMxNTE2MDcwMVowMTEbMBkGA1UEAwwSdG9reW8ubmV0LWFycmF5LnJ1MRIw
    EAYDVQQKDAlIb21lIEluYy4wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANiA
    Mcmarq3mZ45nzhbkxKRNx8DZNe2C1uw0Vwc1Ow77a3akg8atzOdxSbbV+ODEqbfF
    v3DhfKDMpGWJWePN6YVGUkcTqLNfMh0xO34eLy0vheFwCMUDFMJFlYZpw6vOrDJO
    g+qMVH2CpRBpl1A8uROiJg1vzwkSU7zlqHls7puJAgMBAAEwDQYJKoZIhvcNAQEL
    BQADggIBAJjKI0Toldzggc/YpztP83fxyE1Wa9rGvMuDBhj05X2sL2caPKglKRCy
    VWhMC78qIHDrvThy5XPmcop65tBdbLErynVqEekMndcnBCDSN22FIEwhv3pubSaK
    VcPyuwMt02AXnZwMZOsRFTkDNttQbr+WICVcpC4taaEDChdh9vvjJLZZmUioBBeo
    8e1OGY0M8AJ1lhNLk4Qd41UhJiBBCD58Vb274IkDQGZ1kP4VyuCM5pOeYKc9PeSO
    QCGjMebf0SavcAcEiAGZCmvT9A4E0usaa0LAshA1sUM+taKTRlScKEkmNIIzUIQf
    sbQ/436Yx8YIU/cEbMdh24WZTrO/YW4NUGkzAMci3SqN1mS1X89Q4UrQ2gEBOFbM
    Hf4qZpdF3vVYwF5YURzfYDI7kE8SpjZqbWTYMzz/mmKXr8bTvyJM+MRg4rqTrNlx
    0OUPg58X4T1bHVJK+aRxNJivYC9QV/L5axqqqE3N4mm76xT2tckdaUSqJ4aKzw2K
    S0s6fzJHAlZDGPvBa8BNdfOle6MOEKjKvBWHd+jE7F8GuuLz8WPGZ14tpaGjJhWA
    nwwB0wVzaJ8Wskxhll2aENe21c6A6Q1eF/gxYI3kIIIdkgKEyRDji0exarwOCWdl
    O5ueWkPsopub6rU+20mnRPFPeKRRrWN0Z2z5wsY9ecG64hgczN8u
    -----END CERTIFICATE-----
    subject=/CN=localhost/O=My Company
    issuer=/CN=Asterisk Private CA/O=My Company
    ---
    No client certificate CA names sent
    Peer signing digest: SHA512
    Server Temp Key: ECDH, P-256, 256 bits
    ---
    SSL handshake has read 2641 bytes and written 433 bytes
    ---
    New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
    Server public key is 1024 bit
    Secure Renegotiation IS supported
    Compression: NONE
    Expansion: NONE
    No ALPN negotiated
    SSL-Session:
    ....
    ---
    closed
    

  • Настройка клиента (на примере номера 100)
    Генерируем ключи для клиента:
    # cd /usr/ports/net/asterisk13/work/asterisk-13.20.0/contrib/scripts
    # ./ast_tls_cert -m client -c /usr/local/etc/asterisk/keys/ca.crt -k /usr/local/etc/asterisk/keys/ca.key -C 100.company.ru -O "My Company" -d /usr/local/etc/asterisk/keys -o 100
    
    Понадобится пароль, который использовался при генерации ключей для сервера.
    -с - путь к сертификату CA
    -k - путь к ключу CA
    -С - DNS-имя или ip адрес подключаемого клиента, я вводил от балды
    -O - имя организации
    -d - путь для генерации ключей
    -o - имя генерируемых ключей (должно совпадать с номером пира)

    Файл /usr/local/etc/asterisk/sip.conf. Для включения шифрования добавляем в блок клиента:
    [100]
    transport=tls
    encryption=yes
    
    Перезагружаем из консоли:
    *CLI> sip reload
    
    Настройки на клиентском устройстве необходимо производить в соответствии с инструкцией к нему.


  • Проверка статуса шифрования во время звонка в консоли Asterisk
    *CLI>  sip show channels
    ....
    XXX.XXX.XXX.XXX    100              0899059f463f009  (alaw)           No       Tx: ACK                    100
    ....
    *CLI> sip show channel 0899059f463f009
    
      * SIP Call
    ...
      Transport:              TLS
      Media:                  SRTP
    
    Для Transport должно быть указано TLS, а для Media - SRTP