Bezpieczeństwo Asteriska: rejestracje TLS z użyciem certyfikatu SSL z podpisem własnym

For privacy reasons YouTube needs your permission to be loaded. For more details, please see our Polityka Prywatności.
I Accept

1) Wygenerowanie certyfikatów

Najprostszym sposobem wygenerowania certyfikatów jest użycie gotowego skryptu zawartego w instalatorze oprogramowania.

Jeśli go nie posiadasz, możesz pobrać oprogramowanie z serwerów Asteriska. Może to być dowolna wersja oprogramowania. W naszym przypadku pobierzemy Asteriska 16 do katalogu /usr/src/, ale oczywiście może to być dowolne inne miejsce na serwerze.

Copy to Clipboard
Jeśli chciałbyś uruchomić centralę jako inny użytkownik, sprawdź ten post.

Utwórzmy też katalog, w którym będziemy przechowywali nasze klucze. Poniżej znajdziesz proponowany katalog, ale oczywiście możesz wybrać dowolny inny.

Copy to Clipboard

Następnie wygenerujmy nasze klucze korzystając z gotowego skryptu. Może przy tym zdefiniować kilka zmiennych:

  • opcja '-C' służy do określenia naszego hosta – nazwy DNS lub naszego adresu IP
  • opcja '-O' określa naszą nazwę organizacyjną
  • opcja '-d' określa miejsce, gdzie zapisać klucze
Copy to Clipboard

Zostaniemy poproszeni o ustalenie (oraz powtórzenie) hasła dla głównego klucza 'ca.key'. Utworzy to lokalny organ certyfikacji (z ang. certificate authority). Następnie tego samego hasła użyjemy do stworzenia klucza 'asterisk.key' oraz pliku 'asterisk.pem', który jest kombinacją klucza i certyfikatu.

Łącznie hasło wprowadzimy 4 razy.

Dobra wiadomość jest taka, że klucze automatycznie zostały dodane tylko i wyłącznie z uprawnieniami do odczytu.

Copy to Clipboard

W razie potrzeby możesz to też zrobić za pomocą:

Copy to Clipboard

Na tym etapie warto się jednak upewnić, że użytkownik, na którym działa usługa Asteriska ma dostęp do plików kluczy. W przeciwnym wypadku, przeładowanie konfiguracji może wyrzucić błędy, podobne do tych poniżej:

 Reloading SIP
== Using SIP CoS mark 4
[Feb 12 08:50:48] ERROR[1068]: tcptls.c:478 __ssl_setup: TLS/SSL error loading cert file. </etc/asterisk/keys/asterisk.pem>
[Feb 12 08:50:48] ERROR[1068]: tcptls.c:126 write_openssl_error_to_log: 140543266764288:error:0200100D:system library:fopen:Permission denied:bss_file.c:402:fopen('/etc/asterisk/keys/asterisk.pem','r')
140543266764288:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:404:
140543266764288:error:140DC002:SSL routines:SSL_CTX_use_certificate_chain_file:system lib:ssl_rsa.c:701:

Na naszym przykładzie: jeśli nie stworzyliśmy plików, jako użytkownik 'asterisk', tylko jako 'root' to wystarczy zmienić właściciela poleceniem:

Copy to Clipboard

2) Konfiguracja kanału SIP

Całość konfiguracji przeprowadzimy w głównym pliku, czyli sip.conf.

Do poprawnego uruchomienia komunikacji poprzez TLS dla lokalnych urządzeń wystarczą tylko dwie dodatkowe linijki kodu oraz poprawka w trzeciej. Edytujmy więc nasz plik:

Copy to Clipboard

W sekcji [general] wystarczy uruchomić TLS, dodać obsługę transportu oraz zdefiniować plik z certyfikatem.

Copy to Clipboard

Opcjonalnie możesz wykorzystać dodatkowe zmienne związane z konfiguracją TLS dla lokalnych kont SIP. Niektóre z nich to:

  • tlsbindaddr=0.0.0.0:5061 – możliwość zmiany adresu IP lub portu nasłuchiwania
  • tlscipher=ALL – wybór szyfrowania (dokumentacja: https://www.openssl.org/docs/manmaster/man1/openssl-ciphers.html)
  • tlsclientmethod=tlsv1 – wybór metody szyfrowania (dostępne to tlsv1, sslv3, sslv2)

Pozostałe opcje takie jak np. tlsdontverifyserver dotyczą sytuacji, w których nasze urządzenie działa jako klient TLS, a nie serwer.

Wracając jednak do tematu ….
Teraz wystarczy z poziomu konsoli przeładować konfigurację.

Copy to Clipboard

Żeby sprawdzić czy zmiany działają jak trzeba wystarczy w konsoli wykonać 'sip show settings' lub po prostu:

Copy to Clipboard

Widzimy też, że TLS domyślnie nasłuchuje na porcie 5061.

3) Konfiguracja kanału PJSIP

W tym wypadku konfigurację przeprowadzimy w pliku pjsip.conf. Otwórzmy go:

Copy to Clipboard
W przypadku korzystania zarówno z SIP oraz PJSIP należy odpowiednio ustawić zmienne bindaddr i/lub tlsbindaddr, żeby nie występował konflikt portów.

Następnie dodajmy kontekst, który będzie odpowiedzialny za transport TLS.

Copy to Clipboard

Przeładowanie modułu (z poziomu konsoli Asteriska) sprawi, że zobaczymy nową metodę transportu.

Copy to Clipboard

4) Wynik przechwycenia ruchu sieciowego (z plikami .pcap)

Jaki jest wynik końcowy uruchomienia TLS?

Po zalogowaniu urządzenia (w naszym przypadku Yealink) wykonanie na centrali 'sip show peer ....' (dla SIP) lub 'pjsip show contact ....' (dla PJSIP), pokarze że wykorzystujemy TLS podczas rejestracji.

Spróbujmy przechwycić ruch sieciowy. Poniżej przedstawimy wynik końcowy.

W pierwszym przypadku widzimy mnóstwo informacji dotyczących wymiany komunikatów z użyciem zwykłego UDP.

Przesiadka na TLS sprawia, że nie widać praktycznie nic.

Jeśli chcesz sprawdzić jak wyglądają te pliki, oto one:

I to wszystko. Czy było warto poświęcić te kilkanaście minut, żeby dodatkowo i bezpłatnie zabezpieczyć swoja centralę?

Moim zdaniem 'tak' ….