1stunnel(8)                     stunnel TLS Proxy                    stunnel(8)
2
3
4

NAME

6       stunnel - TLS offloading and load-balancing proxy
7

SYNOPSIS

9       Unix:
10           stunnel [FILE] | -fd N | -help | -version | -sockets | -options
11
12       WIN32:
13           stunnel [ [ -install | -uninstall | -start | -stop |
14               -reload | -reopen | -exit ] [-quiet] [FILE] ] |
15               -help | -version | -sockets | -options
16

DESCRIPTION

18       The stunnel program is designed to work as TLS encryption wrapper
19       between remote clients and local (inetd-startable) or remote servers.
20       The concept is that having non-TLS aware daemons running on your system
21       you can easily set them up to communicate with clients over secure TLS
22       channels.
23
24       stunnel can be used to add TLS functionality to commonly used Inetd
25       daemons like POP-2, POP-3, and IMAP servers, to standalone daemons like
26       NNTP, SMTP and HTTP, and in tunneling PPP over network sockets without
27       changes to the source code.
28
29       This product includes cryptographic software written by Eric Young
30       (eay@cryptsoft.com)
31

OPTIONS

33       FILE
34           Use specified configuration file
35
36       -fd N (Unix only)
37           Read the config file from specified file descriptor
38
39       -help
40           Print stunnel help menu
41
42       -version
43           Print stunnel version and compile time defaults
44
45       -sockets
46           Print default socket options
47
48       -options
49           Print supported TLS options
50
51       -install (Windows NT and later only)
52           Install NT Service
53
54       -uninstall (Windows NT and later only)
55           Uninstall NT Service
56
57       -start (Windows NT and later only)
58           Start NT Service
59
60       -stop (Windows NT and later only)
61           Stop NT Service
62
63       -reload (Windows NT and later only)
64           Reload the configuration file of the running NT Service
65
66       -reopen (Windows NT and later only)
67           Reopen the log file of the running NT Service
68
69       -exit (Win32 only)
70           Exit an already started stunnel
71
72       -quiet (Win32 only)
73           Don't display any message boxes
74

CONFIGURATION FILE

