stunnel.pl - uniwersalny tunel protokołu TLS

NAZWA  SKÅADNIA  OPIS  OPCJE  PLIK KONFIGURACYJNY  OPCJE GLOBALNE  OPCJE USÅUG  ZWRACANA WARTOÅÄ  SIGNAÅY  PRZYKÅADY  NOTKI  OGRANICZENIA  TRYB INETD (tylko Unix)  CERTYFIKATY  LOSOWOÅÄ  PARAMETRY DH  PLIKI  BÅÄDY  ZOBACZ RÃWNIEÅ»  AUTOR 

NAZWA

stunnel − uniwersalny tunel protokoÅu TLS

SKÅADNIA

Unix:

stunnel [ PLIK ] | −fd N | −help | −version | −sockets | −options

WIN32:

stunnel [ [ −install | −uninstall | −start | −stop |
−reload | −reopen | −exit ] [−quiet] [ PLIK ] ] |
−help | −version | −sockets | −options

OPIS

Program stunnel zostaÅ zaprojektowany do opakowywania w protokóŠTLS poÅÄczeÅ pomiÄdzy zdalnymi klientami a lokalnymi lub zdalnymi serwerami. Przez serwer lokalny rozumiana jest aplikacja przeznaczona do uruchamiania przy pomocy inetd. Stunnel pozwala na proste zestawienie komunikacji serwerów nie posiadajÄcych funkcjonalnoÅci TLS poprzez bezpieczne kanaÅy TLS .

stunnel pozwala dodaÄ funkcjonalnoÅÄ TLS do powszechnie stosowanych demonów inetd, np. pop3 lub imap, do samodzielnych demonów, np. nntp, smtp lub http, a nawet tunelowaÄ ppp poprzez gniazda sieciowe bez zmian w kodzie źródÅowym.

OPCJE

PLIK

użyj podanego pliku konfiguracyjnego

−fd N (tylko Unix)

wczytaj konfiguracjÄ z podanego deskryptora pliku

−help

drukuj listÄ wspieranych opcji

−version

drukuj wersjÄ programu i domyÅlne wartoÅci parametrów

−sockets

drukuj domyÅlne opcje gniazd

−options

drukuj wspierane opcje TLS

−install (tylko Windows NT lub nowszy)

instaluj serwis NT

−uninstall (tylko Windows NT lub nowszy)

odinstaluj serwis NT

−start (tylko Windows NT lub nowszy)

uruchom serwis NT

−stop (tylko Windows NT lub nowszy)

zatrzymaj serwis NT

−reload (tylko Windows NT lub nowszy)

przeÅaduj plik konfiguracyjny uruchomionego serwisu NT

−reopen (tylko Windows NT lub nowszy)

otwórz ponownie log uruchomionego serwisu NT

−exit (tylko Win32)

zatrzymaj uruchomiony program

−quiet (tylko Win32)

nie wyÅwietlaj okienek z komunikatami

PLIK KONFIGURACYJNY

Linia w pliku konfiguracyjnym może byÄ:

pusta (ignorowana)

komentarzem rozpoczynajÄcym siÄ znakiem ’;’ (ignorowana)

parÄ ’nazwa_opcji = wartoÅÄ_opcji’

tekstem ’[nazwa_usÅugi]’ wskazujÄcym poczÄtek definicji usÅugi

Parametr adres może byÄ:

numerem portu

oddzielonÄ Årednikiem parÄ adresu (IPv4, IPv6, lub nazwÄ domenowÄ) i numeru portu

ÅcieżkÄ do gniazda Unix (tylko Unix)

OPCJE GLOBALNE

chroot = KATALOG (tylko Unix)

katalog roboczego korzenia systemu plików

Opcja okreÅla katalog, w którym uwiÄziony zostanie proces programu stunnel tuż po jego inicjalizacji, a przed rozpoczÄciem odbierania poÅÄczeÅ. Åcieżki podane w opcjach CApath, CRLpath, pid oraz exec muszÄ byÄ umieszczone wewnÄtrz katalogu podanego w opcji chroot i okreÅlone wzglÄdem tego katalogu.

Niektóre funkcje systemu operacyjnego mogÄ wymagaÄ dodatkowych plików umieszczonych w katalogu podanego w parametrze chroot:

opóźnione rozwiniÄcie adresów DNS typowo wymaga /etc/nsswitch.conf i /etc/resolv.conf

lokalizacja strefy czasowej w logach wymaga pliku /etc/timezone

niektóre inne pliki mogÄ potrzebowaÄ plików urzÄdzeÅ, np. /dev/zero lub /dev/null

compression = deflate | zlib

wybór algorytmu kompresji przesyÅanych danych

domyÅlnie: bez kompresji

Algorytm deflate jest standardowÄ metodÄ kompresji zgodnie z RFC 1951.

debug = [ PODSYSTEM ].POZIOM

szczegóÅowoÅÄ logowania

Poziom logowania można okreÅliÄ przy pomocy jednej z nazw lub liczb: emerg (0), alert (1), crit (2), err (3), warning (4), notice (5), info (6) lub debug (7). Zapisywane sÄ komunikaty o poziomie niższym (numerycznie) lub równym podanemu. DomyÅlnym poziomem jest notice (5).

Jakkolwiek użycie debug = debug lub debug = 7 zapewnia najbardziej szczegóÅowe logi, ich zawartoÅÄ jest użyteczna jedynie dla programistów zajmujÄcych siÄ stunnelem. Użyj tego poziomu logowania jedynie jeÅli jesteÅ programistkÄ/programistÄ stunnela, albo przygotowujesz szczegóÅowe informacje celem przesÅania do wsparcia technicznego. W przeciwnym wypadku próba analizy zawartoÅci logów bÄdzie jedynie źródÅem dodatkowego zamieszania.

O ile nie wyspecyfikowano podsystemu użyty bÄdzie domyÅlny: daemon. Podsystemy nie sÄ wspierane przez platformÄ Win32.

WielkoÅÄ liter jest ignorowana zarówno dla poziomu jak podsystemu.

EGD = ÅCIEÅ»KA_DO_EGD (tylko Unix)

Åcieżka do gniazda programu Entropy Gathering Daemon

Opcja pozwala okreÅliÄ ÅcieżkÄ do gniazda programu Entropy Gathering Daemon używanego do zainicjalizowania generatora ciÄgów pseudolosowych biblioteki OpenSSL.

engine = auto | IDENTYFIKATOR_URZÄDZENIA

wybór silnika kryptograficznego

domyÅlnie: bez wykorzystania silników kryptograficznych

Sekcja PRZYKÅADY zawiera przykÅadowe konfiguracje wykorzystujÄce silniki kryptograficzne.

engineCtrl = KOMENDA[:PARAMETR]

konfiguracja silnika kryptograficznego

engineDefault = LISTA_ZADAÅ

lista zadaÅ OpenSSL oddelegowanych do bieżÄcego silnika

Parametrem jest lista oddzielonych przecinkami zadaÅ OpenSSL, które majÄ zostaÄ oddelegowane do bieżÄcego silnika kryptograficznego.

W zależnoÅci od konkretnego silnika dostÄpne mogÄ byÄ nastÄpujÄce zadania: ALL, RSA, DSA, ECDH, ECDSA, DH, RAND, CIPHERS, DIGESTS, PKEY, PKEY_CRYPTO, PKEY_ASN1.

fips = yes | no

tryb FIPS 140−2

Opcja pozwala wyÅÄczyÄ wejÅcie w tryb FIPS, jeÅli stunnel zostaÅ skompilowany ze wsparciem dla FIPS 140−2.

domyÅlnie: no (od wersji 5.00)

foreground = yes | quiet | no (tylko Unix)

tryb pierwszoplanowy

Użycie tej opcji powoduje, że stunnel nie przechodzi w tÅo.

Parametr yes powoduje dodatkowo, że komunikaty diagnostyczne logowane sÄ na standardowy strumieÅ bÅÄdów (stderr) oprócz wyjÅÄ zdefiniowanych przy pomocy opcji syslog i output.

