Bezpieczeństwo Asteriska: rejestracje TLS z użyciem certyfikatu SSL z podpisem własnym
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.
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.
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
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.
W razie potrzeby możesz to też zrobić za pomocą:
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:
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:
W sekcji [general]
wystarczy uruchomić TLS, dodać obsługę transportu oraz zdefiniować plik z certyfikatem.
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ę.
Żeby sprawdzić czy zmiany działają jak trzeba wystarczy w konsoli wykonać 'sip show settings
' lub po prostu:
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:
bindaddr
i/lub tlsbindaddr
, żeby nie występował konflikt portów.Następnie dodajmy kontekst, który będzie odpowiedzialny za transport TLS.
Przeładowanie modułu (z poziomu konsoli Asteriska) sprawi, że zobaczymy nową metodę transportu.
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:
- asterisk-security-tls-registration-phone-udp-example.pcap
- asterisk-security-tls-registration-phone-tls-example.pcap
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' ….