sslTunnel 文档
sslTunnel 是用于保护 TCP 客户端和服务器之间所传输数据的免费软件。它被设计为 SSL 加密管道,使用 TLS/SSL 加密所传输的消息并允许安全地通信,且无需修改 TCP 连接两侧所运行的程序。
安装
Debian,Ubuntu
从 下载 页下载合适的
.deb
包,然后进行安装:sudo dpkg -i ssltunnel-linux-XXXX.deb
编辑配置文件
/etc/ssltunnel/config.json
, 在其中定义 SSL 隧道。启动
ssltunnel
服务。sudo systemctl start ssltunnel.service
CentOS,Rocky,AlmaLinux,Oracle linux,Springdale,Fedora,RedHat
从 下载 页下载合适的
.rpm
包,然后进行安装:sudo yum install ssltunnel-linux-XXXX.rpm # 或 'sudo dnf install ssltunnel-linux-XXXX.rpm'
编辑配置文件
/etc/ssltunnel/config.json
, 在其中定义 SSL 隧道。启动
ssltunnel
服务。sudo systemctl start ssltunnel.service
macOS,Windows,FreeBSD,OpenBSD,NetBSD,DragonFly,其它 Linux
从 下载 页下载合适的
.zip
包,然后解压:可选的,创建一个用户以便运行
ssltunnel
。创建配置文件
ssltunnel.json
, 在其中定义 SSL 隧道。启动
ssltunnel
:sudo ssltunnel --config=ssltunnel.json
命令行
用法
ssltunnel [--config=<CONFIG_FILE>] [--mono] [--foreground] [--show-pid] # 作为守护进程服务运行
ssltunnel --showcfg [--config=<CONFIG_FILE>] [--passphrase] [--mono] # 显示当前配置
ssltunnel --version [--mono] # 显示版本信息
ssltunnel --help # 显示该帮助信息选项
--config=<CONFIG_FILE>
: 指定配置文件。如果未指定,则按顺序使用以下文件。命令 ssltunnel 所在目录下的
ssltunnel.json
文件。当前用户主目录下的
~/ssltunnel.json
文件。文件
/etc/ssltunnel/config.json
(Windows 除外)。
--foreground
:使用当前用户和组在前台运行 ssltunnel,而不创建新进程。默认情况下,ssltunnel 将读取配置文件,然后使用配置中指定的用户和组派生一个新进程,并退出当前进程。--show-pid
:显示进程 ID。如果未指定--foreground
选项,则显示时派生新进程的进程 ID。--mono
: 禁用彩色输出。--showcfg
:显示当前配置。--passphrase
:指定在显示当前配置时显示证书私钥的加密短语。--help
: 显示 ssltunnel 帮助信息。--version
: 显示版本信息。
配置文件
# sslTunnel 配置文件。 # 启动 ssltunnel 的用户必须具有该配置文件的读取权限。下面设置的运行 ssltunnel 的用户不需要拥有该文件的任 # 何权限。通常使用 root 用户启动 ssltunnel,因此应将配置文件的所有者和组设置为 root 用户和组,并将其权限 # 设置为 400。 { # 指定运行服务的用户。如果未指定 --foreground 选项,ssltunnel 运行后将派生一个属于该用户的新进程,然 # 后终止当前进程。该用户不需要拥有该配置文件、证书文件和证书私钥文件的任何权限。 "user": "ssltunnel", # 指定运行服务的用户组。如果未指定 --foreground 选项,ssltunnel 运行后将派生一个属于该用户组的新进程, # 然后终止当前进程。 "group": "ssltunnel", # 隧道定义 "tunnels": [ # 首个隧道定义 { # 监听设置: # - 当用作 SSL 隧道服务器时:监听 SSL 隧道客户端的传入连接。 # - 当用作 SSL 隧道客户端时:监听下游应用客户端的传入连接。 "listen": { # 隧道监听地址 (包括 IPv4 和 IPv6,空白表示监听所有 IPv4 和 IPv6 地址,IPv6 不需 # 要方括号)。 "address": "127.0.0.1", # 隧道监听端口。 "port": 4120, # 服务器证书。 # - 当用作 SSL 隧道服务器时:指定服务器证书以监听 ssltunnel 客户端传入的加密连接。如 # 果允许使用多个域名连接服务器,则需要为每个域名指定一个证书 (也可以使用泛域名证书和 # 多域名证书)。 # - 当用作 SSL 隧道客户端时:不指定服务器证书以便监听应用客户端传入的未加密连接。剩余的 # 监听设置 ("client-auth"、"client-verify"、"ca" 和 "custom") 将被忽略。 "certs": [ # 首个证书。 { # 证书文件,或者完整的证书链文件的路径 (如果是相对路径,则以该配置文件所在目录 # 为基准)。启动 ssltunnel 的用户必须具有该文件的读取权限。前面所设置的运行 # ssltunnel 的用户不需要拥有该文件的任何权限。 "cert": "...", # 私钥文件路径 (如果是相对路径,则以该配置文件所在目录为基准)。启动 ssltunnel # 的用户必须具有该文件的读取权限。前面所设置的运行 ssltunnel 的用户不需要拥有 # 该文件的任何权限。通常使用 root 用户启动 ssltunnel,因此需将证书私钥文件的 # 所有者和组设置为 root 用户和组,并将其权限设置为 400。 "key": "...", # 如果证书私钥已加密则指定加密短语,否则启动 ssltunnel 时会提示用户输入加密短 # 语。 "passphrase": "..." }, # 其它证书。 ... ], # 指定服务器的 TLS 客户端身份验证策略。 # - no: 表示握手期间不请求客户端发送证书,如果发送任何证书,则不会对其进行验证。 # - request: 表示握手期间请求客户端发送证书,但不强求客户端发送任何证书。 # - any: 表示握手期间请求客户端发送证书,并且客户端至少需要发送一个证书,但不要 # 求该证书有效。 # - optional: 表示握手期间请求客户端发送证书,但不强求客户端发送证书。如果客户端确实 # 发送了证书,则该证书必须有效。 # - verify: 表示握手期间请求客户端发送证书,并且客户端至少需要发送一个有效的证书。 "client-auth": "verify", # 决定服务器如何验证客户端证书: # - cert: 依据下面 "ca" 中指定的证书仅验证客户端证书的末端 (叶) 证书。 # - ca: 从根 CA 证书开始验证客户端证书链。 "client-verify": "ca", # 证书颁发机构文件,指定一个或多个证书,用于验证客户端证书。如果使用相对路径,则以该配置 # 文件所在的目录为基准。如果前面的 "client-auth" 设置为 "optional" 或 "verify", # 则该项必需指定。启动 ssltunnel 的用户必须具有读取这些文件的权限。前面所设置的运行 # ssltunnel 的用户不需要这些文件的任何权限。 # - 如果前面 "client-verify" 设置为 "cert":此处指定所有客户端的客户端证书,仅需末端 # (叶) 证书。可以指定多个证书文件,每个文件可以包含多个末端 (叶) 客户端证书。 # - 如果前面 "client-verify" 设置为 "ca":此处指定所有客户端证书从根 CA 证书开始的颁 # 发证书链。可以指定多个证书链文件。 "ca": [ # 首个证书或证书链文件。 "...", # 其它证书或证书链文件。 ... ], # 定制配置。参见 定制配置。 "custom": "..." }, # 连接设置: # - 当用作 SSL 隧道服务器时:连接到上游的应用服务器。 # - 当用作 SSL 隧道客户端时:连接到 SSL 隧道服务器。 "connect": { # 要连接的目标地址,可以是 IP 地址(包括 IPv4 和 IPv6,IPv6 不需要方括号),也可以是 # 域名。如果要连接目标服务器是 TLS/SSL 服务器,通常需要在这里指定域名,否则需要在下面 # 的 "server-name" 中指定域名,以便服务器提供合适的证书。 "address": "domain.com", # 要连接的目标端口。 "port": 3690, # 连接超时 (秒),默认值为 10 秒。 "timeout": 10, # 指定所连接的服务器是否是 TLS/SSL 加密服务器。如果设置为 false,则剩余的连接设置 # ("server-name"、"certs"、"server-verify"、"ca" 和 "custom") 将被忽略。 # - 当用作 SSL 隧道服务器时:设置为 false 以便连接上游的应用服务器。 # - 当用作 SSL 隧道客户端时:设置为 true 以便连接 SSL 隧道服务器。 "tls": true, # 指定客户端所发送的服务器名称标识。如果未设置,则使用前面 "address" 的设置值。如果 # "address" 设置为 IP 地址,则该项是必需的,且值必须与服务器最少一个证书相匹配。 "server-name": "domain.com", # 如果服务器需要验证客户端证书,则指定客户端证书。 "certs": [ # 首个证书。 { # 证书文件,或者完整的证书链文件的路径 (如果是相对路径,则以该配置文件所在目录 # 为基准)。启动 ssltunnel 的用户必须具有该文件的读取权限。前面所设置的运行 # ssltunnel 的用户不需要拥有该文件的任何权限。 "cert": "...", # 私钥文件路径 (如果是相对路径,则以该配置文件所在目录为基准)。启动 ssltunnel # 的用户必须具有该文件的读取权限。前面所设置的运行 ssltunnel 的用户不需要拥有 # 该文件的任何权限。通常使用 root 用户启动 ssltunnel,因此需将证书私钥文件的 # 所有者和组设置为 root 用户和组,并将其权限设置为 400。 "key": "...", # 如果证书私钥已加密则指定加密短语,否则启动 ssltunnel 时会提示用户输入加密短 # 语。 "passphrase": "..." }, # 其它证书。 ... ], # 确定客户端如何验证服务器证书: # - skip: 不验证服务器证书,下面的 "ca" 设置将被忽略。 # - cert: 仅依据下面 "ca" 设置中所指定的证书验证服务器证书的末端 (叶) 证书。 # - ca: 从根 CA 证书开始验证服务器证书链。 "server-verify": "ca", # 证书颁发机构文件,指定一个或多个证书,用于验证服务器证书。如果使用相对路径,则以该配置 # 文件所在的目录为基准。如果前面的 "server-verify" 设置为 "cert" 或 "ca",则该项必 # 需指定。启动 ssltunnel 的用户必须具有读取这些文件的权限。前面所设置的运行 ssltunnel # 的用户不需要这些文件的任何权限。 # - 当前面的 "server-verify" 设置为 "cert":此处指定服务器证书的末端 (叶) 证书。 # - 当前面的 "server-verify" 设置为 "ca":此处指定服务器证书的签发证书链文件 (从根 # CA 证书开始)。 "ca": [ # 首个证书或证书链文件。 "...", # 其它证书或证书链文件。 ... ], # 定制配置。参见 定制配置。 "custom": "..." } }, # 其它隧道定义 ... ] }
定制配置
在配置文件中,可选的,可以为每个隧道的侦听设置和连接设置分别指定一个自定义配置。 自定义配置的值是一个字符串,可以包含多个以分号分隔的设置项。每个设置项都包含以冒号分隔的名称和值。 例如:
"custom": "MinVersion: tls1.2; CipherSuites: RSA-RC4_128_SHA,ECDHE_RSA-RC4_128_SHA; CurvePreferences: P256; SessionTicketsDisabled: true"
可用的设置项目包括:
MinVersion
:可接受的最低 TLS 版本。可用值包括:tls1.0
tls1.1
tls1.2
tls1.3
ssl3.0
MaxVersion
:可接受的最高 TLS 版本。可用值包括:tls1.0
tls1.1
tls1.2
tls1.3
ssl3.0
NextProtos
:所支持的应用程序级协议列表 (按优先顺序排列)。 如果连接双方都支持 ALPN,则所选协议将是此列表中的一种,如果没有共同支持的协议,则连接失败。 如果未指定或对端不支持 ALPN,则连接始终成功。CipherSuites
:允许的 TLS 1.0–1.2 加密套件列表,以逗号分隔 (请注意, TLS 1.3 密码套件不可配置)。列表的顺序会被忽略。如果未指定,则使用一个安全的默认列表。 可用的项目包括:RSA-RC4_128_SHA
RSA-3DES_EDE_CBC_SHA
RSA-AES_128_CBC_SHA
RSA-AES_256_CBC_SHA
RSA-AES_128_CBC_SHA256
RSA-AES_128_GCM_SHA256
RSA-AES_256_GCM_SHA384
ECDHE_ECDSA-RC4_128_SHA
ECDHE_ECDSA-AES_128_CBC_SHA
ECDHE_ECDSA-AES_256_CBC_SHA
ECDHE_RSA-RC4_128_SHA
ECDHE_RSA-3DES_EDE_CBC_SHA
ECDHE_RSA-AES_128_CBC_SHA
ECDHE_RSA-AES_256_CBC_SHA
ECDHE_ECDSA-AES_128_CBC_SHA256
ECDHE_RSA-AES_128_CBC_SHA256
ECDHE_RSA-AES_128_GCM_SHA256
ECDHE_ECDSA-AES_128_GCM_SHA256
ECDHE_RSA-AES_256_GCM_SHA384
ECDHE_ECDSA-AES_256_GCM_SHA384
ECDHE_RSA-CHACHA20_POLY1305_SHA256
ECDHE_ECDSA-CHACHA20_POLY1305_SHA256
CurvePreferences
:指定将在 ECDHE 握手中所使用的椭圆曲线,按优先顺序排列,以逗号分隔。如果未指定,则使用默认值。 在连接设置中,第一个曲线类型将被用作 TLS 1.3 中的共用密钥。可用项目包括:P256
P384
P521
X25519
DynamicRecordSizingDisabled
:指定是否禁用 TLS 记录的自适应大小调整。 可用值包括true
和false
。 如果为true
,则始终使用最大可能的 TLS 记录大小。 如果为false
,则可能会调整 TLS 记录的大小以尝试改善延迟。SessionTicketsDisabled
:指定是否禁用会话凭证和 PSK (恢复) 支持。 可用值包括true
和false
。 可以将其设置为true
以禁用会话凭证和 PSK (恢复) 支持。 注意该设置项仅在监听设置中有效。