iconActive = PLIK_Z_IKONKÄ (tylko GUI )

ikonka wyÅwietlana przy obecnoÅci aktywnych poÅÄczeÅ do usÅugi

W systemie Windows ikonka to plik .ico zawierajÄcy obrazek 16x16 pikseli.

iconError = PLIK_Z_IKONKÄ (tylko GUI )

ikonka wyÅwietlana, jeżeli nie zostaÅ zaÅadowany poprawny plik konfiguracyjny

W systemie Windows ikonka to plik .ico zawierajÄcy obrazek 16x16 pikseli.

iconIdle = PLIK_Z_IKONKÄ (tylko GUI )

ikonka wyÅwietlana przy braku aktywnych poÅÄczeÅ do usÅugi

W systemie Windows ikonka to plik .ico zawierajÄcy obrazek 16x16 pikseli.

log = append | overwrite

obsÅuga logów

Ta opcja pozwala okreÅliÄ, czy nowe logi w pliku (okreÅlonym w opcji output) bÄdÄ dodawane czy nadpisywane.

domyÅlnie: append

output = PLIK

plik, do którego dopisane zostanÄ logi

Użycie tej opcji powoduje dopisanie logów do podanego pliku.

Do kierowania komunikatów na standardowe wyjÅcie (na przykÅad po to, żeby zalogowaÄ je programem splogger z pakietu daemontools) można podaÄ jako parametr urzÄdzenie /dev/stdout.

pid = PLIK (tylko Unix)

poÅożenie pliku z numerem procesu

Jeżeli argument jest pusty, plik nie zostanie stworzony.

Jeżeli zdefiniowano katalog chroot, to Åcieżka do pid jest okreÅlona wzglÄdem tego katalogu.

RNDbytes = LICZBA_BAJTÃW

liczba bajtów do zainicjowania generatora pseudolosowego

RNDfile = PLIK

Åcieżka do pliku zawierajÄcego losowe dane

Biblioteka OpenSSL użyje danych z tego pliku do zainicjowania generatora pseudolosowego.

RNDoverwrite = yes | no

nadpisz plik nowymi wartoÅciami pseudolosowymi

domyÅlnie: yes (nadpisz)

service = SERWIS (tylko Unix)

nazwa usÅugi

Podana nazwa usÅugi bÄdzie używana jako nazwa usÅugi dla inicjalizacji sysloga, oraz dla biblioteki TCP Wrapper w trybie inetd. Chociaż technicznie można użyÄ tej opcji w trybie w sekcji usÅug, to jest ona użyteczna jedynie w opcjach globalnych.

domyÅlnie: stunnel

syslog = yes | no (tylko Unix)

wÅÄcz logowanie poprzez mechanizm syslog

domyÅlnie: yes (wÅÄcz)

taskbar = yes | no (tylko WIN32 )

wÅÄcz ikonkÄ w prawym dolnym rogu ekranu

domyÅlnie: yes (wÅÄcz)

OPCJE USÅUG

Każda sekcja konfiguracji usÅugi zaczyna siÄ jej nazwÄ ujÄtÄ w nawias kwadratowy. Nazwa usÅugi używana jest do kontroli dostÄpu przez bibliotekÄ libwrap ( TCP wrappers) oraz pozwala rozróżniÄ poszczególne usÅugi w logach.

Jeżeli stunnel ma zostaÄ użyty w trybie inetd, gdzie za odebranie poÅÄczenia odpowiada osobny program (zwykle inetd, xinetd lub tcpserver), należy przeczytaÄ sekcjÄ TRYB INETD poniżej.
accept
= [ HOST: ]PORT

nasÅuchuje na poÅÄczenia na podanym adresie i porcie

Jeżeli nie zostaÅ podany adres, stunnel domyÅlnie nasÅuchuje na wszystkich adresach IPv4 lokalnych interfejsów.

Aby nasÅuchiwaÄ na wszystkich adresach IPv6 należy użyÄ:

accept = :::port

CAengine = IDENTYFIKATOR_CA_W_ENGINE

Åaduje zaufane certyfikaty Centrum certyfikacji z silnika

Opcja pozwala okreÅliÄ poÅożenie pliku zawierajÄcego certyfikaty używane przez opcjÄ verifyChain lub verifyPeer.

Opcja może byÄ użyta wielokrotnie w pojedynczej sekcji.

Aktualnie wspierane silniki: pkcs11, cng.

CApath = KATALOG_CA

Åaduje zaufane certyfikaty Centrum certyfikacji z katalogu

Opcja okreÅla katalog, w którym stunnel bÄdzie szukaÅ certyfikatów, jeżeli użyta zostaÅa opcja verifyChain lub verifyPeer. Pliki z certyfikatami muszÄ posiadaÄ specjalne nazwy XXXXXXXX.0, gdzie XXXXXXXX jest skrótem kryptograficznym reprezentacji DER nazwy podmiotu certyfikatu.

Funkcja skrótu zostaÅa zmieniona w OpenSSL 1.0.0. Należy wykonaÄ c_rehash przy zmianie OpenSSL 0.x.x na 1.x.x.

Jeżeli zdefiniowano katalog chroot, to Åcieżka do CApath jest okreÅlona wzglÄdem tego katalogu.

CAfile = PLIK_CA

Åaduje zaufane certyfikaty Centrum certyfikacji z pliku

Opcja pozwala okreÅliÄ poÅożenie pliku zawierajÄcego certyfikaty używane przez opcjÄ verifyChain lub verifyPeer.

cert = PLIK_CERT

plik z ÅaÅcuchem certyfikatów

Opcja okreÅla poÅożenie pliku zawierajÄcego certyfikaty używane przez program stunnel do uwierzytelnienia siÄ przed drugÄ stronÄ poÅÄczenia. Plik powinien zawieraÄ kompletny ÅaÅcuch certyfikatów poczÄwszy od certyfikatu klienta/serwera, a skoÅczywszy na samopodpisanym certyfikacie gÅównego CA. ObsÅugiwane sÄ pliki w formacie PEM lub P12.

Certyfikat jest konieczny, aby używaÄ programu w trybie serwera. W trybie klienta certyfikat jest opcjonalny.

Jeżeli używany jest silnik kryptograficzny, to opcja cert pozwala wybraÄ identyfikator używanego certyfikatu.

checkEmail = EMAIL

adres email podmiotu przedstawionego certyfikatu

Pojedyncza sekcja może zawieraÄ wiele wystÄpieÅ opcji checkEmail. Certyfikaty sÄ akceptowane, jeżeli sekcja nie weryfikuje podmiotu certyfikatu, albo adres email przedstawionego certyfikatu pasuje do jednego z adresów email okreÅlonych przy pomocy checkEmail.

Opcja ta wymaga biblioteki OpenSSL w wersji 1.0.2 lub nowszej.

checkHost = NAZWA_SERWERA

nazwa serwera podmiotu przedstawionego certyfikatu

Pojedyncza sekcja może zawieraÄ wiele wystÄpieÅ opcji checkHost. Certyfikaty sÄ akceptowane, jeżeli sekcja nie weryfikuje podmiotu certyfikatu, albo nazwa serwera przedstawionego certyfikatu pasuje do jednego nazw okreÅlonych przy pomocy checkHost.

Opcja ta wymaga biblioteki OpenSSL w wersji 1.0.2 lub nowszej.

checkIP = IP

adres IP podmiotu przedstawionego certyfikatu

Pojedyncza sekcja może zawieraÄ wiele wystÄpieÅ opcji checkIP. Certyfikaty sÄ akceptowane, jeżeli sekcja nie weryfikuje podmiotu certyfikatu, albo adres IP przedstawionego certyfikatu pasuje do jednego z adresów IP okreÅlonych przy pomocy checkIP.

Opcja ta wymaga biblioteki OpenSSL w wersji 1.0.2 lub nowszej.

ciphers = LISTA_SZYFRÃW

lista dozwolonych szyfrów dla protokoÅów SSLv2, SSLv3, TLSv1, TLSv1.1, TLSv1.2

Ta opcja nie wpÅywa na listÄ parametrów kryptograficznych dla protokoÅu TLSv1.3