76       Each line of the configuration file can be either:
77
78       ·   An empty line (ignored).
79
80       ·   A comment starting with ';' (ignored).
81
82       ·   An 'option_name = option_value' pair.
83
84       ·   '[service_name]' indicating a start of a service definition.
85
86       An address parameter of an option may be either:
87
88       ·   A port number.
89
90       ·   A colon-separated pair of IP address (either IPv4, IPv6, or domain
91           name) and port number.
92
93       ·   A Unix socket path (Unix only).
94
95   GLOBAL OPTIONS
96       chroot = DIRECTORY (Unix only)
97           directory to chroot stunnel process
98
99           chroot keeps stunnel in a chrooted jail.  CApath, CRLpath, pid and
100           exec are located inside the jail and the patches have to be
101           relative to the directory specified with chroot.
102
103           Several functions of the operating system also need their files to
104           be located within the chroot jail, e.g.:
105
106           ·   Delayed resolver typically needs /etc/nsswitch.conf and
107               /etc/resolv.conf.
108
109           ·   Local time in log files needs /etc/timezone.
110
111           ·   Some other functions may need devices, e.g. /dev/zero or
112               /dev/null.
113
114       compression = deflate | zlib
115           select data compression algorithm
116
117           default: no compression
118
119           Deflate is the standard compression method as described in RFC
120           1951.
121
122       debug = [FACILITY.]LEVEL
123           debugging level
124
125           Level is one of the syslog level names or numbers emerg (0), alert
126           (1), crit (2), err (3), warning (4), notice (5), info (6), or debug
127           (7).  All logs for the specified level and all levels numerically
128           less than it will be shown.  Use debug = debug or debug = 7 for
129           greatest debugging output.  The default is notice (5).
130
131           The syslog facility 'authpriv' will be used unless a facility name
132           is supplied.  (Facilities are not supported on Win32.)
133
134           Case is ignored for both facilities and levels.
135
136       EGD = EGD_PATH (Unix only)
137           path to Entropy Gathering Daemon socket
138
139           Entropy Gathering Daemon socket to use to feed the OpenSSL random
140           number generator.
141
142       engine = auto | ENGINE_ID
143           select hardware or software cryptographic engine
144
145           default: software-only cryptography
146
147           See Examples section for an engine configuration to use the
148           certificate and the corresponding private key from a cryptographic
149           device.
150
151       engineCtrl = COMMAND[:PARAMETER]
152           control hardware engine
153
154       engineDefault = TASK_LIST
155           set OpenSSL tasks delegated to the current engine
156
157           The parameter specifies a comma-separated list of task to be
158           delegated to the current engine.
159
160           The following tasks may be available, if supported by the engine:
161           ALL, RSA, DSA, ECDH, ECDSA, DH, RAND, CIPHERS, DIGESTS, PKEY,
162           PKEY_CRYPTO, PKEY_ASN1.
163
164       fips = yes | no
165           enable or disable FIPS 140-2 mode.
166
167           This option allows you to disable entering FIPS mode if stunnel was
168           compiled with FIPS 140-2 support.
169
170           default: no (since version 5.00)
171
172       foreground = yes | quiet | no (Unix only)
173           foreground mode
174
175           Stay in foreground (don't fork).
176
177           With the yes parameter it also logs to stderr in addition to the
178           destinations specified with syslog and output.
179
180           default: background in daemon mode
181
182       iconActive = ICON_FILE (GUI only)
183           GUI icon to be displayed when there are established connections
184
185           On Windows platform the parameter should be an .ico file containing
186           a 16x16 pixel image.
187
188       iconError = ICON_FILE (GUI only)
189           GUI icon to be displayed when no valid configuration is loaded
190
191           On Windows platform the parameter should be an .ico file containing
192           a 16x16 pixel image.
193
194       iconIdle = ICON_FILE (GUI only)
195           GUI icon to be displayed when there are no established connections
196
197           On Windows platform the parameter should be an .ico file containing
198           a 16x16 pixel image.
199
200       log = append | overwrite
201           log file handling
202
203           This option allows you to choose whether the log file (specified
204           with the output option) is appended or overwritten when opened or
205           re-opened.
206
207           default: append
208
209       output = FILE
210           append log messages to a file
211
212           /dev/stdout device can be used to send log messages to the standard
213           output (for example to log them with daemontools splogger).
214
215       pid = FILE (Unix only)
216           pid file location
217
218           If the argument is empty, then no pid file will be created.
219
220           pid path is relative to the chroot directory if specified.
221
222       RNDbytes = BYTES
223           bytes to read from random seed files
224
225       RNDfile = FILE
226           path to file with random seed data
227
228           The OpenSSL library will use data from this file first to seed the
229           random number generator.
230
231       RNDoverwrite = yes | no
232           overwrite the random seed files with new random data
233
234           default: yes
235
236       service = SERVICE (Unix only)
237           stunnel service name
238
239           The specified service name is used for syslog and as the inetd mode
240           service name for TCP Wrappers.  While this option can technically
241           be specified in the service sections, it is only useful in global
242           options.
243
244           default: stunnel
245
246       syslog = yes | no (Unix only)
247           enable logging via syslog
248
249           default: yes
250
251       taskbar = yes | no (WIN32 only)
252           enable the taskbar icon
253
254           default: yes
255
256   SERVICE-LEVEL OPTIONS
257       Each configuration section begins with a service name in square
258       brackets.  The service name is used for libwrap (TCP Wrappers) access
259       control and lets you distinguish stunnel services in your log files.
260
261       Note that if you wish to run stunnel in inetd mode (where it is
262       provided a network socket by a server such as inetd, xinetd, or
263       tcpserver) then you should read the section entitled INETD MODE below.
264
265       accept = [HOST:]PORT
266           accept connections on specified address
267
268           If no host specified, defaults to all IPv4 addresses for the local
269           host.
270
271           To listen on all IPv6 addresses use:
272
273               accept = :::PORT
274
275       CApath = DIRECTORY
276           Certificate Authority directory
277
278           This is the directory in which stunnel will look for certificates
279           when using the verifyChain or verifyPeer options.  Note that the
280           certificates in this directory should be named XXXXXXXX.0 where
281           XXXXXXXX is the hash value of the DER encoded subject of the cert.
282
283           The hash algorithm has been changed in OpenSSL 1.0.0.  It is
284           required to c_rehash the directory on upgrade from OpenSSL 0.x.x to
285           OpenSSL 1.x.x.
286
287           CApath path is relative to the chroot directory if specified.
288
289       CAfile = CA_FILE
290           Certificate Authority file
291
292           This file contains multiple CA certificates, to be used with the
293           verifyChain and verifyPeer options.
294
295       cert = CERT_FILE
296           certificate chain file name
297
298           The parameter specifies the file containing certificates used by
299           stunnel to authenticate itself against the remote client or server.
300           The file should contain the whole certificate chain starting from
301           the actual server/client certificate, and ending with the self-
302           signed root CA certificate.  The file must be either in PEM or P12
303           format.
304
305           A certificate chain is required in server mode, and optional in
306           client mode.
307
308           This parameter is also used as the certificate identifier when a
309           hardware engine is enabled.
310
311       checkEmail = EMAIL
312           email address of the peer certificate subject
313
314           Multiple checkEmail options are allowed in a single service
315           section.  Certificates are accepted if no subject checks were
316           specified, or the email address of the peer certificate matches any
317           of the email addresses specified with checkEmail.
318
319           This option requires OpenSSL 1.0.2 or later.
320
321       checkHost = HOST
322           host of the peer certificate subject
323
324           Multiple checkHost options are allowed in a single service section.
325           Certificates are accepted if no subject checks were specified, or
326           the host name of the peer certificate matches any of the hosts
327           specified with checkHost.
328
329           This option requires OpenSSL 1.0.2 or later.
330
331       checkIP = IP
332           IP address of the peer certificate subject
333
334           Multiple checkIP options are allowed in a single service section.
335           Certificates are accepted if no subject checks were specified, or
336           the IP address of the peer certificate matches any of the IP
337           addresses specified with checkIP.
338
339           This option requires OpenSSL 1.0.2 or later.
340
341       ciphers = CIPHER_LIST
342           select permitted TLS ciphers (TLSv1.2 and below)
343
344           This option does not impact TLSv1.3 ciphersuites.
345
346           A colon-delimited list of the ciphers to allow in the TLS
347           connection, for example DES-CBC3-SHA:IDEA-CBC-MD5.
348
349       ciphersuites = CIPHERSUITES_LIST
350           select permitted TLSv1.3 ciphersuites
351
352           A colon-delimited list of TLSv1.3 ciphersuites names in order of
353           preference.
354
355           This option requires OpenSSL 1.1.1 or later.
356
357           default:
358           TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256
359
360       client = yes | no
361           client mode (remote service uses TLS)
362
363           default: no (server mode)
364
365       config = COMMAND[:PARAMETER]
366           OpenSSL configuration command
367
368           The OpenSSL configuration command is executed with the specified
369           parameter.  This allows any configuration commands to be invoked
370           from the stunnel configuration file.  Supported commands are
371           described on the SSL_CONF_cmd(3ssl) manual page.
372
373           Several config lines can be used to specify multiple configuration
374           commands.
375
376           This option requires OpenSSL 1.0.2 or later.
377
378       connect = [HOST:]PORT
379           connect to a remote address
380
381           If no host is specified, the host defaults to localhost.
382
383           Multiple connect options are allowed in a single service section.
384
385           If host resolves to multiple addresses and/or if multiple connect
386           options are specified, then the remote address is chosen using a
387           round-robin algorithm.
388
389       CRLpath = DIRECTORY
390           Certificate Revocation Lists directory
391
392           This is the directory in which stunnel will look for CRLs when
393           using the verifyChain and verifyPeer options. Note that the CRLs in
394           this directory should be named XXXXXXXX.r0 where XXXXXXXX is the
395           hash value of the CRL.
396
397           The hash algorithm has been changed in OpenSSL 1.0.0.  It is
398           required to c_rehash the directory on upgrade from OpenSSL 0.x.x to
399           OpenSSL 1.x.x.
400
401           CRLpath path is relative to the chroot directory if specified.
402
403       CRLfile = CRL_FILE
404           Certificate Revocation Lists file
405
406           This file contains multiple CRLs, used with the verifyChain and
407           verifyPeer options.
408
409       curves = list
410           ECDH curves separated with ':'
411
412           Note: This option is supported for server mode sockets only.
413
414           Only a single curve name is allowed for OpenSSL older than 1.1.0.
415
416           To get a list of supported curves use:
417
418               openssl ecparam -list_curves
419
420           default:
421
422               X25519:P-256:X448:P-521:P-384 (OpenSSL 1.1.1 or later)
423
424               prime256v1 (OpenSSL older than 1.1.1)
425
426       logId = TYPE
427           connection identifier type
428
429           This identifier allows you to distinguish log entries generated for
430           each of the connections.
431
432           Currently supported types:
433
434           sequential
435               The numeric sequential identifier is only unique within a
436               single instance of stunnel, but very compact.  It is most
437               useful for manual log analysis.
438
439           unique
440               This alphanumeric identifier is globally unique, but longer
441               than the sequential number.  It is most useful for automated
442               log analysis.
443
444           thread
445               The operating system thread identifier is neither unique (even
446               within a single instance of stunnel) nor short.  It is most
447               useful for debugging software or configuration issues.
448
449           process
450               The operating system process identifier (PID) may be useful in
451               the inetd mode.
452
453           default: sequential
454
455       debug = LEVEL
456           debugging level
457
458           Level is a one of the syslog level names or numbers emerg (0),
459           alert (1), crit (2), err (3), warning (4), notice (5), info (6), or
460           debug (7).  All logs for the specified level and all levels
461           numerically less than it will be shown.  Use debug = debug or debug
462           = 7 for greatest debugging output.  The default is notice (5).
463
464       delay = yes | no
465           delay DNS lookup for the connect option
466
467           This option is useful for dynamic DNS, or when DNS is not available
468           during stunnel startup (road warrior VPN, dial-up configurations).
469
470           Delayed resolver mode is automatically engaged when stunnel fails
471           to resolve on startup any of the connect targets for a service.
472
473           Delayed resolver inflicts failover = prio.
474
475           default: no
476
477       engineId = ENGINE_ID
478           select engine ID for the service
479
480       engineNum = ENGINE_NUMBER
481           select engine number for the service
482
483           The engines are numbered starting from 1.
484
485       exec = EXECUTABLE_PATH
486           execute a local inetd-type program
487
488           exec path is relative to the chroot directory if specified.
489
490           The following environmental variables are set on Unix platforms:
491           REMOTE_HOST, REMOTE_PORT, SSL_CLIENT_DN, SSL_CLIENT_I_DN.
492
493       execArgs = $0 $1 $2 ...
494           arguments for exec including the program name ($0)
495
496           Quoting is currently not supported.  Arguments are separated with
497           an arbitrary amount of whitespace.
498
499       failover = rr | prio
500           Failover strategy for multiple "connect" targets.
501
502           rr  round robin - fair load distribution
503
504           prio
505               priority - use the order specified in config file
506
507           default: prio
508
509       ident = USERNAME
510           use IDENT (RFC 1413) username checking
511
512       include = DIRECTORY
513           include all configuration file parts located in DIRECTORY
514
515           The files are included in the ascending alphabetical order of their
516           names. The recommended filename convention is
517
518           for global options:
519
520                   00-global.conf
521
522           for local service-level options:
523
524                   01-service.conf
525
526                   02-service.conf
527
528       key = KEY_FILE
529           private key for the certificate specified with cert option
530
531           A private key is needed to authenticate the certificate owner.
532           Since this file should be kept secret it should only be readable by
533           its owner.  On Unix systems you can use the following command:
534
535               chmod 600 keyfile
536
537           This parameter is also used as the private key identifier when a
538           hardware engine is enabled.
539
540           default: the value of the cert option
541
542       libwrap = yes | no
543           Enable or disable the use of /etc/hosts.allow and /etc/hosts.deny.
544
545           default: no (since version 5.00)
546
547       local = HOST
548           By default, the IP address of the outgoing interface is used as the
549           source for remote connections.  Use this option to bind a static
550           local IP address instead.
551
552       OCSP = URL
553           select OCSP responder for certificate verification
554
555       OCSPaia = yes | no
556           validate certificates with their AIA OCSP responders
557
558           This option enables stunnel to validate certificates with the list
559           of OCSP responder URLs retrieved from their AIA (Authority
560           Information Access) extension.
561
562       OCSPflag = OCSP_FLAG
563           specify OCSP responder flag
564
565           Several OCSPflag can be used to specify multiple flags.
566
567           currently supported flags: NOCERTS, NOINTERN, NOSIGS, NOCHAIN,
568           NOVERIFY, NOEXPLICIT, NOCASIGN, NODELEGATED, NOCHECKS, TRUSTOTHER,
569           RESPID_KEY, NOTIME
570
571       OCSPnonce = yes | no
572           send and verify the OCSP nonce extension
573
574           This option protects the OCSP protocol against replay attacks.  Due
575           to its computational overhead, the nonce extension is usually only
576           supported on internal (e.g. corporate) responders, and not on
577           public OCSP responders.
578
579       options = SSL_OPTIONS
580           OpenSSL library options
581
582           The parameter is the OpenSSL option name as described in the
583           SSL_CTX_set_options(3ssl) manual, but without SSL_OP_ prefix.
584           stunnel -options lists the options found to be allowed in the
585           current combination of stunnel and the OpenSSL library used to
586           build it.
587
588           Several option lines can be used to specify multiple options.  An
589           option name can be prepended with a dash ("-") to disable the
590           option.
591
592           For example, for compatibility with the erroneous Eudora TLS
593           implementation, the following option can be used:
594
595               options = DONT_INSERT_EMPTY_FRAGMENTS
596
597           default:
598
599               options = NO_SSLv2
600               options = NO_SSLv3
601
602           Use sslVersionMax or sslVersionMin option instead of disabling
603           specific TLS protocol versions when compiled with OpenSSL 1.1.0 or
604           later.
605
606       protocol = PROTO
607           application protocol to negotiate TLS
608
609           This option enables initial, protocol-specific negotiation of the
610           TLS encryption.  The protocol option should not be used with TLS
611           encryption on a separate port.
612
613           Currently supported protocols:
614
615           cifs
616               Proprietary (undocummented) extension of CIFS protocol
617               implemented in Samba.  Support for this extension was dropped
618               in Samba 3.0.0.
619
620           connect
621               Based on RFC 2817 - Upgrading to TLS Within HTTP/1.1, section
622               5.2 - Requesting a Tunnel with CONNECT
623
624               This protocol is only supported in client mode.
625
626           imap
627               Based on RFC 2595 - Using TLS with IMAP, POP3 and ACAP
628
629           nntp
630               Based on RFC 4642 - Using Transport Layer Security (TLS) with
631               Network News Transfer Protocol (NNTP)
632
633               This protocol is only supported in client mode.
634
635           pgsql
636               Based on
637               http://www.postgresql.org/docs/8.3/static/protocol-flow.html#AEN73982
638
639           pop3
640               Based on RFC 2449 - POP3 Extension Mechanism
641
642           proxy
643               Passing of the original client IP with HAProxy PROXY protocol
644               version 1
645               https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt
646
647           smtp
648               Based on RFC 2487 - SMTP Service Extension for Secure SMTP over
649               TLS
650
651           socks
652               SOCKS versions 4, 4a, and 5 are supported.  The SOCKS protocol
653               itself is encapsulated within TLS encryption layer to protect
654               the final destination address.
655
656               http://www.openssh.com/txt/socks4.protocol
657
658               http://www.openssh.com/txt/socks4a.protocol
659
660               The BIND command of the SOCKS protocol is not supported.  The
661               USERID parameter is ignored.
662
663               See Examples section for sample configuration files for VPN
664               based on SOCKS encryption.
665
666       protocolAuthentication = AUTHENTICATION
667           authentication type for the protocol negotiations
668
669           Currently, this option is only supported in the client-side
670           'connect' and 'smtp' protocols.
671
672           Supported authentication types for the 'connect' protocol are
673           'basic' or 'ntlm'.  The default 'connect' authentication type is
674           'basic'.
675
676           Supported authentication types for the 'smtp' protocol are 'plain'
677           or 'login'.  The default 'smtp' authentication type is 'plain'.
678
679       protocolDomain = DOMAIN
680           domain for the protocol negotiations
681
682           Currently, this option is only supported in the client-side
683           'connect' protocol.
684
685       protocolHost = HOST:PORT
686           destination address for the protocol negotiations
687
688           protocolHost specifies the final TLS server to be connected to by
689           the proxy, and not the proxy server directly connected by stunnel.
690           The proxy server should be specified with the 'connect' option.
691
692           Currently the protocol destination address only applies to the
693           'connect' protocol.
694
695       protocolPassword = PASSWORD
696           password for the protocol negotiations
697
698           Currently, this option is only supported in the client-side
699           'connect' and 'smtp' protocols.
700
701       protocolUsername = USERNAME
702           username for the protocol negotiations
703
704           Currently, this option is only supported in the client-side
705           'connect' and 'smtp' protocols.
706
707       PSKidentity = IDENTITY
708           PSK identity for the PSK client
709
710           PSKidentity can be used on stunnel clients to select the PSK
711           identity used for authentication.  This option is ignored in server
712           sections.
713
714           default: the first identity specified in the PSKsecrets file.
715
716       PSKsecrets = FILE
717           file with PSK identities and corresponding keys
718
719           Each line of the file in the following format:
720
721               IDENTITY:KEY
722
723           Hexadecimal keys are automatically converted to binary form.  Keys
724           are required to be at least 16 bytes long, which implies at least
725           32 characters for hexadecimal keys.  The file should neither be
726           world-readable nor world-writable.
727
728       pty = yes | no (Unix only)
729           allocate a pseudoterminal for 'exec' option
730
731       redirect = [HOST:]PORT
732           redirect TLS client connections on certificate-based authentication
733           failures
734
735           This option only works in server mode.  Some protocol negotiations
736           are also incompatible with the redirect option.
737
738       renegotiation = yes | no
739           support TLS renegotiation
740
741           Applications of the TLS renegotiation include some authentication
742           scenarios, or re-keying long lasting connections.
743
744           On the other hand this feature can facilitate a trivial CPU-
745           exhaustion DoS attack:
746
747           http://vincent.bernat.im/en/blog/2011-ssl-dos-mitigation.html
748
749           Please note that disabling TLS renegotiation does not fully
750           mitigate this issue.
751
752           default: yes (if supported by OpenSSL)
753
754       reset = yes | no
755           attempt to use the TCP RST flag to indicate an error
756
757           This option is not supported on some platforms.
758
759           default: yes
760
761       retry = yes | no
762           reconnect a connect+exec section after it was disconnected
763
764           default: no
765
766       requireCert = yes | no
767           require a client certificate for verifyChain or verifyPeer
768
769           With requireCert set to no, the stunnel server accepts client
770           connections that did not present a certificate.
771
772           Both verifyChain = yes and verifyPeer = yes imply requireCert =
773           yes.
774
775           default: no
776
777       setgid = GROUP (Unix only)
778           Unix group id
779
780           As a global option: setgid() to the specified group in daemon mode
781           and clear all other groups.
782
783           As a service-level option: set the group of the Unix socket
784           specified with "accept".
785
786       setuid = USER (Unix only)
787           Unix user id
788
789           As a global option: setuid() to the specified user in daemon mode.
790
791           As a service-level option: set the owner of the Unix socket
792           specified with "accept".
793
794       sessionCacheSize = NUM_ENTRIES
795           session cache size
796
797           sessionCacheSize specifies the maximum number of the internal
798           session cache entries.
799
800           The value of 0 can be used for unlimited size.  It is not
801           recommended for production use due to the risk of a memory
802           exhaustion DoS attack.
803
804       sessionCacheTimeout = TIMEOUT
805           session cache timeout
806
807           This is the number of seconds to keep cached TLS sessions.
808
809       sessiond = HOST:PORT
810           address of sessiond TLS cache server
811
812       sni = SERVICE_NAME:SERVER_NAME_PATTERN (server mode)
813           Use the service as a slave service (a name-based virtual server)
814           for Server Name Indication TLS extension (RFC 3546).
815
816           SERVICE_NAME specifies the master service that accepts client
817           connections with the accept option.  SERVER_NAME_PATTERN specifies
818           the host name to be redirected.  The pattern may start with the '*'
819           character, e.g.  '*.example.com'.  Multiple slave services are
820           normally specified for a single master service.  The sni option can
821           also be specified more than once within a single slave service.
822
823           This service, as well as the master service, may not be configured
824           in client mode.
825
826           The connect option of the slave service is ignored when the
827           protocol option is specified, as protocol connects to the remote
828           host before TLS handshake.
829
830           Libwrap checks (Unix only) are performed twice: with the master
831           service name after TCP connection is accepted, and with the slave
832           service name during the TLS handshake.
833
834           The sni option is only available when compiled with OpenSSL 1.0.0
835           and later.
836
837       sni = SERVER_NAME (client mode)
838           Use the parameter as the value of TLS Server Name Indication (RFC
839           3546) extension.
840
841           Empty SERVER_NAME disables sending the SNI extension.
842
843           The sni option is only available when compiled with OpenSSL 1.0.0
844           and later.
845
846       socket = a|l|r:OPTION=VALUE[:VALUE]
847           Set an option on the accept/local/remote socket
848
849           The values for the linger option are l_onof:l_linger.  The values
850           for the time are tv_sec:tv_usec.
851
852           Examples:
853
854               socket = l:SO_LINGER=1:60
855                   set one minute timeout for closing local socket
856               socket = r:SO_OOBINLINE=yes
857                   place out-of-band data directly into the
858                   receive data stream for remote sockets
859               socket = a:SO_REUSEADDR=no
860                   disable address reuse (enabled by default)
861               socket = a:SO_BINDTODEVICE=lo
862                   only accept connections on loopback interface
863
864       sslVersion = SSL_VERSION
865           select the TLS protocol version
866
867           Supported versions: all, SSLv2, SSLv3, TLSv1, TLSv1.1, TLSv1.2,
868           TLSv1.3
869
870           Availability of specific protocols depends on the linked OpenSSL
871           library.  Older versions of OpenSSL do not support TLSv1.1, TLSv1.2
872           and TLSv1.3.  Newer versions of OpenSSL do not support SSLv2.
873
874           Obsolete SSLv2 and SSLv3 are currently disabled by default.
875
876           Setting the option
877
878               sslVersion = SSL_VERSION
879
880           is equivalent to options
881
882               sslVersionMax = SSL_VERSION
883               sslVersionMin = SSL_VERSION
884
885           when compiled with OpenSSL 1.1.0 and later.
886
887       sslVersionMax = SSL_VERSION
888           maximum supported protocol versions
889
890           Supported versions: all, SSLv3, TLSv1, TLSv1.1, TLSv1.2, TLSv1.3
891
892           all enable protocol versions up to the highest version supported by
893           the linked OpenSSL library.
894
895           Availability of specific protocols depends on the linked OpenSSL
896           library.
897
898           The sslVersionMax option is only available when compiled with
899           OpenSSL 1.1.0 and later.
900
901           default: all
902
903       sslVersionMin = SSL_VERSION
904           minimum supported protocol versions
905
906           Supported versions: all, SSLv3, TLSv1, TLSv1.1, TLSv1.2, TLSv1.3
907
908           all enable protocol versions down to the lowest version supported
909           by the linked OpenSSL library.
910
911           Availability of specific protocols depends on the linked OpenSSL
912           library.
913
914           The sslVersionMin option is only available when compiled with
915           OpenSSL 1.1.0 and later.
916
917           default: TLSv1
918
919       stack = BYTES (except for FORK model)
920           CPU stack size of created threads
921
922           Excessive thread stack size increases virtual memory usage.
923           Insufficient thread stack size may cause application crashes.
924
925           default: 65536 bytes (sufficient for all platforms we tested)
926
927       ticketKeySecret = SECRET
928           hexadecimal symmetric key used for session ticket confidentiality
929           protection
930
931           Session tickets defined in RFC 5077 provide an enhanced session
932           resumption capability, where the server-side caching is not
933           required to maintain per session state.
934
935           Combining ticketKeySecret and ticketMacSecret options allow to
936           resume a negotiated session on other cluster nodes, or to resume
937           resume a negotiated session after server restart.
938
939           The key is required to be either 16 or 32 bytes long, which implies
940           exactly 32 or 64 hexadecimal digits.  Colons may optionally be used
941           between two-character hexadecimal bytes.
942
943           This option only works in server mode.
944
945           The ticketKeySecret option is only available when compiled with
946           OpenSSL 1.0.0 and later.
947
948           Disabling NO_TICKET option is required for the ticket support in
949           OpenSSL older than 1.1.1, but note that this option is incompatible
950           with the redirect option.
951
952       ticketMacSecret = SECRET
953           hexadecimal symmetric key used for session ticket integrity
954           protection
955
956           The key is required to be either 16 or 32 bytes long, which implies
957           exactly 32 or 64 hexadecimal digits.  Colons may optionally be used
958           between two-character hexadecimal bytes.
959
960           This option only works in server mode.
961
962           The ticketMacSecret option is only available when compiled with
963           OpenSSL 1.0.0 and later.
964
965       TIMEOUTbusy = SECONDS
966           time to wait for expected data
967
968       TIMEOUTclose = SECONDS
969           time to wait for close_notify (set to 0 for buggy MSIE)
970
971       TIMEOUTconnect = SECONDS
972           time to wait to connect to a remote host
973
974       TIMEOUTidle = SECONDS
975           time to keep an idle connection
976
977       transparent = none | source | destination | both (Unix only)
978           enable transparent proxy support on selected platforms
979
980           Supported values:
981
982           none
983               Disable transparent proxy support.  This is the default.
984
985           source
986               Re-write the address to appear as if a wrapped daemon is
987               connecting from the TLS client machine instead of the machine
988               running stunnel.
989
990               This option is currently available in:
991
992               Remote mode (connect option) on Linux >=2.6.28
993                   This configuration requires stunnel to be executed as root
994                   and without the setuid option.
995
996                   This configuration requires the following setup for
997                   iptables and routing (possibly in /etc/rc.local or
998                   equivalent file):
999
1000                       iptables -t mangle -N DIVERT
1001                       iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
1002                       iptables -t mangle -A DIVERT -j MARK --set-mark 1
1003                       iptables -t mangle -A DIVERT -j ACCEPT
1004                       ip rule add fwmark 1 lookup 100
1005                       ip route add local 0.0.0.0/0 dev lo table 100
1006                       echo 0 >/proc/sys/net/ipv4/conf/lo/rp_filter
1007
1008                   stunnel must also to be executed as root and without the
1009                   setuid option.
1010
1011               Remote mode (connect option) on Linux 2.2.x
1012                   This configuration requires the kernel to be compiled with
1013                   the transparent proxy option.  Connected service must be
1014                   installed on a separate host.  Routing towards the clients
1015                   has to go through the stunnel box.
1016
1017                   stunnel must also to be executed as root and without the
1018                   setuid option.
1019
1020               Remote mode (connect option) on FreeBSD >=8.0
1021                   This configuration requires additional firewall and routing
1022                   setup.  stunnel must also to be executed as root and
1023                   without the setuid option.
1024
1025               Local mode (exec option)
1026                   This configuration works by pre-loading the libstunnel.so
1027                   shared library.  _RLD_LIST environment variable is used on
1028                   Tru64, and LD_PRELOAD variable on other platforms.
1029
1030           destination
1031               The original destination is used instead of the connect option.
1032
1033               A service section for transparent destination may look like
1034               this:
1035
1036                   [transparent]
1037                   client = yes
1038                   accept = <stunnel_port>
1039                   transparent = destination
1040
1041               This configuration requires iptables setup to work, possibly in
1042               /etc/rc.local or equivalent file.
1043
1044               For a connect target installed on the same host:
1045
1046                   /sbin/iptables -t nat -I OUTPUT -p tcp --dport <redirected_port> \
1047                       -m ! --uid-owner <stunnel_user_id> \
1048                       -j DNAT --to-destination <local_ip>:<stunnel_port>
1049
1050               For a connect target installed on a remote host:
1051
1052                   /sbin/iptables -I INPUT -i eth0 -p tcp --dport <stunnel_port> -j ACCEPT
1053                   /sbin/iptables -t nat -I PREROUTING -p tcp --dport <redirected_port> \
1054                       -i eth0 -j DNAT --to-destination <local_ip>:<stunnel_port>
1055
1056               The transparent destination option is currently only supported
1057               on Linux.
1058
1059           both
1060               Use both source and destination transparent proxy.
1061
1062           Two legacy options are also supported for backward compatibility:
1063
1064           yes This option has been renamed to source.
1065
1066           no  This option has been renamed to none.
1067
1068       verify = LEVEL
1069           verify the peer certificate
1070
1071           This option is obsolete and should be replaced with the verifyChain
1072           and verifyPeer options.
1073
1074           level 0
1075               Request and ignore the peer certificate.
1076
1077           level 1
1078               Verify the peer certificate if present.
1079
1080           level 2
1081               Verify the peer certificate.
1082
1083           level 3
1084               Verify the peer against a locally installed certificate.
1085
1086           level 4
1087               Ignore the chain and only verify the peer certificate.
1088
1089           default
1090               No verify.
1091
1092       verifyChain = yes | no
1093           verify the peer certificate chain starting from the root CA
1094
1095           For server certificate verification it is essential to also require
1096           a specific certificate with checkHost or checkIP.
1097
1098           The self-signed root CA certificate needs to be stored either in
1099           the file specified with CAfile, or in the directory specified with
1100           CApath.
1101
1102           default: no
1103
1104       verifyPeer = yes | no
1105           verify the peer certificate
1106
1107           The peer certificate needs to be stored either in the file
1108           specified with CAfile, or in the directory specified with CApath.
1109
1110           default: no
1111

RETURN VALUE

1113       stunnel returns zero on success, non-zero on error.
1114

SIGNALS

1116       The following signals can be used to control stunnel in Unix
1117       environment:
1118
1119       SIGHUP
1120           Force a reload of the configuration file.
1121
1122           Some global options will not be reloaded:
1123
1124           ·   chroot
1125
1126           ·   foreground
1127
1128           ·   pid
1129
1130           ·   setgid
1131
1132           ·   setuid
1133
1134           The use of the 'setuid' option will also prevent stunnel from
1135           binding to privileged (<1024) ports during configuration reloading.
1136
1137           When the 'chroot' option is used, stunnel will look for all its
1138           files (including the configuration file, certificates, the log file
1139           and the pid file) within the chroot jail.
1140
1141       SIGUSR1
1142           Close and reopen the stunnel log file.  This function can be used
1143           for log rotation.
1144
1145       SIGUSR2
1146           Log the list of active connections.
1147
1148       SIGTERM, SIGQUIT, SIGINT
1149           Shut stunnel down.
1150
1151       The result of sending any other signals to the server is undefined.
1152

EXAMPLES

1154       In order to provide TLS encapsulation to your local imapd service, use:
1155
1156           [imapd]
1157           accept = 993
1158           exec = /usr/sbin/imapd
1159           execArgs = imapd
1160
1161       or in remote mode:
1162
1163           [imapd]
1164           accept = 993
1165           connect = 143
1166
1167       In order to let your local e-mail client connect to a TLS-enabled imapd
1168       service on another server, configure the e-mail client to connect to
1169       localhost on port 119 and use:
1170
1171           [imap]
1172           client = yes
1173           accept = 143
1174           connect = servername:993
1175
1176       If you want to provide tunneling to your pppd daemon on port 2020, use
1177       something like:
1178
1179           [vpn]
1180           accept = 2020
1181           exec = /usr/sbin/pppd
1182           execArgs = pppd local
1183           pty = yes
1184
1185       If you want to use stunnel in inetd mode to launch your imapd process,
1186       you'd use this stunnel.conf.  Note there must be no [service_name]
1187       section.
1188
1189           exec = /usr/sbin/imapd
1190           execArgs = imapd
1191
1192       To setup SOCKS VPN configure the following client service:
1193
1194           [socks_client]
1195           client = yes
1196           accept = 127.0.0.1:1080
1197           connect = vpn_server:9080
1198           verifyPeer = yes
1199           CAfile = stunnel.pem
1200
1201       The corresponding configuration on the vpn_server host:
1202
1203           [socks_server]
1204           protocol = socks
1205           accept = 9080
1206           cert = stunnel.pem
1207           key = stunnel.key
1208
1209       Now test your configuration on the client machine with:
1210
1211           curl --socks4a localhost http://www.example.com/
1212
1213       An example server mode SNI configuration:
1214
1215           [virtual]
1216           ; master service
1217           accept = 443
1218           cert =  default.pem
1219           connect = default.internal.mydomain.com:8080
1220
1221           [sni1]
1222           ; slave service 1
1223           sni = virtual:server1.mydomain.com
1224           cert = server1.pem
1225           connect = server1.internal.mydomain.com:8081
1226
1227           [sni2]
1228           ; slave service 2
1229           sni = virtual:server2.mydomain.com
1230           cert = server2.pem
1231           connect = server2.internal.mydomain.com:8082
1232           verifyPeer = yes
1233           CAfile = server2-allowed-clients.pem
1234
1235       An example of advanced engine configuration allows for authentication
1236       with private keys stored in the Windows certificate store (Windows
1237       only).  With the CAPI engine you don't need to manually select the
1238       client key to use.  The client key is automatically selected based on
1239       the list of CAs trusted by the server.
1240
1241           engine = capi
1242
1243           [service]
1244           engineId = capi
1245           client = yes
1246           accept = 127.0.0.1:8080
1247           connect = example.com:8443
1248
1249       An example of advanced engine configuration to use the certificate and
1250       the corresponding private key from a pkcs11 engine:
1251
1252           engine = pkcs11
1253           engineCtrl = MODULE_PATH:opensc-pkcs11.so
1254           engineCtrl = PIN:123456
1255
1256           [service]
1257           engineId = pkcs11
1258           client = yes
1259           accept = 127.0.0.1:8080
1260           connect = example.com:843
1261           cert = pkcs11:token=MyToken;object=MyCert
1262           key = pkcs11:token=MyToken;object=MyKey
1263
1264       An example of advanced engine configuration to use the certificate and
1265       the corresponding private key from a SoftHSM token:
1266
1267           engine = pkcs11
1268           engineCtrl = MODULE_PATH:softhsm2.dll
1269           engineCtrl = PIN:12345
1270
1271           [service]
1272           engineId = pkcs11
1273           client = yes
1274           accept = 127.0.0.1:8080
1275           connect = example.com:843
1276           cert = pkcs11:token=MyToken;object=KeyCert
1277

NOTES

1279   RESTRICTIONS
1280       stunnel cannot be used for the FTP daemon because of the nature of the
1281       FTP protocol which utilizes multiple ports for data transfers.  There
1282       are available TLS-enabled versions of FTP and telnet daemons, however.
1283
1284   INETD MODE
1285       The most common use of stunnel is to listen on a network port and
1286       establish communication with either a new port via the connect option,
1287       or a new program via the exec option.  However there is a special case
1288       when you wish to have some other program accept incoming connections
1289       and launch stunnel, for example with inetd, xinetd, or tcpserver.
1290
1291       For example, if you have the following line in inetd.conf:
1292
1293           imaps stream tcp nowait root /usr/bin/stunnel stunnel /etc/stunnel/imaps.conf
1294
1295       In these cases, the inetd-style program is responsible for binding a
1296       network socket (imaps above) and handing it to stunnel when a
1297       connection is received.  Thus you do not want stunnel to have any
1298       accept option.  All the Service Level Options should be placed in the
1299       global options section, and no [service_name] section will be present.
1300       See the EXAMPLES section for example configurations.
1301
1302   CERTIFICATES
1303       Each TLS-enabled daemon needs to present a valid X.509 certificate to
1304       the peer. It also needs a private key to decrypt the incoming data. The
1305       easiest way to obtain a certificate and a key is to generate them with
1306       the free OpenSSL package. You can find more information on certificates
1307       generation on pages listed below.
1308
1309       The .pem file should contain the unencrypted private key and a signed
1310       certificate (not certificate request).  So the file should look like
1311       this:
1312
1313           -----BEGIN RSA PRIVATE KEY-----
1314           [encoded key]
1315           -----END RSA PRIVATE KEY-----
1316           -----BEGIN CERTIFICATE-----
1317           [encoded certificate]
1318           -----END CERTIFICATE-----
1319
1320   RANDOMNESS
1321       stunnel needs to seed the PRNG (pseudo-random number generator) in
1322       order for TLS to use good randomness.  The following sources are loaded
1323       in order until sufficient random data has been gathered:
1324
1325       ·   The file specified with the RNDfile flag.
1326
1327       ·   The file specified by the RANDFILE environment variable, if set.
1328
1329       ·   The file .rnd in your home directory, if RANDFILE not set.
1330
1331       ·   The file specified with '--with-random' at compile time.
1332
1333       ·   The contents of the screen if running on Windows.
1334
1335       ·   The egd socket specified with the EGD flag.
1336
1337       ·   The egd socket specified with '--with-egd-sock' at compile time.
1338
1339       ·   The /dev/urandom device.
1340
1341       Note that on Windows machines that do not have console user interaction
1342       (mouse movements, creating windows, etc.) the screen contents are not
1343       variable enough to be sufficient, and you should provide a random file
1344       for use with the RNDfile flag.
1345
1346       Note that the file specified with the RNDfile flag should contain
1347       random data -- that means it should contain different information each
1348       time stunnel is run.  This is handled automatically unless the
1349       RNDoverwrite flag is used.  If you wish to update this file manually,
1350       the openssl rand command in recent versions of OpenSSL, would be
1351       useful.
1352
1353       Important note: If /dev/urandom is available, OpenSSL often seeds the
1354       PRNG with it while checking the random state.  On systems with
1355       /dev/urandom OpenSSL is likely to use it even though it is listed at
1356       the very bottom of the list above.  This is the behaviour of OpenSSL
1357       and not stunnel.
1358
1359   DH PARAMETERS
1360       stunnel 4.40 and later contains hardcoded 2048-bit DH parameters.
1361       Starting with stunnel 5.18, these hardcoded DH parameters are replaced
1362       every 24 hours with autogenerated temporary DH parameters.  DH
1363       parameter generation may take several minutes.
1364
1365       Alternatively, it is possible to specify static DH parameters in the
1366       certificate file, which disables generating temporary DH parameters:
1367
1368           openssl dhparam 2048 >> stunnel.pem
1369

FILES

1371       @sysconfdir@/stunnel/stunnel.conf
1372           stunnel configuration file
1373

BUGS

1375       The execArgs option and the Win32 command line do not support quoting.
1376

SEE ALSO

1378       tcpd(8)
1379           access control facility for internet services
1380
1381       inetd(8)
1382           internet 'super-server'
1383
1384       http://www.stunnel.org/
1385           stunnel homepage
1386
1387       http://www.openssl.org/
1388           OpenSSL project website
1389

AUTHOR

1391       Michał Trojnara
1392           <Michal.Trojnara@stunnel.org>
1393
1394
1395
13965.56                              2020.04.16                        stunnel(8)
Impressum