stunnel − uniwersalny tunel protokoÅu TLS
Unix:
stunnel [ PLIK ] | −fd N | −help | −version | −sockets | −options
WIN32:
stunnel [ [
−install | −uninstall | −start |
−stop |
−reload | −reopen | −exit ] [−quiet]
[ PLIK ] ] |
−help | −version | −sockets |
−options
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.
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
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) |
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)
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 2817 − Upgrading 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 2595 − Using TLS with IMAP, POP3 and ACAP
ldap
Negocjacja RFC 2830 − Lightweight Directory Access Protocol (v3): Extension for Transport Layer Security
nntp
Negocjacja RFC 4642 − Using 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 2449 − POP3 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 2487 − SMTP 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
stunnel zwraca zero w przypadku sukcesu, lub wartoÅÄ niezerowÄ w przypadku bÅÄdu.
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.
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
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 .
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.
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−−−−−
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.
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
/etc/stunnel/stunnel.conf
plik konfiguracyjny programu
Opcja execArgs oraz linia komend Win32 nie obsÅuguje cytowania.
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
MichaÅ Trojnara