Parametrem tej opcji jest lista szyfrów, które bÄdÄ użyte przy otwieraniu nowych poÅÄczeÅ TLS, np.: DES−CBC3−SHA:IDEA−CBC−MD5

ciphersuites = LISTA_PARAMETRÃW_KRYPTOGRAFICZNYCH

lista dozwolonych parametrów kryptograficznych dla protokoÅu TLSv1.3

Parametrem tej opcji sÄ listy parametrów kryptograficznych w kolejnoÅci ich preferowania.

Opcja ciphersuites jest dostÄpna poczÄwszy od OpenSSL 1.1.1.

domyÅlnie: TLS_CHACHA20_POLY1305_SHA256: TLS_AES_256_GCM_SHA384: TLS_AES_128_GCM_SHA256

client = yes | no

tryb kliencki (zdalna usÅuga używa TLS )

domyÅlnie: no (tryb serwerowy)

config = KOMENDA[:PARAMETR]

komenda konfiguracyjna OpenSSL

Komenda konfiguracyjna OpenSSL zostaje wykonana z podanym parametrem. Pozwala to na wydawanie komend konfiguracyjnych OpenSSL z pliku konfiguracyjnego stunnela. DostÄpne komendy opisane sÄ w podrÄczniku SSL_CONF_cmd(3ssl).

Możliwe jest wyspecyfikowanie wielu opcji OpenSSL przez wielokrotne użycie komendy config.

Zamiast wyÅÄczaÄ config = Curves:list_curves użyj opcji curves w celu ustawienia krzywych eliptycznych.

Opcja ta wymaga biblioteki OpenSSL w wersji 1.0.2 lub nowszej.

connect = [ HOST: ]PORT

poÅÄcz siÄ ze zdalnym serwerem na podany port

Jeżeli nie zostaÅ podany adres, stunnel domyÅlnie ÅÄczy siÄ z lokalnym serwerem.

Komenda może byÄ użyta wielokrotnie w pojedynczej sekcji celem zapewnienia wysokiej niezawodnoÅci lub rozÅożenia ruchu pomiÄdzy wiele serwerów.

CRLpath = KATALOG_CRL

katalog List OdwoÅanych Certyfikatów ( CRL )

Opcja okreÅla katalog, w którym stunnel bÄdzie szukaÅ list CRL używanych przez opcje verifyChain i verifyPeer. Pliki z listami CRL muszÄ posiadaÄ specjalne nazwy XXXXXXXX .r0, gdzie XXXXXXXX jest skrótem listy CRL.

Funkcja skrótu zostaÅa zmieniona OpenSSL 1.0.0. Należy wykonaÄ c_rehash przy zmianie OpenSSL 0.x.x na 1.x.x.

Jeżeli zdefiniowano katalog chroot, to Åcieżka do CRLpath jest okreÅlona wzglÄdem tego katalogu.

CRLfile = PLIK_CRL

plik List OdwoÅanych Certyfikatów ( CRL )

Opcja pozwala okreÅliÄ poÅożenie pliku zawierajÄcego listy CRL używane przez opcje verifyChain i verifyPeer.

curves = lista

krzywe ECDH odddzielone ’:’

Wersje OpenSSL starsze niż 1.1.1 pozwalajÄ na użycie tylko jednej krzywej.

ListÄ dostÄpnych krzywych można uzyskaÄ poleceniem:

openssl ecparam −list_curves

domyÅlnie:

X25519:P−256:X448:P−521:P−384 (poczÄwszy od OpenSSL 1.1.1)
prime256v1 (OpenSSL starszy niż 1.1.1)

logId = TYP

typ identyfikatora poÅÄczenia klienta

Identyfikator ten pozwala rozróżniÄ wpisy w logu wygenerowane dla poszczególnych poÅÄczeÅ.

Aktualnie wspierane typy:
sequential

Kolejny numer poÅÄczenia jest unikalny jedynie w obrÄbie pojedynczej instancji programu stunnel, ale bardzo krótki. Jest on szczególnie użyteczny przy rÄcznej analizie logów.

unique

Ten rodzaj identyfikatora jest globalnie unikalny, ale znacznie dÅuższy, niż kolejny numer poÅÄczenia. Jest on szczególnie użyteczny przy zautomatyzowanej analizie logów.

thread

Identyfikator wÄtku systemu operacyjnego nie jest ani unikalny (nawet w obrÄbie pojedynczej instancji programu stunnel), ani krótki. Jest on szczególnie użyteczny przy diagnozowaniu problemów z oprogramowaniem lub konfiguracjÄ.

process

Identyfikator procesu ( PID ) może byÄ użyteczny w trybie inetd.

domyÅlnie: sequential

debug = POZIOM

szczegóÅowoÅÄ logowania

Poziom logowania można okreÅliÄ przy pomocy jednej z nazw lub liczb: emerg (0), alert (1), crit (2), err (3), warning (4), notice (5), info (6) lub debug (7). Zapisywane sÄ komunikaty o poziomie niższym (numerycznie) lub równym podanemu. Do uzyskania najwyższego poziomu szczegóÅowoÅci można użyÄ opcji debug = debug lub debug = 7. DomyÅlnym poziomem jest notice (5).

delay = yes | no

opóźnij rozwiniÄcie adresu DNS podanego w opcji connect

Opcja jest przydatna przy dynamicznym DNS, albo gdy usÅuga DNS nie jest dostÄpna przy starcie programu stunnel (klient VPN, poÅÄczenie wdzwaniane).

Opóźnione rozwijanie adresu DNS jest wÅÄczane automatycznie, jeżeli nie powiedzie siÄ rozwiniÄcie któregokolwiek z adresów connect dla danej usÅugi.

Opóźnione rozwijanie adresu automatycznie aktywuje failover = prio.

domyÅlnie: no

engineId = NUMER_URZÄDZENIA

wybierz silnik kryptograficzny dla usÅugi

engineNum = NUMER_URZÄDZENIA

wybierz silnik kryptograficzny dla usÅugi

UrzÄdzenia sÄ numerowane od 1 w górÄ.

exec = ÅCIEÅ»KA_DO_PROGRAMU

wykonaj lokalny program przystosowany do pracy z superdemonem inetd

Jeżeli zdefiniowano katalog chroot, to Åcieżka do exec jest okreÅlona wzglÄdem tego katalogu.

Na platformach Unix ustawiane sÄ nastÄpujÄce zmienne Årodowiskowe: REMOTE_HOST, REMOTE_PORT, SSL_CLIENT_DN, SSL_CLIENT_I_DN.

execArgs = $0 $1 $2 ...

argumenty do opcji exec wÅÄcznie z nazwÄ programu ($0)

Cytowanie nie jest wspierane w obecnej wersji programu. Argumenty sÄ rozdzielone dowolnÄ liczbÄ biaÅych znaków.

failover = rr | prio

Strategia wybierania serwerów wyspecyfikowanych parametrami "connect".

rr

round robin − sprawiedliwe rozÅożenie obciÄżenia

prio

priority − użyj kolejnoÅci opcji w pliku konfiguracyjnym

domyÅlnie: prio

ident = NAZWA_UŻYTKOWNIKA

weryfikuj nazwÄ zdalnego użytkownika korzystajÄc z protokoÅu IDENT ( RFC 1413 )

include = KATALOG

wczytaj fragmenty plików konfiguracyjnych z podanego katalogu

Pliki sÄ wczytywane w rosnÄcej kolejnoÅci alfabetycznej ich nazw. Rekomendowana konwencja nazewnictwa plików

dla opcji globalnych:

00−global.conf

dla lokalnych opcji usÅug:

01−service.conf
02−service.conf

key = PLIK_KLUCZA

klucz prywatny do certyfikatu podanego w opcji cert

Klucz prywatny jest potrzebny do uwierzytelnienia wÅaÅciciela certyfikatu. Ponieważ powinien on byÄ zachowany w tajemnicy, prawa do jego odczytu powinien mieÄ wyÅÄcznie wÅaÅciciel pliku. W systemie Unix można to osiÄgnÄÄ komendÄ:

chmod 600 keyfile

Jeżeli używany jest silnik kryptograficzny, to opcja key pozwala wybraÄ identyfikator używanego klucza prywatnego.

domyÅlnie: wartoÅÄ opcji cert

libwrap = yes | no

wÅÄcz lub wyÅÄcz korzystanie z /etc/hosts.allow i /etc/hosts.deny.

domyÅlnie: no (od wersji 5.00)

local = HOST

IP źródÅa do nawiÄzywania zdalnych poÅÄczeÅ

DomyÅlnie używane jest IP najbardziej zewnÄtrznego interfejsu w stronÄ serwera, do którego nawiÄzywane jest poÅÄczenie.

OCSP = URL

responder OCSP do weryfikacji certyfikatu drugiej strony poÅÄczenia

OCSPaia = yes | no

weryfikuj certyfikaty przy użyciu respondertów AIA

Opcja OCSPaia pozwala na weryfikowanie certyfikatów przy pomocy listy URLi responderów OCSP przesÅanych w rozszerzeniach AIA (Authority Information Access).

OCSPflag = FLAGA_OCSP

flaga respondera OCSP

Aktualnie wspierane flagi: NOCERTS, NOINTERN, NOSIGS, NOCHAIN, NOVERIFY, NOEXPLICIT, NOCASIGN, NODELEGATED, NOCHECKS, TRUSTOTHER, RESPID_KEY, NOTIME

Aby wyspecyfikowaÄ kilka flag należy użyÄ OCSPflag wielokrotnie.

OCSPnonce = yes | no

wysyÅaj i weryfikuj OCSP nonce

Opcja OCSPnonce zabezpiecza protokóŠOCSP przed atakami powtórzeniowymi. Ze wzglÄdu na zÅożonoÅÄ obliczeniowÄ rozszerzenie nonce jest zwykle wspierane jedynie przez wewnÄtrzne (np. korporacyjne), a nie przez publiczne respondery OCSP.

OCSPrequire = yes | no

wymagaj rozstrzygajÄcej odpowiedzi respondera OCSP

OCSPrequire = yes | no

WyÅÄczenie tej opcji pozwala na zaakceptowanie poÅÄczenia pomimo braku otrzymania rozstrzygajÄcej odpowiedzi OCSP ze staplingu i bezpoÅredniego żÄdania wysÅanego do respondera.

default: yes

domyÅlnie: yes

options = OPCJE_SSL

opcje biblioteki OpenSSL

Parametrem jest nazwa opcji zgodnie z opisem w SSL_CTX_set_options(3ssl), ale bez przedrostka SSL_OP_ . stunnel −options wyÅwietla opcje dozwolone w aktualnej kombinacji programu stunnel i biblioteki OpenSSL.

Aby wyspecyfikowaÄ kilka opcji należy użyÄ options wielokrotnie. Nazwa opcji może byÄ poprzedzona myÅlnikiem ("−") celem wyÅÄczenia opcji.

Na przykÅad, dla zachowania kompatybilnoÅci z bÅÄdami implementacji TLS w programie Eudora, można użyÄ opcji:

options = DONT_INSERT_EMPTY_FRAGMENTS

domyÅlnie:

options = NO_SSLv2
options = NO_SSLv3

PoczÄwszy od OpenSSL 1.1.0, zamiast wyÅÄczaÄ okreÅlone wersje protokoÅów TLS użyj opcji sslVersionMax lub sslVersionMin.

protocol = PROTOKÃÅ

negocjuj TLS podanym protokoÅem aplikacyjnym

Opcja ta wÅÄcza wstÄpnÄ negocjacjÄ szyfrowania TLS dla wybranego protokoÅu aplikacyjnego. Opcji protocol nie należy używaÄ z szyfrowaniem TLS na osobnym porcie.

Aktualnie wspierane protokoÅy:
cifs

Nieudokumentowane rozszerzenie protokoÅu CIFS wspierane przez serwer Samba. Wsparcie dla tego rozszerzenia zostaÅo zarzucone w wersji 3.0.0 serwera Samba.

capwin

Wsparcie dla aplikacji http://www.capwin.org/

capwinctrl

Wsparcie dla aplikacji http://www.capwin.org/

Ten protokóŠjest wspierany wyÅÄcznie w trybie klienckim.

connect

Negocjacja RFC 2817Upgrading to TLS Within HTTP/1.1 , rozdziaÅ 5.2 − Requesting a Tunnel with CONNECT

Ten protokóŠjest wspierany wyÅÄcznie w trybie klienckim.

imap

Negocjacja RFC 2595Using TLS with IMAP, POP3 and ACAP

ldap

Negocjacja RFC 2830Lightweight Directory Access Protocol (v3): Extension for Transport Layer Security

nntp

Negocjacja RFC 4642Using Transport Layer Security ( TLS ) with Network News Transfer Protocol ( NNTP )

Ten protokóŠjest wspierany wyÅÄcznie w trybie klienckim.

pgsql

Negocjacja http://www.postgresql.org/docs/8.3/static/protocol−flow.html#AEN73982

pop3

Negocjacja RFC 2449POP3 Extension Mechanism

proxy

Przekazywanie oryginalnego IP klienta przez protokóŠHAProxy PROXY w wersji 1 https://www.haproxy.org/download/1.8/doc/proxy−protocol.txt

smtp

Negocjacja RFC 2487SMTP Service Extension for Secure SMTP over TLS

socks

Wspierany jest protokóŠSOCKS w wersjach 4, 4a i 5. ProtokóŠSOCKS enkapsulowany jest w protokole TLS, wiÄc adres serwera docelowego nie jest widoczny dla napastnika przechwytujÄcego ruch sieciowy.

http://www.openssh.com/txt/socks4.protocol

http://www.openssh.com/txt/socks4a.protocol

Nie jest wspierana komenda BIND protokoÅu SOCKS. PrzesÅana wartoÅÄ parametru USERID jest ignorowana.

Sekcja PRZYKÅADY zawiera przykÅadowe pliki konfiguracyjne VPNa zbudowanego w oparciu o szyfrowany protokóŠSOCKS.

protocolAuthentication = UWIERZYTELNIENIE

rodzaj uwierzytelnienia do negocjacji protokoÅu

Opcja ta jest wpierana wyÅÄcznie w klienckich protokoÅach ’connect’ i ’smtp’.

W protokole ’connect’ wspierane jest uwierzytelnienie ’basic’ oraz ’ntlm’. DomyÅlnym rodzajem uwierzytelnienia protokoÅu ’connect’ jest ’basic’.

W protokole ’smtp’ wspierane jest uwierzytelnienie ’plain’ oraz ’login’. DomyÅlnym rodzajem uwierzytelnienia protokoÅu ’smtp’ jest ’plain’.

protocolDomain = DOMENA

domena do negocjacji protokoÅu

W obecnej wersji opcja ma zastosowanie wyÅÄcznie w protokole ’connect’.

protocolHeader = NAGÅÃWEK

nagÅówek do negocjacji protokoÅu

W obecnej wersji opcja ma zastosowanie wyÅÄcznie w protokole ’connect’.

protocolHost = ADRES

adres hosta do negocjacji protokoÅu

Dla protokoÅu ’connect’, protocolHost okreÅla docelowy serwer TLS, do którego poÅÄczyÄ ma siÄ proxy. Adres serwera proxy, do którego ÅÄczy siÄ stunnel, musi byÄ okreÅlony przy pomocy opcji connect.

Dla protokoÅu ’smtp’, protocolHost okreÅla wartoÅÄ HELO/EHLO wysyÅanego przy negocjacji klienta.

protocolPassword = HASÅO

hasÅo do negocjacji protokoÅu

Opcja ta jest wspierana wyÅÄcznie w klienckich protokoÅach ’connect’ i ’smtp’.

protocolUsername = UŻYTKOWNIK

nazwa użytkownika do negocjacji protokoÅu

Opcja ta jest wspierana wyÅÄcznie w klienckich protokoÅach ’connect’ i ’smtp’.

