Stunnel官方手冊(中文翻譯)

        Stunnel是一款全局加密傳輸軟件(http://www.stunnel.org/),工做在Unix和Windows平臺上,做爲代理,能夠將應用程序發送的明文TCP流量加密,而無需從新配置應用程序自己。明文數據的例子包括POP三、IMAP、SMTP以及HTTP應用程序生成的任何內容。一旦將stunnel配置爲加密數據通道,經過該端口發送的任何內容都將使用SSL加密。兩端都須要安裝Stunnel,以便在傳遞到適當的應用程序以前將流量返回到明文。html

        我將Stunnel的官方英文文檔翻譯以下,但願有更多的人認識和使用這款軟件,將你的明文流量加密,以便安全地在因特網上傳輸。算法

        既然是說明文檔,就沒有那麼多實用性的例子,這方面你能夠在搜索引擎裏查找,本文再也不贅述。sql

        名稱api

       stunnel - TLS 卸載和負載平衡代理緩存

       將TLS加密通訊功能交由STUNNEL完成。安全

        簡

        Unix系統:

        stunnel [FILE] | -fd N | -help | -version | -sockets | -options服務器

        WIN32:網絡

        Stunnel[[-install |-uninstall |-start |-stop |-reload |-reopen |-exit[-quiet][FILE]]|-help |-version |-sockets |-optionssession

         描述app

        stunnel程序旨在用做遠程客戶端與本地(inetd-startable)、或與遠程服務器之間的TLS加密封裝。其概念是,在系統上運行不支持TLS的守護程序,您能夠輕鬆地將其設置爲經過安全TLS通道與客戶端進行通訊。

        stunnel能夠爲經常使用的Inetd守護進程添加TLS功能,如POP-二、POP-3和IMAP服務器,也能夠爲獨立的守護進程如NNTP、SMTP和HTTP添加TLS功能,還能夠在不改變源代碼的狀況下經過網絡套接字創建PPP隧道。

        該產品還包括由Eric Young編寫的加密軟件(eay@cryptsoft.com)

        OPTIONS

        FILE

        使用指定的配置文件

        -fd N (Unix only)

        從指定的文件描述符讀取配置文件

        -help

        顯示stunnel幫助菜單

        -version

        顯示stunnel版本號和編譯時的默認值

        -sockets

        顯示默認的socket選項

        -options

        顯示支持的TLS選項

        -install (Windows NT and later only)

        安裝NT服務

        -uninstall (Windows NT and later only)

        卸載NT服務

        -start (Windows NT and later only)

        開始NT服務

        -stop (Windows NT and later only)

        中止NT服務

        -reload (Windows NT and later only)

        reload運行中的NT服務的配置文件

        -reopen (Windows NT and later only)

        Reopen運行中的NT服務的log文件

        -exit (Win32 only)

        退出已啓動的stunnel

        -quiet (Win32 only)

        不顯示任何消息框

        配置文件

配置文件的每一行能夠是:

● 空行(忽略)

● 以;開頭的註釋(忽略)

● 「option_name=option_value」對

● 「 [service_name]」表示服務定義的開始

       選項的地址參數能夠是:

● 端口號

● 端口號

● 以冒號分隔的一對IP地址(IPv四、IPv6或域名)和端口號。

● Unix套接字路徑(Unix only)。

        全局選項

  chroot = DIRECTORY (Unix only)

chroot stunnel進程的目錄

chroot將stunnel保存在chrooted jail。CApath, CRLpath, pid and exec都位於chrooted jail。

patches必須與chroot指定的目錄相關。

操做系統的一些功能還須要將其文件放在chroot jail中,例如:

Delayed resolver一般須要 /etc/nsswitch.conf and /etc/resolv.conf

log文件中的本地時間須要 /etc/timezone

其餘一些功能可能須要設備,例如 /dev/zero or /dev/null

  compression = deflate | zlib

選擇數據壓縮算法,缺省是無壓縮。

Deflate是RFC 1951中描述的標準壓縮方法。

  debug = [FACILITY.]LEVEL

調試級別

Level是syslog級別的名稱或數字中的一個,即 emerg (0),alert (1), crit (2),err (3),warning (4),notice (5),info (6)或debug (7)。全部指定級別的日誌,以及全部數值小於該級別的日誌將被顯示。使用debug = debugdebug = 7來得到最大的調試輸出。默認值是notice (5)。

除非提供了設施名稱,不然將使用syslog設施「daemon」(Win32不支持這些功能)。

對於設施和級別都會忽略大小寫。

  EGD = EGD_PATH (Unix only)

Entropy Gathering Daemon socket的路徑,用於饋送給OpenSSL隨機數生成器。

         engine = auto | ENGINE_ID

選擇硬件或軟件加密引擎,缺省是純軟件加密。

關於使用加密設備中的證書,以及相應的私鑰的引擎配置,請參閱示例部分。

         engineCtrl = COMMAND[:PARAMETER]

控制硬件引擎。

         engineDefault = TASK_LIST

設置委派給當前引擎的OpenSSL任務,參數是以逗號分隔的任務列表。

若是引擎支持,如下任務可能可用:ALL、RSA、DSA、ECDH、ECDSA、DH、RAND、CIPHERS、DIGESTS、PKEY、PKEY_CRYPTO、PKEY_ASN1。

          fips = yes | no

啓用或禁用FIPS 140-2模式。

若是使用FIPS 140-2編譯了stunnel,此選項容許您禁用進入FIPS模式。默認值:否(從5.00版起)

          foreground = yes | quiet | no (Unix only)

前臺模式。留在前臺(不要分叉)。

使用yes參數,除了使用syslog和output指定的目標以外,還記錄到stderr。默認值:後臺駐留程序

          iconActive = ICON_FILE (GUI only)

創建鏈接後將顯示GUI圖標

在Windows平臺上,參數應該是一個包含16x16像素圖像的.ico文件。

          iconError = ICON_FILE (GUI only)

加載無效配置時顯示的GUI圖標。Windows平臺上,參數應該是一個包含16x16像素圖像的.ico文件。

          iconIdle = ICON_FILE (GUI only)

未創建鏈接時顯示的GUI圖標。

在Windows平臺上,參數應該是一個包含16x16像素圖像的.ico文件。

          log = append | overwrite

日誌文件處理。

容許你選擇在open(打開)或re-open(從新打開)時,是追加仍是覆蓋日誌文件(使用「output」選項指定)。

默認值:sppend(追加)。

   output = FILE

追加日誌信息到文件中。

/dev/stdout設備能夠用來發送日誌信息到標準輸出(例如用daemontools splogger記錄日誌消息)。

          pid = FILE (Unix only)

pid文件位置。若是該參數爲空,則不會建立任何pid文件。

若是指定了pid路徑,則該路徑是相對於chroot目錄的。

          RNDbytes = BYTES

從隨機種子文件讀取的字節數。

          RNDfile = FILE

種子數據的路徑。OpenSSL庫會首先使用該文件中的數據做爲隨機數生成器的種子。

         RNDoverwrite = yes | no

用新的隨機數據覆蓋隨機種子文件,默認值:是。

         service = SERVICE (Unix only)

stunnel服務名稱

指定的服務名用於syslog,並用做TCP封裝程序的inetd模式服務名稱。雖然此選項在技術上能夠在service sections中指定,但它僅在全局選項中有用。

默認值:stunnel

        syslog = yes | no (Unix only)

經過syslog啓用日誌記錄,默認值:是

        taskbar = yes | no (WIN32 only)

啓用任務欄圖標,默認值:是


SERVICE-LEVEL OPTIONS

每一個 configuration section以方括號中的服務名稱開始。服務名稱用於libwrap (TCP Wrappers) 訪問控制,並容許你在日誌文件中區分stunnel服務。

        請注意,若是你想在inetd模式下運行stunnel(在inetd模式下,由inetd、xinetd或tcpserver等服務器提供網絡套接字),那麼你應該閱讀下面的INETD MODE部分。

        accept = [HOST:]PORT

接受指定地址上的鏈接

若是未指定主機,則默認爲本地主機的全部IPv4地址。

要偵聽全部IPv6地址,請使用:

accept = :::PORT

        CApath = DIRECTORY

CA文件的目錄

這是stunnel在使用verifyChain或verifyPeer選項時查找證書的目錄。注意,這個目錄下的證書應該命名爲XXXXXXX.0,其中XXXXXXX是證書的DER編碼subject(主題)的哈希值。

OpenSSL 1.0.0中的哈希算法已經改變,從OpenSSL 0.x.x升級到OpenSSL 1.x.x時,須要對該目錄進行c_rehash。

若是指定了CApath路徑,它是相對於chroot目錄的。

        CAfile = CA_FILE

CA文件名。此文件包含多個CA證書,將與verifyChain和verifyPeer選項一塊兒使用。

        cert = CERT_FILE

證書鏈文件名。

該文件用於stunne對遠程客戶端或服務器進行身份驗證。它應該包含整個證書鏈,從實際的服務器/客戶端

證書開始,到自簽名的根CA證書結束,必須是PEM或P12格式。

在服務器模式下須要證書鏈,而在客戶端模式下則是可選的。

當啓用硬件引擎時,該參數也被用做 certificate identifier(證書標識符)。

        checkEmail = EMAIL

對端證書的郵件地址。

在一個service section中容許有多個checkEmail選項。

若是沒有指定subject checks(主題檢查),或者對等證書的電子郵件地址與checkEmail中指定的任何一個電

子郵件地址相匹配,則接受證書。該選項須要OpenSSL 1.0.2或更高的版本。

        checkHost = HOST

對等證書的主機。

在一個service section中容許使用多個checkHost選項。若是沒有指定subject checks(主題檢查),或者對等

證書的主機名稱與checkHost指定的任何主機相匹配,則接受證書。該選項須要OpenSSL 1.0.2或更高的版本。

        checkIP = IP

對等證書subject(主題)的IP地址。

在一個service section中容許有多個checkIP選項。 若是未指定subject checks(主題檢查),或者對等證書

的IP地址與用checkIP指定的任何IP地址匹配,則接受證書。此選項須要OpenSSL 1.0.2或更高版本。

        ciphers = CIPHER_LIST

擇容許的TLSciphers (TLSv1.2及如下)

此選項不影響TLSv1.3密碼套件。

TLS鏈接中容許使用的以冒號分隔的加密算法列表,例如DES-CBC3-SHA:IDEA-CBC-MD5。

        ciphersuites = CIPHERSUITES_LIST

選擇容許的TLSv1.3密碼套件。

以冒號分隔的TLSv1.3密碼套件名稱列表,按優先順序排列。此選項須要OpenSSL 1.1.1或更高版本。

默認值:TLS_cha20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256

        client = yes | no

客戶端模式(遠程服務器使用TLS),默認值:否(服務器模式)

        config = COMMAND[:PARAMETER]

OpenSSL配置命令

使用指定的參數執行OpenSSL配置命令,這容許從statnel配置文件中調用任何配置命令。支持的命令在SSL_CONF_cmd(3ssl)手冊頁面上有描述。

可使用幾個config行來指定多個配置命令。該選項須要OpenSSL 1.0.2或更高版本.

        connect = [HOST:]PORT

鏈接到遠程地址。若是未指定主機,則該主機默認爲localhost。

單個service section中容許多個鏈接選項。

若是主機解析爲多個地址和/或指定了多個鏈接選項,則使用循環算法選擇遠程地址。

        CRLpath = DIRECTORY

存放證書吊銷列表的目錄。

這是stunnel在使用verifyChain和verifyPeer選項時查找crl的目錄。請注意,此目錄中的CRL應命名爲xxxxxxx.r0,其中xxxxxxx是CRL的哈希值。

OpenSSL 1.0.0中的哈希算法已更改。從OpenSSL 0.x.x升級到OpenSSL 1.x.x時須要對該目錄進行c_rehash。

若是指定了CRLpath路徑,則是相對於chroot目錄的。

        CRLfile = CRL_FILE

證書吊銷列表文件。此文件包含多個CRL,與verifyChain和verifyPeer選項一塊兒使用。

        curves = list

「:」分隔的ECDH曲線

對於早於1.1.0的OpenSSL,只容許使用一個曲線名稱。

要獲取支持曲線的列表,請使用:

openssl ecparam -list_curves

違約:

X25519:P-256:X448:P-521:P-384(OpenSSL 1.1.1或更高版本)

prime256v1(OpenSSL早於1.1.1)

        logId = TYPE

鏈接標識符類型。此標識符容許您區分爲每一個鏈接生成日誌條目。

當前支持的類型:

sequential

數字順序標識符僅在單個通道實例中是惟一的,但很是緊湊。 它對於手動日誌分析最有用。

unique

該字母數字標識符是全局惟一的,但比序列號長。 它對於自動日誌分析最有用。

thread

操做系統線程標識符既不是惟一的(即便在一個stunnel實例內),也不是很短。它對調試軟件或配置問題最

有用。操做系統進程標識符(PID)在inetd模式下可能頗有用。

默認值:sequential

        debug = LEVEL

調試級別。

LEVEL(級別)是系統日誌級別名稱或數字 emerg (0)、alert (1)、crit (2)、err (3)、warning (4)、notice (5)、

info (6)或 debug (7)中的一個。指定級別的全部日誌,以及數值小於該級別的全部日誌都將被顯示。使用debug= debug或debug = 7 以得到最大的調試輸出。默認值是notice (5)。

        delay = yes | no

延遲connect option的DNS查找。

此選項對於動態DNS或在stunnel啓動期間DNS不可用(road warrior ***,撥號配置)很是有用。

若是stunnel啓動時沒法解析服務的任何鏈接目標,將自動啓用延遲解析程序模式。

默認:no

        engineId = ENGINE_ID

選擇服務的引擎ID。

        engineNum = ENGINE_NUMBER

選擇服務的engine numbe。

engines從1開始編號。

        exec = EXECUTABLE_PATH

執行本地inetd類型程序

exec path是相對於chroot目錄的(若是指定)。

在Unix平臺上設置瞭如下環境變量:REMOTE_HOST,REMOTE_PORT,SSL_CLIENT_DN,SSL_CLIENT_I_DN。

        execArgs = $0 $1 $2 ...

exec的參數,包括program name ($0)

目前不支持引用。參數之間用任意數量的空格分隔。

        failover = rr | prio

多個 "connect" 目標的故障轉移策略。

rr

循環-公平負載分配。

prio

優先級 - 使用配置文件中指定的順序

default: prio

        ident = USERNAME

使用IDENT(RFC 1413)檢查username(用戶名)。

        include = DIRECTORY

包括全部位於DIRECTORY中的配置文件部分。

文件按其名稱的升序排列。建議使用的文件名慣例是:

對於全局選項:

        00-global.conf

對於local service-level options:

        01-service.conf

        02-service.conf

        key = KEY_FILE

        cert選項指定的證書的私鑰。

        須要一個私鑰來驗證證書全部者的身份。因爲這個文件應該是保密的,因此只有它的擁有者才能夠讀取。

        在Unix系統中,你可使用如下命令。

            chmod 600 keyfile

        當啓用硬件引擎時,該參數也被用做私鑰標識符。

        默認:cert選項的值。

        libwrap = yes | no

啓用或禁用 /etc/hosts.allow and /etc/hosts.deny.

默認:no (自5.00版本起)

        local = HOST

默認狀況下,出站接口的IP地址用做遠程鏈接的源。使用此選項能夠綁定本地靜態IP地址。

        OCSP = URL

選擇OCSP響應者進行證書驗證。

        OCSPaia = yes | no

與AIA OCSP響應者一塊兒驗證證書

此選項使stunnel使用從AIA(Authority Information Access受權信息訪問)擴展獲取的OCSP響應者URL列表

來驗證證書。

        OCSPflag = OCSP_FLAG

指定OCSP響應者標誌。多個OCSPflag可用於指定多個標誌。

當前受支持的標誌:NOCERTS,NOINTERN,NOSIGS,NOCHAIN,NOVERIFY,NOEXPLICIT,NOCASIGN,NODELEGATED,

NOCHECKS,TRUSTOTHER,RESPID_KEY,NOTIME

        OCSPnonce = yes | no

發送並驗證OCSP nonce擴展。

該選項能夠保護OCSP協議免受重放***。因爲計算開銷,nonce擴展一般只支持內部(例如公司)響應者,

而不支持公共OCSP響應者。

        options = SSL_OPTIONS

OpenSSL library options

參數是SSL_CTX_set_options(3ssl)手冊中描述的OpenSSL選項名稱,但沒有SSL_OP_ prefix。stunnel -options列

出了stunnel,和用於構建stunnel的OpenSSL庫的當前組合中容許的選項。

可使用多個行指定多個選項,選項名稱前面能夠加上短劃線(「-」)以禁用該選項。

例如,爲了與錯誤的Eudora TLS實現兼容,可使用如下選項。

    options = DONT_INSERT_EMPTY_FRAGMENTS

默認狀況下:

    options = NO_SSLv2

    options = NO_SSLv3

使用OpenSSL 1.1.0或更高版本進行編譯時,請使用sslVersionMax或sslVersionMin選項,而不是禁用特定的TLS協議版本。

        protocol = PROTO

能協商TLS的應用程序協議。

這個選項能夠實現TLS加密的初始化、特定協議的協商。本選項不該與單獨端口上的TLS加密一塊兒使用。

當前支持的協議:

cifs

在Samba中實現的CIFS協議的專有(undocummented)擴展。在Samba 3.0.0中取消了對該擴展的支持。

connect

基於RFC 2817 - 在HTTP/1.1中升級到TLS,第5.2節 - 使用CONNECT請求隧道。

僅在客戶端模式下支持此協議。

imap

於RFC 2595-將TLS與IMAP,POP3和ACAP結合使用。

nntp

基於RFC 4642-使用傳輸層安全(TLS)和網絡新聞傳輸協議(NNTP)。

僅在客戶端模式下支持此協議。

pgsql

基於:http://www.postgresql.org/docs/8.3/static/protocol-flow.html#AEN73982

pop3

基於RFC 2449-POP3擴展機制。

proxy

使用HAProxy代理協議版本1傳遞原始客戶端IP:

 https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt

smtp

基於RFC 2487:Secure SMTP over TLS的SMTP服務擴展。

基於socks

支持SOCKS 四、4a和5版本。SOCKS協議自己被封裝在TLS加密層中,以保護最終目的地址。

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

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

不支持SOCKS協議的BIND命令,忽略USERID參數。

有關基於SOCKS加密虛擬專用網的示例配置文件,請參見示例部分。

        protocolAuthentication = AUTHENTICATION

協議協商的認證類型。

目前,這個選項只在客戶端的「connect」和「smtp」協議中被支持。

「connect "協議支持的身份認證類型是 "basic "或 "ntlm";默認的 "connect "身份認證類型是 "basic "。

」smtp "協議支持的認證類型是 "plain "或 "login",默認的 "smtp "認證類型是 "basic "或 "ntlm",

默認的「smtp」認證類型是「plain」。

        protocolDomain = DOMAIN

協議協商的域。目前,此選項僅在客戶端「connect」協議中受支持。

        protocolHost = HOST:PORT

協議協商的目的地址。

protocolHost指定要經過代理鏈接的最終TLS服務器,而不是經過stunnel直接鏈接的代理服務器。

代理服務器應使用「鏈接」選項指定。

當前,協議目標地址僅適用於「connect "協議。

        protocolPassword = PASSWORD

協議協商的密碼。

目前,此選項僅在客戶端「connect」和「smtp」協議中受支持。

        protocolUsername = USERNAME

協議協商的用戶名。

當前,僅在客戶端「connect」和「 smtp」協議中支持此選項。

        PSKidentity = IDENTITY

PSK客戶端的PSK標識。

PSK identity能夠在stunnel客戶端上使用,以選擇用於身份驗證的PSK標識,server sections忽略此選項。

默認值:PSKsecrets文件中指定的第一個標識。

        PSKsecrets = FILE

具備PSK標識和相應密鑰的文件

文件的每一行格式以下:

    IDENTITY:KEY

十六進制密鑰自動轉換爲二進制形式。密鑰至少要有16個字節長,這意味着十六進制密鑰至少要有32個字

符。文件既不該該是全局可讀的,也不該該是全局可寫的。

        pty = yes | no (Unix only)

爲「exec」選項分配一個僞終端。

        redirect = [HOST:]PORT

在基於證書的身份驗證失敗時重定向TLS客戶端鏈接。

此選項僅在服務器模式下工做。一些協議協商也與redirect選項不兼容。

        renegotiation = yes | no

支持TLS從新協商。

TLS從新協商的應用程序包括某些身份驗證方案,或從新設置持久鏈接的密鑰。

另外一方面,此功能能夠觸發CPU耗盡DoS***。

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

請注意,禁用TLS從新協商並不能徹底緩解這個問題。

默認:yes(若是OpenSSL支持)

        reset = yes | no

嘗試使用TCP RST標誌指示錯誤,在某些平臺上不支持此選項。

默認: yes

        retry = yes | no

斷開鏈接後從新鏈接:connect+exec section

默認: no

        requireCert = yes | no

須要客戶端證書來驗證Chain或verifyPeer。

若是requireCert設置爲no,stunnel服務器將接受未提供證書的客戶端鏈接。

verifyChain = yes和verifyPeer = yes都意味着requireCert = yes。

默認: no

        setgid = GROUP (Unix only)

Unix group id

做爲全局選項:在守護模式下,設置setgid()爲指定的組,並清除全部其餘組。

            做爲service-level選項:設置用"accept"指定的Unix套接字組。

        setuid = USER (Unix only)

Unix user id

做爲全局選項:在守護程序模式下將setgid()設置爲指定的組,而後清除全部其餘組。

做爲服務級選項:設置用「accept」指定的Unix socket組。

        sessionCacheSize = NUM_ENTRIES

會話緩存大小

sessionCacheSize指定內部會話緩存條目的最大數量。

值爲0時可用於無限大小。因爲存在內存耗盡DoS ***的風險,不建議在生產中使用。

        sessionCacheTimeout = TIMEOUT

會話緩存超時。這是保留緩存的TLS會話的秒數。

        sessiond = HOST:PORT

Sessiond TLS緩存服務器的地址。

        sni = SERVICE_NAME:SERVER_NAME_PATTERN (server mode)

將該服務用做從屬服務(基於名稱的虛擬服務器),用於服務器名稱指示TLS擴展(RFC 3546)。

SERVICE_NAME指定使用accept選項接受客戶端鏈接的主服務。SERVER_NAME_PATTERN指定要重定向的

主機名。模式能夠以'*'字符開頭,例如*.example.com。

一般爲單個主服務指定多個從服務,也能夠在單個從屬服務中屢次指定sni選項。

該服務以及主服務可能沒法在客戶端模式下配置。

當指定connect 選項時,從屬服務的connect選項會被忽略,由於協議會在TLS握手以前鏈接到遠程主機。

Libwrap檢查(僅限Unix)會執行兩次:在接受TCP鏈接後檢查主服務名稱,在TLS握手期間檢查從服務名稱。

sni選項僅在使用OpenSSL 1.0.0及更高版本進行編譯時纔可用。

        sni = SERVER_NAME (client mode)

使用該參數做爲TLS服務器名稱指示(RFC 3546)擴展的值。

空的SERVER_NAME將禁用發送SNI擴展。

sni選項僅在使用OpenSSL 1.0.0及更高版本進行編譯時纔可用。

        socket = a|l|r:OPTION=VALUE[:VALUE]

在accept/local/remote套接字上設置一個選項。

linger選項的值是l_onof:l_linger。時間值是tv_sec:tv_usec。

例子:

socket = l:SO_LINGER=1:60

        設置一分鐘超時以關閉本地套接字

socket = r:SO_OOBINLINE=yes

        將帶外數據直接放入

        接收遠程套接字數據流

    socket = a:SO_REUSEADDR=no

        禁用地址重用(默認狀況下已啓用)。

    socket = a:SO_BINDTODEVICE=lo

        只接受環回接口的鏈接

        sslVersion = SSL_VERSION

選擇TLS協議版本.

支持的版本:all,SSLv2,SSLv3,TLSv1,TLSv1.1,TLSv1.2,TLSv1.3。

特定協議的可用性取決於所連接的OpenSSL庫。舊版本的OpenSSL不支持TLSv1.一、TLSv1.2和TLSv1.3。

較新版本的OpenSSL不支持SSLv2。

已過期的SSLv2和SSLv3目前默認爲禁用。

Setting the option

    sslVersion = SSL_VERSION

is equivalent to options

    sslVersionMax = SSL_VERSION

    sslVersionMin = SSL_VERSION

當用OpenSSL 1.1.0和更高版本編譯時。

        sslVersionMax = SSL_VERSION

支持的最高協議版本。

支持的版本:all、SSLv三、TLSv一、TLSv1.一、TLSv1.二、TLSv1.3

全部啓用的協議版本都不超過連接的OpenSSL庫支持的最高版本。

特定協議的可用性取決於連接的OpenSSL庫。

本選項僅在使用OpenSSL 1.1.0和更高版本編譯時可用。

默認: all

        sslVersionMin = SSL_VERSION

最低支持的協議版本。

支持的版本:all,SSLv3,TLSv1,TLSv1.1,TLSv1.2,TLSv1.3。

全部啓用的協議版本都是連接的OpenSSL庫所支持的最低版本。

特定協議的可用性取決於所連接的OpenSSL庫。

sslVersionMin選項只有在使用OpenSSL 1.1.0及更高版本編譯時纔可用。

默認: TLSv1

        stack = BYTES (except for FORK model)

建立線程的CPU堆棧大小。

線程堆棧大小過大會增長虛擬內存的使用量。反之不足可能會致使應用程序崩潰。

默認值:65536字節(對咱們測試的全部平臺來講都足夠了)。

        ticketKeySecret = SECRET

十六進制對稱密鑰,用於會話票據的機密性保護。

RFC 5077中定義的會話票據提供了一種加強的會話恢復能力,在這種狀況下,服務器端緩存不須要維護每一個

會話狀態。

結合 ticketKeySecret和ticketMacSecret選項,能夠在其餘集羣節點上恢復協商的會話,或者在服務器重啓後恢復協商的會話。

密鑰的長度要求爲16或32字節,這意味着正好是32或64個十六進制數字。 能夠選擇在兩個字符的十六進制字節之間使用冒號。

該選項只適用於服務器模式。

ticketKeySecret選項只有在使用OpenSSL 1.0.0或更高版本編譯時才能使用。

對於早於1.1.1的OpenSSL的票證支持,須要禁用NO_TICKET選項,但請注意,此選項與redirect選項不兼容。

        ticketMacSecret = SECRET

十六進制對稱密鑰,用於會話票據的完整性保護。

密鑰的長度要求爲16或32字節,這意味着正好是32或64個十六進制數字。能夠選擇在兩個字符的十六進制字節之間使用冒號。

該選項只適用於服務器模式。

ticketMacSecret 選項只有在使用 OpenSSL 1.0.0 或更高版本編譯時纔可用。

    TIMEOUTbusy = SECONDS

等待預期數據的時間

    TIMEOUTclose = SECONDS

等待close_notify的時間(對於有問題的MSIE,設置爲0)。

    TIMEOUTconnect = SECONDS

等待鏈接到遠程主機的時間

    TIMEOUTidle = SECONDS

保持空閒鏈接的時間

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

在選定平臺上啓用透明代理支持。

支持的值:

none

禁用透明代理支持。這是默認的。

source

重寫地址,使其看起來就像被封裝的守護進程從TLS客戶端鏈接,而不是從運行stunnel的機器鏈接。

該選項目前在如下狀況下可用:

Linux>=2.6.28上的遠程模式(connect選項)。

此配置要求stunnel以根用戶身份執行沒有setuid選項。

此配置要求對iptables和路由進行如下設置(可能在/etc/rc.local或等效文件中):

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

stunnel也必須以root身份執行且不使用setuid選項。

Linux 2.2.x上的遠程模式(鏈接選項)

此配置要求使用透明代理選項編譯內核。鏈接的服務必須安裝在單獨的主機上。路由到客戶端必須經過stunnel box。

stunnel還必須以root身份執行且沒有setuid選項。

FreeBSD >=8.0上的遠程模式(connect選項)

本配置須要額外的防火牆和路由設置。stunnel也必須以root身份執行且不使用setuid選項。

本地模式 (exec選項)

本配置是經過預加載libstunnel.so共享庫來實現的,在Tru64上使用_RLD_LIST環境變量,在其餘平臺上使用LD_PRELOAD變量。

destination

使用原始目的地而不是connect選項。

透明目的地的service section可能以下所示:

    [transparent]

    client = yes

    accept = <stunnel_port>

    transparent = destination

此配置須要在/etc/rc.local或等效文件中進行iptables設置才行。

對於安裝在同一主機上的鏈接目標:

    /sbin/iptables -t nat -I OUTPUT -p tcp --dport <redirected_port> \

         -m ! --uid-owner <stunnel_user_id> \

         -j DNAT --to-destination <local_ip>:<stunnel_port>

對於安裝在遠程主機上的鏈接目標:

    /sbin/iptables -I INPUT -i eth0 -p tcp --dport <stunnel_port> -j ACCEPT

    /sbin/iptables -t nat -I PREROUTING -p tcp --dport <redirected_port> \

        -i eth0 -j DNAT --to-destination <local_ip>:<stunnel_port>

目前僅在Linux上支持transparent destination選項.

both

同時使用源和目的透明代理。

爲了向後兼容,還支持兩個傳統選項:

yes

此選項已更名爲source。

no

此選項已經更名爲none。

        verify = LEVEL

驗證對端證書。該選項已過期,應替換爲verifyChain和verifyPeer選項。

level 0

請求證書但不驗證證書。

level 1

若是存在證書就驗證。

level 2

驗證對端證書。

level 3

根據本地安裝的證書驗證對等方。

level 4

忽略證書鏈,只驗證對端的證書。

默認:不驗證。

        verifyChain = yes | no

驗證從根CA開始的對端證書鏈。

對於服務器證書的驗證,還須要用checkHost或checkIP來要求特定的證書。

自簽名的根CA證書須要存儲在CAfile指定的文件中,或者是CApath指定的目錄中。

默認:no

        verifyPeer = yes | no

驗證對端證書。

對端證書須要存儲在CAfile指定的文件中或CApath指定的目錄中。

默認值:no

返回值

stunnel成功時返回0,錯誤時返回非0。

信號

SIGHUP

強制從新加載配置文件。

某些全局選項將不會從新加載:

● chroot

● foreground

● pid

● setgid

● setuid

使用'setuid'選項還能夠防止在重載配置期間將stunnel綁定到特權(<1024)端口。

當使用'chroot'選項時,stunnel將在chroot jail中查找全部文件(包括配置文件、證書、log文件和pid文件)。

SIGUSR1

關閉並從新打開隧道日誌文件。 此功能可用於日誌輪換。

SIGUSR2

記錄活動鏈接列表。

SIGTERM, SIGQUIT, SIGINT

關閉stunnel。

向服務器發送的任何其餘信號未定義。

例子

爲了向您的本地imapd服務提供TLS封裝,請使用:

    [imapd]

    accept = 993

    exec = /usr/sbin/imapd

    execArgs = imapd

或在遠程模式下:

    [imapd]

    accept = 993

    connect = 143

爲了讓本地電子郵件客戶端鏈接到另外一臺啓用了TLS的imapd服務器,請將電子郵件客戶端配置爲鏈接到端口119上的本地主機,並使用:

    [imap]

    client = yes

    accept = 143

    connect = servername:993

若是要在端口2020上爲pppd守護進程提供隧道,請使用:

    [V.P.N]

    accept = 2020

    exec = /usr/sbin/pppd

    execArgs = pppd local

    pty = yes

若是要在inetd模式下使用stunnel啓動imapd進程,可使用stunnel.conf格式。注意不能有[service_name]

這一部分:

    exec = /usr/sbin/imapd

    execArgs = imapd

要設置SOCKS ***,請配置如下客戶端服務:

    [socks_client]

    client = yes

    accept = 127.0.0.1:1080

    connect = ***_server:9080

    verifyPeer = yes

    CAfile = stunnel.pem

The corresponding configuration on the ***_server host:

    [socks_server]

    protocol = socks

    accept = 9080

    cert = stunnel.pem

    key = stunnel.key

***服務器主機上的相應配置:

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

服務器模式SNI配置示例:

    [virtual]

    ; master service

    accept = 443

    cert =  default.pem

    connect = default.internal.mydomain.com:8080

 

    [sni1]

    ; slave service 1

    sni = virtual:server1.mydomain.com

    cert = server1.pem

    connect = server1.internal.mydomain.com:8081

 

    [sni2]

    ; slave service 2

    sni = virtual:server2.mydomain.com

    cert = server2.pem

    connect = server2.internal.mydomain.com:8082

    verifyPeer = yes

    CAfile = server2-allowed-clients.pem

高級引擎配置的示例容許使用Windows證書存儲區(僅Windows)中存儲的私鑰進行身份驗證。使用CAPI引擎,您無需手動選擇要使用的客戶端密鑰。根據服務器信任的CA列表自動選擇客戶端密鑰。

    engine = capi

 

    [service]

    engineId = capi

    client = yes

    accept = 127.0.0.1:8080

    connect = example.com:8443

    一個高級引擎配置的例子,可使用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

    一個高級引擎配置的例子,使用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不能用於FTP守護進程,由於FTP協議的本質是使用多個端口進行數據傳輸。但FTP和telnet守護進程也有一些啓用了TLS的版本。

        INETD MODE

        stunnel最多見的用途是監聽一個網絡端口,並經過connect選項與一個新的端口創建通訊,或經過exec選項與一個新的程序創建通訊。可是,若是但願其餘程序接受傳入鏈接並啓動stunnel,例如使用inetd、xinetd或tcpserver,則有一種特殊狀況。

例如,若是你在inetd.conf中有如下一行:

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

在這些狀況下,inetd-style程序負責綁定一個網絡套接字(上面的imaps),並在收到鏈接時將其傳遞給stunnel。所以你不但願 stunnel 有任何 accept 選項。全部的 Service Level 選項都應該放在全局選項部分,而不會出現[service_name]部分。參見例子部分的配置示例。

        證書

        每一個啓用TLS的守護進程都須要向對等方提供有效的X.509證書。它還須要一個私鑰來解密傳入的數據。獲取證書和私鑰的最簡單方法是使用免費的OpenSSL軟件包生成它們。您能夠在下面列出的頁面上找到更多的關於證書生成的信息。

.pem文件應包含未加密的私鑰和已簽名的證書(不是證書請求)。因此文件應該是這樣的:

    -----BEGIN RSA PRIVATE KEY-----

    [encoded key]

    -----END RSA PRIVATE KEY-----

    -----BEGIN CERTIFICATE-----

    [encoded certificate]

    -----END CERTIFICATE-----

        隨機性

爲了讓TLS使用良好的隨機性,stunnel須要將PRNG(僞隨機數生成器)種子化。

依次加載如下源,直到收集到足夠的隨機數據爲止:

● 用RNDfile標誌指定的文件。

● 由RANDFILE環境變量指定的文件(若是已設置)。

● 若是未設置RANDFILE,則返回主目錄中的file.rnd。

● 編譯時用'--with random'指定的文件。

● 若是在Windows上運行,則屏幕的內容。

● 用EGD標誌指定的EGD套接字。

● 編譯時用「--with-egd sock」指定的EGD套接字。

● /dev/urandom設備。

請注意,在沒有控制檯用戶交互(鼠標移動、建立窗口等)的Windows計算機上,屏幕內容的可變性不能知足須要,你應該提供一個隨機文件以供RNDfile標誌使用。

注意,用RNDfile標誌指定的文件應該包含隨機數據——也就是說每次運行stunnel時,它應該包含不一樣的信息。除非使用RNDoverwrite標誌,不然會自動處理這個文件。若是你想手動更新這個文件,最新OpenSSL版本中的openssl rand命令會頗有用。

重要提示:若是/dev/urandom可用,那麼OpenSSL一般會在檢查隨機狀態時將PRNG隨其種子化。

在具備/ dev /urandom的系統上,即便OpenSSL位於上面列表的最底部,也可能會使用它,這是OpenSSL的行爲,而不是stunnel的行爲。

        DH 參數

stunnel 4.40及更高版本包了含硬編碼的2048位DH參數。從stunnel 5.18開始,這些硬編碼的DH參數每24小時被自動生成的臨時DH參數取代,DH參數生成可能須要幾分鐘的時間。

另外,能夠在證書文件中指定靜態DH參數,這將禁用生成臨時DH參數:

    openssl dhparam 2048 >> stunnel.pem

        文件

/usr/local/etc/stunnel/stunnel.conf

stunnel 配置文件

        BUGS

execArgs選項和Win32命令行不支持引號。

        另見:

tcpd(8)

互聯網服務的訪問控制設施。

inetd(8)

internet 'super-server'

http://www.stunnel.org/

stunnel 主頁

http://www.openssl.org/

OpenSSL項目站點

        做者

Michał Trojnara

<Michal.Trojnara@stunnel.org>

相關文章
相關標籤/搜索