GnuTLS
GnuTLS (ang. GNU Transport Layer Security Library) jest wolnym oprogramowaniem implementującym protokoły TLS i SSL. Biblioteka umożliwia szyfrowane połączenia w aplikacjach internetowych, pocztowych oraz w systemach komunikacji sieciowej. Projekt jest częścią projektu GNU i jest rozpowszechniany na licencji LGPL (Lesser General Public License).
Historia
Rozwój GnuTLS rozpoczął się w 2000 roku jako odpowiedź na rosnące zapotrzebowanie na otwartą i wolną alternatywę dla OpenSSL, które w tamtym okresie było objęte licencją OpenSSL License o niejasnych warunkach kompatybilności z GPL. Pierwsza stabilna wersja 1.0.0 została wydana w 2000 roku. Od tego czasu biblioteka jest systematycznie rozwijana, a istotne kamienie milowe obejmują wprowadzenie wsparcia dla protokołu DTLS (2004), obsługi krzywych eliptycznych (2009) oraz pełnego wsparcia dla TLS 1.3 (2018).
Podstawowe funkcje
- Implementacja protokołów TLS 1.0, TLS 1.1, TLS 1.2 i TLS 1.3.
- Wsparcie dla protokołu DTLS (TLS ponad UDP).
- Obsługa szyfrów symetrycznych (AES, Camellia, ChaCha20) oraz asymetrycznych (RSA, DSA, ECDSA).
- Wbudowane mechanizmy weryfikacji certyfikatów X.509 oraz CRL.
- Możliwość pracy w trybie client i server w aplikacjach napisanych w C oraz językach posiadających bindingi (Python, Perl, Java).
- Obsługa PKCS#11 i TPM do zarządzania kluczami w sprzętowych modułach bezpieczeństwa.
Architektura
GnuTLS składa się z kilku warstw:
- Warstwa niskopoziomowa – bezpośrednie wywołania kryptograficzne oparte na bibliotece GnuPG oraz libtasn1 do obsługi ASN.1.
- Warstwa protokołowa – implementacja logiki TLS/DTLS, zarządzanie sesjami, renegocjacjami i rozszerzeniami.
- Warstwa API – interfejs programistyczny udostępniany aplikacjom w postaci funkcji
gnutls_*(), które ukrywają szczegóły protokołu.
Zastosowania
GnuTLS jest wykorzystywany w szerokim spektrum projektów:
- Serwery pocztowe: Postfix, Dovecot.
- Klienci FTP/HTTP: cURL, Wget.
- Systemy komunikacji: OpenVPN (w trybie legacy), Mumble.
- Środowiska desktopowe: GDM (GNOME Display Manager) do zabezpieczonych połączeń z X‑serwerem.
- Systemy wbudowane: dystrybucje Linux dla urządzeń IoT.
Porównanie z innymi bibliotekami
Najczęściej porównuje się GnuTLS z OpenSSL oraz mbedTLS. Główne różnice obejmują:
| Cechy | GnuTLS | OpenSSL | mbedTLS |
|---|---|---|---|
| Licencja | LGPL | Apache 2.0 / OpenSSL License | Apache 2.0 |
| Wsparcie protokołów | TLS 1.0‑1.3, DTLS 1.0‑1.2 | TLS 1.0‑1.3, DTLS 1.0‑1.2 | TLS 1.0‑1.3, DTLS 1.2 |
| Rozmiar kodu | Średni (~1 MB) | Duży (kilka MB) | Mały (kilkaset kB) |
| Obsługa języków | C, bindingi do Pythona, Perla, Javy, itd. | C, bindingi do wielu języków | C, bindingi ograniczone |
Rozwój i wsparcie
Projekt jest prowadzony przez społeczność wolnego oprogramowania oraz kilka firm specjalizujących się w bezpieczeństwie. Główne repozytorium znajduje się w Git i jest dostępne pod adresem git://git.gnutls.org/gnutls.git. Wydania stabilne pojawiają się co 6‑12 miesięcy, a pomiędzy nimi dostępne są wersje beta i rc.
Licencja
GnuTLS jest dystrybuowany na warunkach LGPL‑2.1+, co umożliwia jego użycie zarówno w projektach otwarto‑źródłowych, jak i komercyjnych, pod warunkiem zachowania odpowiednich informacji o licencji.