PSKidentity = TOÅ»SAMOÅÄ

tożsamoÅÄ klienta PSK

PSKidentity może zostaÄ użyte w sekcjach klienckich do wybrania tożsamoÅci użytej do uwierzytelnienia PSK. Opcja jest ignorowana w sekcjach serwerowych.

domyÅlnie: pierwsza tożsamoÅÄ zdefiniowana w pliku PSKsecrets

PSKsecrets = PLIK

plik z tożsamoÅciami i kluczami PSK

Każda linia pliku jest w nastÄpujÄcym formacie:

TOÅ»SAMOÅÄ:KLUCZ

Szesnastkowe klucze sÄ automatycznie konwertowane do postaci binarnej. Klucz musi byÄ mieÄ przynajmniej 16 bajtów, co w przypadku kluczy szesnastkowych przekÅada siÄ na przynajmniej 32 znaki. Należy ograniczyÄ dostÄp do czytania lub pisania do tego pliku.

pty = yes | no (tylko Unix)

alokuj pseudo-terminal dla programu uruchamianego w opcji ’exec’

redirect = [ HOST: ]PORT

przekieruj klienta, któremu nie udaÅo siÄ poprawnie uwierzytelniÄ przy pomocy certyfikatu

Opcja dziaÅa wyÅÄcznie w trybie serwera. CzÄÅÄ negocjacji protokoÅów jest niekompatybilna z opcjÄ redirect.

renegotiation = yes | no

pozwalaj na renegocjacjÄ TLS

Zastosowania renegocjacji TLS zawierajÄ niektóre scenariusze uwierzytelniania oraz renegocjacjÄ kluczy dla dÅugotrwaÅych poÅÄczeÅ.

Z drugiej strony wÅasnoÅÄ na może uÅatwiÄ trywialny atak DoS poprzez wygenerowanie obciÄżenia procesora:

http://vincent.bernat.im/en/blog/2011−ssl−dos−mitigation.html

Warto zauważyÄ, że zablokowanie renegocjacji TLS nie zabezpiecza w peÅni przed opisanym problemem.

domyÅlnie: yes (o ile wspierane przez OpenSSL)

reset = yes | no

sygnalizuj wystÄpienie bÅÄdu przy pomocy flagi TCP RST

Opcja nie jest wspierana na niektórych platformach.

domyÅlnie: yes

retry = yes | no | OPÃŹNIENIE

poÅÄcz ponownie sekcjÄ connect+exec po rozÅÄczeniu

WartoÅÄ parametru OPÃŹNIENIE okreÅla liczbÄ milisekund oczekiwania przed wykonaniem ponownego poÅÄczenia. "retry = yes" jest synonimem dla "retry = 1000".

domyÅlnie: no

securityLevel = POZIOM

ustaw poziom bezpieczeÅstwa

Znaczenie każdego poziomu opisano poniżej:
poziom 0

Wszystko jest dozwolone.

poziom 1

Poziom bezpieczeÅstwa zapewniajÄcy minimum 80 bitów bezpieczeÅstwa. Å»adne parametry kryptograficzne oferujÄce poziom bezpieczeÅstwa poniżej 80 bitów nie mogÄ zostaÄ użyte. W zwiÄzku z tym RSA, DSA oraz klucze DH krótsze niż 1024 bity, a także klucze ECC krótsze niż 160 bitów i wszystkie eksportowe zestawy szyfrów sÄ niedozwolone. Użycie SSLv2 jest zabronione. Wszelkie listy parametrów kryptograficznych używajÄce MD5 do MAC sÄ zabronione.

poziom 2

Poziom bezpieczeÅstwa zapewniajÄcy 112 bitów bezpieczeÅstwa. W zwiÄzku z tym RSA, DSA oraz klucze DH krótsze niż 2048 bitów, a także klucze ECC krótsze niż 224 bity sÄ niedozwolone. Oprócz wyÅÄczeÅ z poziomu 1 zabronione jest także korzystanie z zestawów szyfrów używajÄcych RC4. Użycie SSLv3 jest zabronione. Kompresja jest wyÅÄczona.

poziom 3

Poziom bezpieczeÅstwa zapewniajÄcy 128 bitów bezpieczeÅstwa. W zwiÄzku z tym RSA, DSA oraz klucze DH krótsze niż 3072 bity, a także klucze ECC krótsze niż 256 bitów sÄ niedozwolone. Oprócz wyÅÄczeÅ z poziomu 2 zabronione jest także korzystanie z zestawów szyfrów nie zapewniajÄcych utajniania z wyprzedzeniem (forward secrecy). Wersje TLS starsze niż 1.1 sÄ zabronione. Bilety sesji sÄ wyÅÄczone.

poziom 4

Poziom bezpieczeÅstwa zapewniajÄcy 192 bity bezpieczeÅstwa. W zwiÄzku z tym RSA, DSA oraz klucze DH krótsze niż 7680 bitów, a także klucze ECC krótsze niż 384 bity sÄ niedozwolone. Listy parametrów kryptograficznych używajÄcych SHA1 do MAC sÄ zabronione. Wersje TLS starsze niż 1.2 sÄ zabronione.

poziom 5

Poziom bezpieczeÅstwa zapewniajÄcy 256 bitów bezpieczeÅstwa. W zwiÄzku z tym RSA, DSA oraz klucze DH krótsze niż 15360 bitów, a także klucze ECC krótsze niż 512 bitów sÄ niedozwolone.

domyÅlnie: 2

Opcja securityLevel jest dostÄpna poczÄwszy od OpenSSL 1.1.0.

requireCert = yes | no

wymagaj certyfikatu klienta dla verifyChain lub verifyPeer

Przy opcji requireCert ustawionej na no, stunnel akceptuje poÅÄczenia klientów, które nie wysÅaÅy certyfikatu.

Zarówno verifyChain = yes jak i verifyPeer = yes automatycznie ustawiajÄ requireCert na yes.

domyÅlnie: no

setgid = IDENTYFIKATOR_GRUPY (tylko Unix)

identyfikator grupy Unix

Jako opcja globalna: grupa, z której prawami pracowaÅ bÄdzie stunnel.

Jako opcja usÅugi: grupa gniazda Unix utworzonego przy pomocy opcji "accept".

setuid = IDENTYFIKATOR_UŻYTKOWNIKA (tylko Unix)

identyfikator użytkownika Unix

Jako opcja globalna: użytkownik, z którego prawami pracowaÅ bÄdzie stunnel.

Jako opcja usÅugi: wÅaÅciciel gniazda Unix utworzonego przy pomocy opcji "accept".

sessionCacheSize = LICZBA_POZYCJI_CACHE

rozmiar pamiÄci podrÄcznej sesji TLS

Parametr okreÅla maksymalnÄ liczbÄ pozycji wewnÄtrznej pamiÄci podrÄcznej sesji.

WartoÅÄ 0 oznacza brak ograniczenia rozmiaru. Nie jest to zalecane dla systemów produkcyjnych z uwagi na ryzyko ataku DoS przez wyczerpanie pamiÄci RAM.

sessionCacheTimeout = LICZBA_SEKUND

przeterminowanie pamiÄci podrÄcznej sesji TLS

Parametr okreÅla czas w sekundach, po którym sesja TLS zostanie usuniÄta z pamiÄci podrÄcznej.

sessionResume = yes | no

zezwalaj lub nie zezwalaj na wznawianie sesji

domyÅlnie: yes

sessiond = HOST:PORT

adres sessiond − serwera cache sesji TLS

sni = NAZWA_USÅUGI:WZORZEC_NAZWY_SERWERA (tryb serwera)

Użyj usÅugi jako podrzÄdnej (virtualnego serwera) dla rozszerzenia TLS Server Name Indication ( RFC 3546 ).

NAZWA_USÅUGI wskazuje usÅugÄ nadrzÄdnÄ, która odbiera poÅÄczenia od klientów przy pomocy opcji accept. WZORZEC_NAZWY_SERWERA wskazuje nazwÄ serwera wirtualnego. Wzorzec może zaczynaÄ siÄ znakiem ’*’, np. ’*.example.com". Z pojedynczÄ usÅugÄ nadrzÄdnÄ powiÄzane jest zwykle wiele usÅug podrzÄdnych. Opcja sni może byÄ również użyta wielokrotnie w ramach jednej usÅugi podrzÄdnej.

Zarówno usÅuga nadrzÄdna jak i podrzÄdna nie może byÄ skonfigurowana w trybie klienckim.

Opcja connect usÅugi podrzÄdnej jest ignorowana w poÅÄczeniu z opcjÄ protocol, gdyż poÅÄczenie do zdalnego serwera jest w tym wypadku nawiÄzywane przed negocjacjÄ TLS.

Uwierzytelnienie przy pomocy biblioteki libwrap jest realizowane dwukrotnie: najpierw dla usÅugi nadrzÄdnej po odebraniu poÅÄczenia TCP, a nastÄpnie dla usÅugi podrzÄdnej podczas negocjacji TLS.

Opcja sni jest dostÄpna poczÄwszy od OpenSSL 1.0.0.

sni = NAZWA_SERWERA (tryb klienta)

Użyj parametru jako wartoÅci rozszerzenia TLS Server Name Indication ( RFC 3546 ).

Pusta wartoÅÄ parametru NAZWA_SERWERA wyÅÄcza wysyÅanie rozszerzenia SNI.

Opcja sni jest dostÄpna poczÄwszy od OpenSSL 1.0.0.

socket = a|l|r:OPCJA=WARTOÅÄ[:WARTOÅÄ]

ustaw opcjÄ na akceptujÄcym/lokalnym/zdalnym gnieździe

Dla opcji linger wartoÅci majÄ postaÄ l_onof:l_linger. Dla opcji time wartoÅci majÄ postaÄ tv_sec:tv_usec.

PrzykÅady:

socket = l:SO_LINGER=1:60
ustaw jednominutowe przeterminowanie
przy zamykaniu lokalnego gniazda
socket = r:SO_OOBINLINE=yes
umieÅÄ dane pozapasmowe (out−of−band)
bezpoÅrednio w strumieniu danych
wejÅciowych dla zdalnych gniazd
socket = a:SO_REUSEADDR=no
zablokuj ponowne używanie portu
(domyÅlnie wÅÄczone)
socket = a:SO_BINDTODEVICE=lo
przyjmuj poÅÄczenia wyÅÄcznie na
interfejsie zwrotnym (ang. loopback)

sslVersion = WERSJA_SSL

wersja protokoÅu TLS

Wspierane wersje: all, SSLv2, SSLv3, TLSv1, TLSv1.1, TLSv1.2, TLSv1.3

DostÄpnoÅÄ konkretnych protokoÅów zależy od użytej wersji OpenSSL. Starsze wersje OpenSSL nie wspierajÄ TLSv1.1, TLSv1.2, TLSv1.3. Nowsze wersje OpenSSL nie wspierajÄ SSLv2.

PrzestarzaÅe protokoÅy SSLv2 i SSLv3 sÄ domyÅlnie wyÅÄczone.

PoczÄwszy od OpenSSL 1.1.0, ustawienie

sslVersion = WERSJA_SSL

jest równoważne opcjom

sslVersionMax = WERSJA_SSL
sslVersionMin = WERSJA_SSL

sslVersionMax = WERSJA_SSL

maksymalna wspierana wersja protokoÅu TLS

Wspierane wersje: all, SSLv3, TLSv1, TLSv1.1, TLSv1.2, TLSv1.3

all wÅÄcza wszystkie wersje protokoÅów aż do maksymalnej wersji wspieranej przez bibliotekÄ użytej wersji OpenSSL.

DostÄpnoÅÄ konkretnych protokoÅów zależy od użytej wersji OpenSSL.

Opcja sslVersionMax jest dostÄpna poczÄwszy od OpenSSL 1.1.0.

domyÅlnie: all

sslVersionMin = WERSJA_SSL

minimalna wspierana wersja protokoÅu TLS

Wspierane wersje: all, SSLv3, TLSv1, TLSv1.1, TLSv1.2, TLSv1.3

all wÅÄcza wszystkie wersje protokoÅów aż do minimalnej wersji wspieranej przez bibliotekÄ użytej wersji OpenSSL.

DostÄpnoÅÄ konkretnych protokoÅów zależy od użytej wersji OpenSSL.

Opcja sslVersionMin jest dostÄpna poczÄwszy od OpenSSL 1.1.0.

domyÅlnie: TLSv1

stack = LICZBA_BAJTÃW (z wyjÄtkiem modelu FORK )

rozmiar stosu procesora tworzonych wÄtków

Zbyt duży stos zwiÄksza zużycie pamiÄci wirtualnej. Zbyt maÅy stos może powodowaÄ problemy ze stabilnoÅciÄ aplikacji.

domyÅlnie: 65536 bytes (wystarczajÄcy dla testowanych platform)

ticketKeySecret = SECRET

szesnastkowy klucz symetryczny używany przez serwer do zapewnienia poufnoÅci biletów sesji

Bilety sesji zdefiniowane w RFC 5077 zapewniajÄ ulepszonÄ możliwoÅÄ wznawiania sesji, w której implementacja serwera nie jest wymagana do utrzymania stanu sesji.

ÅÄczne użycie opcji ticketKeySecret i ticketMacSecret umożliwia wznawianie sesji na klastrze serwerów lub wznowienie sesji po restarcie serwera.

Klucz musi mieÄ rozmiar 16 lub 32 bajtów, co przekÅada siÄ na dokÅadnie 32 lub 64 cyfry szesnastkowe. Poszczególne bajty mogÄ byÄ opcjonalnie oddzielone dwukropkami.

Opcja dziaÅa wyÅÄcznie w trybie serwera.

Opcja ticketKeySecret jest dostÄpna poczÄwszy od OpenSSL 1.0.0.

WyÅÄczenie opcji NO_TICKET jest wymagane dla obsÅugi biletów sesji w OpenSSL-u starszym niż 1.1.1, ale opcja ta jest niekompatybilna z opcjÄ redirect.

ticketMacSecret = SECRET

szesnastkowy klucz symetryczny używany przez serwer zapewnienia integralnoÅci biletów sesji

Klucz musi mieÄ rozmiar 16 lub 32 bajtów, co przekÅada siÄ na dokÅadnie 32 lub 64 cyfry szesnastkowe. Poszczególne bajty mogÄ byÄ opcjonalnie oddzielone dwukropkami.

Opcja dziaÅa wyÅÄcznie w trybie serwera.

Opcja ticketMacSecret jest dostÄpna poczÄwszy od OpenSSL 1.0.0.

TIMEOUTbusy = LICZBA_SEKUND

czas oczekiwania na spodziewane dane

TIMEOUTclose = LICZBA_SEKUND

czas oczekiwania na close_notify (ustaw na 0, jeżeli klientem jest MSIE )

TIMEOUTconnect = LICZBA_SEKUND

czas oczekiwania na nawiÄzanie poÅÄczenia

TIMEOUTidle = LICZBA_SEKUND

maksymalny czas utrzymywania bezczynnego poÅÄczenia

TIMEOUTocsp = LICZBA_SEKUND

czas oczekiwania na nawiÄzanie poÅÄczenia z serwerem OCSP

transparent = none | source | destination | both (tylko Unix)

tryb przezroczystego proxy na wspieranych platformach

Wspierane wartoÅci:
none

Zablokuj wsparcie dla przezroczystego proxy. Jest to wartoÅÄ domyÅlna.

source

Przepisz adres, aby nawiÄzywane poÅÄczenie wydawaÅo siÄ pochodziÄ bezpoÅrednio od klienta, a nie od programu stunnel.

Opcja jest aktualnie obsÅugiwana w:
Trybie zdalnym (opcja connect) w systemie Linux >=2.6.28

Konfiguracja wymaga nastÄpujÄcych ustawieÅ iptables oraz routingu (na przykÅad w pliku /etc/rc.local lub analogicznym):

iptables −t mangle −N DIVERT
iptables −t mangle −A PREROUTING −p tcp −m socket −j DIVERT
iptables −t mangle −A DIVERT −j MARK −−set−mark 1
iptables −t mangle −A DIVERT −j ACCEPT
ip rule add fwmark 1 lookup 100
ip route add local 0.0.0.0/0 dev lo table 100
echo 0 >/proc/sys/net/ipv4/conf/lo/rp_filter

Konfiguracja ta wymaga, aby stunnel byÅ wykonywany jako root i bez opcji setuid.

Trybie zdalnym (opcja connect) w systemie Linux 2.2.x

Konfiguracja ta wymaga skompilowania jÄdra z opcjÄ transparent proxy. Docelowa usÅuga musi byÄ umieszczona na osobnej maszynie, do której routing kierowany jest poprzez serwer stunnela.

Dodatkowo stunnel powinien byÄ wykonywany jako root i bez opcji setuid.

Trybie zdalnym (opcja connect) w systemie FreeBSD >=8.0

Konfiguracja ta wymaga skonfigurowania firewalla i routingu. stunnel musi byÄ wykonywany jako root i bez opcji setuid.

Trybie lokalnym (opcja exec)

Konfiguracja ta jest realizowana przy pomocy biblioteki libstunnel.so. Do zaÅadowania biblioteki wykorzystywana jest zmienna Årodowiskowa _RLD_LIST na platformie Tru64 lub LD_PRELOAD na innych platformach.

destination

Oryginalny adres docelowy jest używany zamiast opcji connect.

PrzykÅadowa konfiguracja przezroczystego adresu docelowego:

[transparent]
client = yes
accept = <port_stunnela>
transparent = destination

Konfiguracja wymaga ustawieÅ iptables, na przykÅad w pliku /etc/rc.local lub analogicznym.

W przypadku docelowej usÅugi umieszczonej na tej samej maszynie:

/sbin/iptables −t nat −I OUTPUT −p tcp −−dport <port_przekierowany> \
−m ! −−uid−owner <identyfikator_użytkownika_stunnela> \
−j DNAT −−to−destination <lokalne_ip>:<lokalny_port>

W przypadku docelowej usÅugi umieszczonej na zdalnej maszynie:

/sbin/iptables −I INPUT −i eth0 −p tcp −−dport <port_stunnela> −j ACCEPT
/sbin/iptables −t nat −I PREROUTING −p tcp −−dport <port_przekierowany> \
−i eth0 −j DNAT −−to−destination <lokalne_ip>:<port_stunnela>

Przezroczysty adres docelowy jest aktualnie wspierany wyÅÄcznie w systemie Linux.

both

Użyj przezroczystego proxy zarówno dla adresu źródÅowego jak i docelowego.

Dla zapewnienia kompatybilnoÅci z wczeÅniejszymi wersjami wspierane sÄ dwie dodatkowe opcje:

yes

Opcja zostaÅa przemianowana na source.

no

Opcja zostaÅa przemianowana na none.

verify = POZIOM

weryfikuj certyfikat drugiej strony poÅÄczenia

Opcja ta jest przestarzaÅa i należy jÄ zastÄpiÄ przez opcje verifyChain i verifyPeer.
poziom 0

zarzÄdaj certyfikatu i zignoruj go

poziom 1

weryfikuj, jeżeli zostaŠprzedstawiony

poziom 2

weryfikuj z zainstalowanym certyfikatem Centrum Certyfikacji

poziom 3

weryfikuj z lokalnie zainstalowanym certyfikatem drugiej strony

poziom 4

weryfikuj z certyfikatem drugiej strony ignorujÄc ÅaÅcuch CA

domyÅlnie

nie weryfikuj

verifyChain = yes | no

weryfikuj ÅaÅcuch certyfikatów drugiej strony

Do weryfikacji certyfikatu serwera kluczowe jest, aby wymagaÄ również konkretnego certyfikatu przy pomocy checkHost lub checkIP.

Samopodpisany certyfikat gÅównego CA należy umieÅciÄ albo w pliku podanym w opcji CAfile, albo w katalogu podanym w opcji CApath.

domyÅlnie: no

verifyPeer = yes | no

weryfikuj certyfikat drugiej strony

Certyfikat drugiej strony należy umieÅciÄ albo w pliku podanym w opcji CAfile, albo w katalogu podanym w opcji CApath.

domyÅlnie: no

ZWRACANA WARTOÅÄ

stunnel zwraca zero w przypadku sukcesu, lub wartoÅÄ niezerowÄ w przypadku bÅÄdu.

SIGNAÅY

NastÄpujÄce sygnaÅy mogÄ byÄ użyte do sterowania programem w systemie Unix:
SIGHUP

ZaÅaduj ponownie plik konfiguracyjny.

Niektóre globalne opcje nie bÄdÄ przeÅadowane:

chroot

foreground

pid

setgid

setuid

Jeżeli wykorzystywana jest opcja ’setuid’ stunnel nie bÄdzie mógÅ zaÅadowaÄ ponownie konfiguracji wykorzystujÄcej uprzywilejowane (<1024) porty.

Jeżeli wykorzystywana jest opcja ’chroot’ stunnel bÄdzie szukaÅ wszystkich potrzebnych plików (ÅÄcznie z plikiem konfiguracyjnym, certyfikatami, logiem i plikiem pid) wewnÄtrz katalogu wskazanego przez ’chroot’.

SIGUSR1

Zamknij i otwórz ponownie log. Funkcja ta może zostaÄ użyta w skrypcie rotujÄcym log programu stunnel.

SIGUSR2

Zapisz w logu listÄ aktywnych poÅÄczeÅ.

SIGTERM, SIGQUIT, SIGINT

ZakoÅcz dziaÅanie programu.

Skutek wysÅania innych sygnaÅów jest niezdefiniowany.

PRZYKÅADY

Szyfrowanie poÅÄczeÅ do lokalnego serwera imapd można użyÄ:

[imapd]
accept = 993
exec = /usr/sbin/imapd
execArgs = imapd

albo w trybie zdalnym:

[imapd]
accept = 993
connect = 143

Aby umożliwiÄ lokalnemu klientowi poczty elektronicznej korzystanie z serwera imapd przez TLS należy skonfigurowaÄ pobieranie poczty z adresu localhost i portu 119, oraz użyÄ nastÄpujÄcej konfiguracji:

[imap]
client = yes
accept = 143
connect = serwer:993

W poÅÄczeniu z programem pppd stunnel pozwala zestawiÄ prosty VPN. Po stronie serwera nasÅuchujÄcego na porcie 2020 jego konfiguracja może wyglÄdaÄ nastÄpujÄco:

[vpn]
accept = 2020
exec = /usr/sbin/pppd
execArgs = pppd local
pty = yes

Poniższy plik konfiguracyjny może byÄ wykorzystany do uruchomienia programu stunnel w trybie inetd. Warto zauważyÄ, że w pliku konfiguracyjnym nie ma sekcji [nazwa_usÅugi].

exec = /usr/sbin/imapd
execArgs = imapd

Aby skonfigurowaÄ VPN można użyÄ nastÄpujÄcej konfiguracji klienta:

[socks_client]
client = yes
accept = 127.0.0.1:1080
connect = vpn_server:9080
verifyPeer = yes
CAfile = stunnel.pem

OdpowiadajÄca jej konfiguracja serwera vpn_server:

[socks_server]
protocol = socks
accept = 9080
cert = stunnel.pem
key = stunnel.key

Do przetestowania konfiguracji można wydaÄ na maszynie klienckiej komendÄ:

curl −−socks4a localhost http://www.example.com/

PrzykÅadowa konfiguracja serwera SNI:

[virtual]
; usÅuga nadrzÄdna
accept = 443
cert = default.pem
connect = default.internal.mydomain.com:8080
[sni1]
; usÅuga podrzÄdna 1
sni = virtual:server1.mydomain.com
cert = server1.pem
connect = server1.internal.mydomain.com:8081
[sni2]
; usÅuga podrzÄdna 2
sni = virtual:server2.mydomain.com
cert = server2.pem
connect = server2.internal.mydomain.com:8082
verifyPeer = yes
CAfile = server2−allowed−clients.pem

PrzykÅadowa konfiguracja umożliwiajÄca uwierzytelnienie z użyciem klucza prywatnego przechowywanego w Windows Certificate Store (tylko Windows):

engine = capi
[service]
engineId = capi
client = yes
accept = 127.0.0.1:8080
connect = example.com:8443

W przypadku użycia silnika CAPI, nie należy ustawiaÄ opcji cert, gdyż klucz klienta zostanie automatycznie pobrany z Certificate Store na podstawie zaufanych certyfikatów CA przedstawionych przez serwer.

PrzykÅadowa konfiguracja umożliwiajÄca użycie certyfikatu i klucza prywatnego z urzÄdzenia obsÅugiwanego przez silnik pkcs11:

engine = pkcs11
engineCtrl = MODULE_PATH:opensc−pkcs11.so
engineCtrl = PIN:123456
[service]
engineId = pkcs11
client = yes
accept = 127.0.0.1:8080
connect = example.com:843
cert = pkcs11:token=MyToken;object=MyCert
key = pkcs11:token=MyToken;object=MyKey

PrzykÅadowa konfiguracja umożliwiajÄca użycie certyfikatu i klucza prywatnego umieszczonego na tokenie SoftHSM:

engine = pkcs11
engineCtrl = MODULE_PATH:softhsm2.dll
engineCtrl = PIN:12345
[service]
engineId = pkcs11
client = yes
accept = 127.0.0.1:8080
connect = example.com:843
cert = pkcs11:token=MyToken;object=KeyCert

NOTKI

OGRANICZENIA

stunnel nie może byÄ używany do szyfrowania protokoÅu FTP , ponieważ do przesyÅania poszczególnych plików używa on dodatkowych poÅÄczeÅ otwieranych na portach o dynamicznie przydzielanych numerach. IstniejÄ jednak specjalne wersje klientów i serwerów FTP pozwalajÄce na szyfrowanie przesyÅanych danych przy pomocy protokoÅu TLS .

TRYB INETD (tylko Unix)

W wiÄkszoÅci zastosowaÅ stunnel samodzielnie nasÅuchuje na porcie podanym w pliku konfiguracyjnym i tworzy poÅÄczenie z innym portem podanym w opcji connect lub nowym programem podanym w opcji exec. Niektórzy wolÄ jednak wykorzystywaÄ oddzielny program, który odbiera poÅÄczenia, po czym uruchamia program stunnel. PrzykÅadami takich programów sÄ inetd, xinetd i tcpserver.

PrzykÅadowa linia pliku /etc/inetd.conf może wyglÄdaÄ tak:

imaps stream tcp nowait root /usr/bin/stunnel
stunnel /etc/stunnel/imaps.conf

Ponieważ w takich przypadkach poÅÄczenie na zdefiniowanym porcie (tutaj imaps) nawiÄzuje osobny program (tutaj inetd), stunnel nie może używaÄ opcji accept. W pliku konfiguracyjnym nie może byÄ również zdefiniowana żadna usÅuga ([nazwa_usÅugi]), ponieważ konfiguracja taka pozwala na nawiÄzanie tylko jednego poÅÄczenia. Wszystkie OPCJE USÅUG powinny byÄ umieszczone razem z opcjami globalnymi. PrzykÅad takiej konfiguracji znajduje siÄ w sekcji PRZYKÅADY.

CERTYFIKATY

ProtokóŠTLS wymaga, aby każdy serwer przedstawiaÅ siÄ nawiÄzujÄcemu poÅÄczenie klientowi prawidÅowym certyfikatem X.509. Potwierdzenie tożsamoÅci serwera polega na wykazaniu, że posiada on odpowiadajÄcy certyfikatowi klucz prywatny. NajprostszÄ metodÄ uzyskania certyfikatu jest wygenerowanie go przy pomocy wolnego pakietu OpenSSL. WiÄcej informacji na temat generowania certyfikatów można znaleÅºÄ na umieszczonych poniżej stronach.

Plik .pem powinien zawieraÄ klucz prywatny oraz podpisany certyfikat (nie żÄdanie certyfikatu). Otrzymany plik powinien mieÄ nastÄpujÄcÄ postaÄ:

−−−−−BEGIN RSA PRIVATE KEY−−−−−
[zakodowany klucz]
−−−−−END RSA PRIVATE KEY−−−−−
−−−−−BEGIN CERTIFICATE−−−−−
[zakodowany certyfikat]
−−−−−END CERTIFICATE−−−−−

LOSOWOÅÄ

stunnel potrzebuje zainicjowaÄ PRNG (generator liczb pseudolosowych), gdyż protokóŠTLS wymaga do bezpieczeÅstwa kryptograficznego źródÅa dobrej losowoÅci. NastÄpujÄce źródÅa sÄ kolejno odczytywane aż do uzyskania wystarczajÄcej iloÅci entropii:

ZawartoÅÄ pliku podanego w opcji RNDfile.

ZawartoÅÄ pliku o nazwie okreÅlonej przez zmiennÄ ÅrodowiskowÄ RANDFILE, o ile jest ona ustawiona.

Plik .rnd umieszczony w katalogu domowym użytkownika, jeżeli zmienna RANDFILE nie jest ustawiona.

Plik podany w opcji ’−−with−random’ w czasie konfiguracji programu.

ZawartoÅÄ ekranu w systemie Windows.

Gniazdo egd, jeżeli użyta zostaÅa opcja EGD .

Gniazdo egd podane w opcji ’−−with−egd−socket’ w czasie konfiguracji programu.

UrzÄdzenie /dev/urandom.

Warto zwróciÄ uwagÄ, że na maszynach z systemem Windows, na których konsoli nie pracuje użytkownik, zawartoÅÄ ekranu nie jest wystarczajÄco zmienna, aby zainicjowaÄ PRNG. W takim przypadku do zainicjowania generatora należy użyÄ opcji RNDfile.

Plik RNDfile powinien zawieraÄ dane losowe -- również w tym sensie, że powinny byÄ one inne przy każdym uruchomieniu programu stunnel. O ile nie użyta zostaÅa opcja RNDoverwrite jest to robione automatycznie. Do rÄcznego uzyskania takiego pliku użyteczna może byÄ komenda openssl rand dostarczana ze wspóÅczesnymi wersjami pakietu OpenSSL.

Jeszcze jedna istotna informacja -- jeżeli dostÄpne jest urzÄdzenie /dev/urandom biblioteka OpenSSL ma zwyczaj zasilania nim PRNG w trakcie sprawdzania stanu generatora. W systemach z /dev/urandom urzÄdzenie to bÄdzie najprawdopodobniej użyte, pomimo że znajduje siÄ na samym koÅcu powyższej listy. Jest to wÅaÅciwoÅÄ biblioteki OpenSSL, a nie programu stunnel.

PARAMETRY DH

PoczÄwszy od wersji 4.40 stunnel zawiera w kodzie programu 2048−bitowe parametry DH. Od wersji 5.18 te poczÄtkowe wartoÅci parametrów DH sÄ wymieniane na automatycznie generowane parametry tymczasowe. Wygenerowanie parametrów DH może zajÄÄ nawet wiele minut.

Alternatywnie parametry DH można umieÅciÄ w pliku razem z certyfikatem, co wyÅÄcza generowanie parametrów tymczasowych:

openssl dhparam 2048 >> stunnel.pem

PLIKI

/etc/stunnel/stunnel.conf

plik konfiguracyjny programu

BÅÄDY

Opcja execArgs oraz linia komend Win32 nie obsÅuguje cytowania.

ZOBACZ RÃWNIEÅ»

tcpd(8)

biblioteka kontroli dostÄpu do usÅug internetowych

inetd(8)

’super−serwer’ internetowy

http://www.stunnel.org/

strona domowa programu stunnel

http://www.openssl.org/

strona projektu OpenSSL

AUTOR

MichaÅ Trojnara

<[email protected]>


Updated 2024-01-29 - jenkler.se | uex.se